Compare commits

...
Sign in to create a new pull request.

29 commits

Author SHA1 Message Date
f57357769f work-in-progress 2016-11-23 20:32:42 -05:00
49c86db30b added parser for multiboot OS header 2016-04-11 07:56:22 +02:00
1afca6a846 fixed indention of imported multiboot.h 2016-04-11 07:56:22 +02:00
f798e334e6 added link to Multiboot spec v0.6 2016-04-11 07:56:22 +02:00
e79d8e8066 added stubs for multiboot support 2016-04-04 09:57:43 +02:00
ba3470efd3 rewrote parsing of firmware arguments 2016-04-04 09:57:43 +02:00
Jeremy Huddleston Sequoia
08b0e29280 Merge remote-tracking branch 'mist64/master' 2016-04-03 12:20:37 -07:00
Jeremy Huddleston Sequoia
20fe81fbb2 Merge pull request #4 from aaditya-chandrasekhar/merge_for_xhyve_xyz_03_17_16
Disable LTO for debug xhyve builds.
2016-03-17 17:19:19 -07:00
Aaditya Chandrasekhar
5e720a3d38 Disable LTO for debug xhyve builds.
LTO is enabled in the xcodeproject for xhyve. When targetting debug
builds override to NO so that local variables and function arguments
can be introspected in the debugger.
2016-03-17 16:11:12 -07:00
Jeremy Huddleston Sequoia
63a785dd22 Merge remote-tracking branch 'mist64/master'
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2015-12-28 19:13:21 -08:00
Jeremy Huddleston Sequoia
f3afdbbf26 Merge pull request #3 from AntonioMeireles/printMac
Add option to print MAC address and exit
2015-12-23 21:40:17 -08:00
Dale Hamel
d9681ceee8 Add option to print MAC address and exit
- picked from https://github.com/mist64/xhyve/pull/79 and rebased

Signed-off-by: António Meireles <antonio.meireles@reformi.st>
2015-12-23 14:30:43 +00:00
Jeremy Huddleston Sequoia
fa6edefef0 Update the homepage URL in show_version()
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2015-12-21 11:08:59 -08:00
Jeremy Huddleston Sequoia
2419b8356b Merge remote-tracking branch 'burke/master'
mist64/xhyve pull request #78 (Add -F <pidfile> flag to write manage a pidfile)
2015-12-18 12:40:49 -08:00
Jeremy Huddleston Sequoia
f5f2296913 Squash a -Wformat-pedantic warning that was added in recent clang
src/vmm/io/vhpet.c:294:60: error: format specifies type 'void *' but the argument has type 'struct vhpet *' [-Werror,-Wformat-pedantic]
                xhyve_abort("vhpet(%p) callout with counter disabled\n", vhpet);
                                   ~~                                    ^~~~~
In file included from src/vmm/io/vhpet.c:35:
include/xhyve/support/misc.h:22:19: note: expanded from macro 'xhyve_abort'
                fprintf(stderr, __VA_ARGS__); \
                                ^
1 error generated.

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2015-12-18 12:32:04 -08:00
Burke Libbey
6d474f19e1
Only return one error code on failure from setup_pidfile 2015-12-18 15:28:22 -05:00
Jeremy Huddleston Sequoia
598ac3afc0 Merge remote-tracking branch 'jeremyhu/xcode-proj' 2015-12-08 11:00:35 -08:00
Jeremy Huddleston Sequoia
aadbaa8475 Initial Xcode Project for xhyve
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2015-12-08 10:57:03 -08:00
Burke Libbey
9db80b5f0e
Add -F <pidfile> flag to write manage a pidfile 2015-12-04 14:39:33 -05:00
Jeremy Huddleston Sequoia
d6a61cf079 Fix a build failure in dbgport when using clang modules
xhyve/src/dbgport.c:51:27: error: redefinition of 'sin' as different kind of symbol
static struct sockaddr_in sin;
                          ^
In module 'Darwin' imported from xhyve/src/dbgport.c:30:
/usr/include/math.h:343:15: note: previous definition is here
extern double sin(double);
              ^
xhyve/src/dbgport.c:126:2: warning: implicitly declaring library function 'sin' with
type
      'double (double)'
        sin.sin_len = sizeof(sin);
        ^
xhyve/src/dbgport.c:126:2: note: include the header <math.h> or explicitly provide a
      declaration for 'sin'

Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
2015-11-15 22:08:55 -08:00
Jeremy Huddleston Sequoia
74b633ec62 Merge remote-tracking branch 'therealmarv/update-docs-virtualbox4.3' 2015-11-14 10:32:54 -08:00
Jeremy Huddleston Sequoia
507d4632af Merge remote-tracking branch 'rickard-von-essen/man' 2015-11-14 10:31:46 -08:00
Jeremy Huddleston Sequoia
588a2ca177 Merge remote-tracking branch 'rickard-von-essen/issue-52' 2015-11-14 10:31:08 -08:00
Jeremy Huddleston Sequoia
e533e41e2f Merge remote-tracking branch 'c4milo/pty-support' 2015-11-14 10:28:35 -08:00
Jeremy Huddleston Sequoia
6077fad3e3 Merge remote-tracking branch 'c4milo/acpi-strlcpy' 2015-11-14 10:27:50 -08:00
Jeremy Huddleston Sequoia
fdce3d6c8a Merge remote-tracking branch 'bonifaido/patch-1' 2015-11-14 10:26:58 -08:00
Camilo Aguilar
b0f41b066b Mentions autopty and stdio in CLI usage 2015-09-24 17:04:27 -04:00
Camilo Aguilar
a85426bced Adds option to create master/slave pseudoterminals
Creates a master/slave pseudoterminal on behalf users when
creating LPC devices and passing the option autopty: -l com1,autopty

This change enables people to easily access virtual machines
through serial terminal emulators on /dev/ttys* devices created
by xhyve.

When running xhyve with autopty, before booting the guest OS, it
outputs the slave pty device path users can plug into using screen,
minicom or the terminal emulator or their preference.
Ex: screen /dev/ttys003

In order to get a shell on COM2, users need to make sure getty
is invoked on the ttyS* created inside the guest OS. If using
autopty on COM1, getty is automatically invoked in most cases.
2015-09-24 17:00:54 -04:00
Rickard von Essen
35f7a3539d Fixes #52: Help text (-h) for memory size (-m) is incorrect. 2015-09-11 16:08:35 +02:00
24 changed files with 3247 additions and 108 deletions

10
.gitignore vendored
View file

@ -1 +1,9 @@
/build/
build
DerivedData
.DS_Store
*~
*.rej
*.orig
cscope.*
tags
TAGS

View file

@ -65,7 +65,8 @@ XHYVE_SRC := \
FIRMWARE_SRC := \
src/firmware/kexec.c \
src/firmware/fbsd.c
src/firmware/fbsd.c \
src/firmware/multiboot.c
SRC := \
$(VMM_SRC) \

View file

@ -1,4 +1,4 @@
# [xhyve.org](http://www.xhyve.org)
# [xhyve.xyz](http://www.xhyve.xyz)
![](./xhyve_logo.png)
<!-- https://thenounproject.com/term/squirrel/57718/ -->
@ -18,25 +18,13 @@ Requirements
* OS X 10.10.3 Yosemite or later
* a 2010 or later Mac (i.e. a CPU that supports EPT)
Installation
------------
If you have homebrew, then simply:
$ brew update
$ brew install --HEAD xhyve
The `--HEAD` in the brew command ensures that you always get the latest changes, even if the homebrew database is not yet updated. If for any reason you don't want that simply do `brew install xhyve` .
if not then:
Building
--------
$ git clone https://github.com/mist64/xhyve
$ git clone https://github.com/xhyve-xyz/xhyve.git
$ cd xhyve
$ make
$ xcodebuild
The resulting binary will be in build/xhyve
The resulting binary will be in build/Release/xhyve
Usage
-----

41
include/sys/elf.h Normal file
View file

@ -0,0 +1,41 @@
/*-
* Copyright (c) 2001 David E. O'Brien.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
/*
* This is a Solaris compatibility header
*/
#ifndef _SYS_ELF_H_
#define _SYS_ELF_H_
#include <sys/types.h>
#include <machine/elf.h>
#include <sys/elf32.h>
#include <sys/elf64.h>
#endif /* !_SYS_ELF_H_ */

257
include/sys/elf32.h Normal file
View file

@ -0,0 +1,257 @@
/*-
* Copyright (c) 1996-1998 John D. Polstra.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _SYS_ELF32_H_
#define _SYS_ELF32_H_ 1
#include <sys/elf_common.h>
/*
* ELF definitions common to all 32-bit architectures.
*/
typedef uint32_t Elf32_Addr;
typedef uint16_t Elf32_Half;
typedef uint32_t Elf32_Off;
typedef int32_t Elf32_Sword;
typedef uint32_t Elf32_Word;
typedef uint64_t Elf32_Lword;
typedef Elf32_Word Elf32_Hashelt;
/* Non-standard class-dependent datatype used for abstraction. */
typedef Elf32_Word Elf32_Size;
typedef Elf32_Sword Elf32_Ssize;
/*
* ELF header.
*/
typedef struct {
unsigned char e_ident[EI_NIDENT]; /* File identification. */
Elf32_Half e_type; /* File type. */
Elf32_Half e_machine; /* Machine architecture. */
Elf32_Word e_version; /* ELF format version. */
Elf32_Addr e_entry; /* Entry point. */
Elf32_Off e_phoff; /* Program header file offset. */
Elf32_Off e_shoff; /* Section header file offset. */
Elf32_Word e_flags; /* Architecture-specific flags. */
Elf32_Half e_ehsize; /* Size of ELF header in bytes. */
Elf32_Half e_phentsize; /* Size of program header entry. */
Elf32_Half e_phnum; /* Number of program header entries. */
Elf32_Half e_shentsize; /* Size of section header entry. */
Elf32_Half e_shnum; /* Number of section header entries. */
Elf32_Half e_shstrndx; /* Section name strings section. */
} Elf32_Ehdr;
/*
* Shared object information, found in SHT_MIPS_LIBLIST.
*/
typedef struct {
Elf32_Word l_name; /* The name of a shared object. */
Elf32_Word l_time_stamp; /* 32-bit timestamp. */
Elf32_Word l_checksum; /* Checksum of visible symbols, sizes. */
Elf32_Word l_version; /* Interface version string index. */
Elf32_Word l_flags; /* Flags (LL_*). */
} Elf32_Lib;
/*
* Section header.
*/
typedef struct {
Elf32_Word sh_name; /* Section name (index into the
section header string table). */
Elf32_Word sh_type; /* Section type. */
Elf32_Word sh_flags; /* Section flags. */
Elf32_Addr sh_addr; /* Address in memory image. */
Elf32_Off sh_offset; /* Offset in file. */
Elf32_Word sh_size; /* Size in bytes. */
Elf32_Word sh_link; /* Index of a related section. */
Elf32_Word sh_info; /* Depends on section type. */
Elf32_Word sh_addralign; /* Alignment in bytes. */
Elf32_Word sh_entsize; /* Size of each entry in section. */
} Elf32_Shdr;
/*
* Program header.
*/
typedef struct {
Elf32_Word p_type; /* Entry type. */
Elf32_Off p_offset; /* File offset of contents. */
Elf32_Addr p_vaddr; /* Virtual address in memory image. */
Elf32_Addr p_paddr; /* Physical address (not used). */
Elf32_Word p_filesz; /* Size of contents in file. */
Elf32_Word p_memsz; /* Size of contents in memory. */
Elf32_Word p_flags; /* Access permission flags. */
Elf32_Word p_align; /* Alignment in memory and file. */
} Elf32_Phdr;
/*
* Dynamic structure. The ".dynamic" section contains an array of them.
*/
typedef struct {
Elf32_Sword d_tag; /* Entry type. */
union {
Elf32_Word d_val; /* Integer value. */
Elf32_Addr d_ptr; /* Address value. */
} d_un;
} Elf32_Dyn;
/*
* Relocation entries.
*/
/* Relocations that don't need an addend field. */
typedef struct {
Elf32_Addr r_offset; /* Location to be relocated. */
Elf32_Word r_info; /* Relocation type and symbol index. */
} Elf32_Rel;
/* Relocations that need an addend field. */
typedef struct {
Elf32_Addr r_offset; /* Location to be relocated. */
Elf32_Word r_info; /* Relocation type and symbol index. */
Elf32_Sword r_addend; /* Addend. */
} Elf32_Rela;
/* Macros for accessing the fields of r_info. */
#define ELF32_R_SYM(info) ((info) >> 8)
#define ELF32_R_TYPE(info) ((unsigned char)(info))
/* Macro for constructing r_info from field values. */
#define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type))
/*
* Note entry header
*/
typedef Elf_Note Elf32_Nhdr;
/*
* Move entry
*/
typedef struct {
Elf32_Lword m_value; /* symbol value */
Elf32_Word m_info; /* size + index */
Elf32_Word m_poffset; /* symbol offset */
Elf32_Half m_repeat; /* repeat count */
Elf32_Half m_stride; /* stride info */
} Elf32_Move;
/*
* The macros compose and decompose values for Move.r_info
*
* sym = ELF32_M_SYM(M.m_info)
* size = ELF32_M_SIZE(M.m_info)
* M.m_info = ELF32_M_INFO(sym, size)
*/
#define ELF32_M_SYM(info) ((info)>>8)
#define ELF32_M_SIZE(info) ((unsigned char)(info))
#define ELF32_M_INFO(sym, size) (((sym)<<8)+(unsigned char)(size))
/*
* Hardware/Software capabilities entry
*/
typedef struct {
Elf32_Word c_tag; /* how to interpret value */
union {
Elf32_Word c_val;
Elf32_Addr c_ptr;
} c_un;
} Elf32_Cap;
/*
* Symbol table entries.
*/
typedef struct {
Elf32_Word st_name; /* String table index of name. */
Elf32_Addr st_value; /* Symbol value. */
Elf32_Word st_size; /* Size of associated object. */
unsigned char st_info; /* Type and binding information. */
unsigned char st_other; /* Reserved (not used). */
Elf32_Half st_shndx; /* Section index of symbol. */
} Elf32_Sym;
/* Macros for accessing the fields of st_info. */
#define ELF32_ST_BIND(info) ((info) >> 4)
#define ELF32_ST_TYPE(info) ((info) & 0xf)
/* Macro for constructing st_info from field values. */
#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
/* Macro for accessing the fields of st_other. */
#define ELF32_ST_VISIBILITY(oth) ((oth) & 0x3)
/* Structures used by Sun & GNU symbol versioning. */
typedef struct
{
Elf32_Half vd_version;
Elf32_Half vd_flags;
Elf32_Half vd_ndx;
Elf32_Half vd_cnt;
Elf32_Word vd_hash;
Elf32_Word vd_aux;
Elf32_Word vd_next;
} Elf32_Verdef;
typedef struct
{
Elf32_Word vda_name;
Elf32_Word vda_next;
} Elf32_Verdaux;
typedef struct
{
Elf32_Half vn_version;
Elf32_Half vn_cnt;
Elf32_Word vn_file;
Elf32_Word vn_aux;
Elf32_Word vn_next;
} Elf32_Verneed;
typedef struct
{
Elf32_Word vna_hash;
Elf32_Half vna_flags;
Elf32_Half vna_other;
Elf32_Word vna_name;
Elf32_Word vna_next;
} Elf32_Vernaux;
typedef Elf32_Half Elf32_Versym;
typedef struct {
Elf32_Half si_boundto; /* direct bindings - symbol bound to */
Elf32_Half si_flags; /* per symbol flags */
} Elf32_Syminfo;
#endif /* !_SYS_ELF32_H_ */

1321
include/sys/elf_common.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -97,6 +97,5 @@ struct loader_callbacks {
const char * (*getenv)(void *arg, int num);
};
void fbsd_init(char *userboot_path, char *bootvolume_path, char *kernelenv,
char *cons);
int fbsd_init(char *opts[]);
uint64_t fbsd_load(void);

View file

@ -85,5 +85,5 @@ struct zero_page {
} __attribute__((packed));
#pragma clang diagnostic pop
void kexec_init(char *kernel_path, char *initrd_path, char *cmdline);
int kexec_init(char *opts[]);
uint64_t kexec(void);

View file

@ -0,0 +1,288 @@
/*-
* Copyright (c) 2016, Steffen Vogel
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY ???, INC ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#pragma once
#include <stdint.h>
#define BASE_KERNEL
#define BASE_MBINFO 0x9800
#define BASE_MBMODS (BASE_MBINFO + sizeof(struct multiboot_info))
#define BASE_CMDLINE
int multiboot_init(char *opts[]);
uint64_t multiboot(void);
/*
* From: http://git.savannah.gnu.org/cgit/grub.git/plain/doc/multiboot.h?h=multiboot
* Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc.
*/
/* How many bytes from the start of the file we search for the header. */
#define MULTIBOOT_SEARCH 8192
#define MULTIBOOT_HEADER_ALIGN 4
/* The magic field should contain this. */
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002
/* This should be in %eax. */
#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
/* Alignment of multiboot modules. */
#define MULTIBOOT_MOD_ALIGN 0x00001000
/* Alignment of the multiboot info structure. */
#define MULTIBOOT_INFO_ALIGN 0x00000004
/* Flags set in the 'flags' member of the multiboot header. */
/* Align all boot modules on i386 page (4KB) boundaries. */
#define MULTIBOOT_PAGE_ALIGN 0x00000001
/* Must pass memory information to OS. */
#define MULTIBOOT_MEMORY_INFO 0x00000002
/* Must pass video information to OS. */
#define MULTIBOOT_VIDEO_MODE 0x00000004
/* This flag indicates the use of the address fields in the header. */
#define MULTIBOOT_AOUT_KLUDGE 0x00010000
/* Flags to be set in the 'flags' member of the multiboot info structure. */
/* is there basic lower/upper memory information? */
#define MULTIBOOT_INFO_MEMORY 0x00000001
/* is there a boot device set? */
#define MULTIBOOT_INFO_BOOTDEV 0x00000002
/* is the command-line defined? */
#define MULTIBOOT_INFO_CMDLINE 0x00000004
/* are there modules to do something with? */
#define MULTIBOOT_INFO_MODS 0x00000008
/* These next two are mutually exclusive */
/* is there a symbol table loaded? */
#define MULTIBOOT_INFO_AOUT_SYMS 0x00000010
/* is there an ELF section header table? */
#define MULTIBOOT_INFO_ELF_SHDR 0X00000020
/* is there a full memory map? */
#define MULTIBOOT_INFO_MEM_MAP 0x00000040
/* Is there drive info? */
#define MULTIBOOT_INFO_DRIVE_INFO 0x00000080
/* Is there a config table? */
#define MULTIBOOT_INFO_CONFIG_TABLE 0x00000100
/* Is there a boot loader name? */
#define MULTIBOOT_INFO_BOOT_LOADER_NAME 0x00000200
/* Is there a APM table? */
#define MULTIBOOT_INFO_APM_TABLE 0x00000400
/* Is there video information? */
#define MULTIBOOT_INFO_VBE_INFO 0x00000800
#define MULTIBOOT_INFO_FRAMEBUFFER_INFO 0x00001000
typedef unsigned char multiboot_uint8_t;
typedef unsigned short multiboot_uint16_t;
typedef unsigned int multiboot_uint32_t;
typedef unsigned long long multiboot_uint64_t;
struct multiboot_header
{
/* Must be MULTIBOOT_MAGIC - see above. */
multiboot_uint32_t magic;
/* Feature flags. */
multiboot_uint32_t flags;
/* The above fields plus this one must equal 0 mod 2^32. */
multiboot_uint32_t checksum;
/* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */
multiboot_uint32_t header_addr;
multiboot_uint32_t load_addr;
multiboot_uint32_t load_end_addr;
multiboot_uint32_t bss_end_addr;
multiboot_uint32_t entry_addr;
/* These are only valid if MULTIBOOT_VIDEO_MODE is set. */
multiboot_uint32_t mode_type;
multiboot_uint32_t width;
multiboot_uint32_t height;
multiboot_uint32_t depth;
};
/* The symbol table for a.out. */
struct multiboot_aout_symbol_table
{
multiboot_uint32_t tabsize;
multiboot_uint32_t strsize;
multiboot_uint32_t addr;
multiboot_uint32_t reserved;
};
typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t;
/* The section header table for ELF. */
struct multiboot_elf_section_header_table
{
multiboot_uint32_t num;
multiboot_uint32_t size;
multiboot_uint32_t addr;
multiboot_uint32_t shndx;
};
typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpacked"
#pragma clang diagnostic ignored "-Wpadded"
struct multiboot_info
{
/* Multiboot info version number */
multiboot_uint32_t flags;
/* Available memory from BIOS */
multiboot_uint32_t mem_lower;
multiboot_uint32_t mem_upper;
/* "root" partition */
multiboot_uint32_t boot_device;
/* Kernel command line */
multiboot_uint32_t cmdline;
/* Boot-Module list */
multiboot_uint32_t mods_count;
multiboot_uint32_t mods_addr;
union {
multiboot_aout_symbol_table_t aout_sym;
multiboot_elf_section_header_table_t elf_sec;
} u;
/* Memory Mapping buffer */
multiboot_uint32_t mmap_length;
multiboot_uint32_t mmap_addr;
/* Drive Info buffer */
multiboot_uint32_t drives_length;
multiboot_uint32_t drives_addr;
/* ROM configuration table */
multiboot_uint32_t config_table;
/* Boot Loader Name */
multiboot_uint32_t boot_loader_name;
/* APM table */
multiboot_uint32_t apm_table;
/* Video */
multiboot_uint32_t vbe_control_info;
multiboot_uint32_t vbe_mode_info;
multiboot_uint16_t vbe_mode;
multiboot_uint16_t vbe_interface_seg;
multiboot_uint16_t vbe_interface_off;
multiboot_uint16_t vbe_interface_len;
multiboot_uint64_t framebuffer_addr;
multiboot_uint32_t framebuffer_pitch;
multiboot_uint32_t framebuffer_width;
multiboot_uint32_t framebuffer_height;
multiboot_uint8_t framebuffer_bpp;
#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0
#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1
#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2
multiboot_uint8_t framebuffer_type;
union {
struct {
multiboot_uint32_t framebuffer_palette_addr;
multiboot_uint16_t framebuffer_palette_num_colors;
};
struct
{
multiboot_uint8_t framebuffer_red_field_position;
multiboot_uint8_t framebuffer_red_mask_size;
multiboot_uint8_t framebuffer_green_field_position;
multiboot_uint8_t framebuffer_green_mask_size;
multiboot_uint8_t framebuffer_blue_field_position;
multiboot_uint8_t framebuffer_blue_mask_size;
};
};
};
typedef struct multiboot_info multiboot_info_t;
struct multiboot_color
{
multiboot_uint8_t red;
multiboot_uint8_t green;
multiboot_uint8_t blue;
};
struct multiboot_mmap_entry
{
multiboot_uint32_t size;
multiboot_uint64_t addr;
multiboot_uint64_t len;
#define MULTIBOOT_MEMORY_AVAILABLE 1
#define MULTIBOOT_MEMORY_RESERVED 2
#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3
#define MULTIBOOT_MEMORY_NVS 4
#define MULTIBOOT_MEMORY_BADRAM 5
multiboot_uint32_t type;
} __attribute__((packed));
#pragma clang diagnostic pop
typedef struct multiboot_mmap_entry multiboot_memory_map_t;
struct multiboot_mod_list
{
/* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */
multiboot_uint32_t mod_start;
multiboot_uint32_t mod_end;
/* Module command line */
multiboot_uint32_t cmdline;
/* padding to take it to 16 bytes (must be zero) */
multiboot_uint32_t pad;
};
typedef struct multiboot_mod_list multiboot_module_t;
/* APM BIOS info. */
struct multiboot_apm_info
{
multiboot_uint16_t version;
multiboot_uint16_t cseg;
multiboot_uint32_t offset;
multiboot_uint16_t cseg_16;
multiboot_uint16_t dseg;
multiboot_uint16_t flags;
multiboot_uint16_t cseg_len;
multiboot_uint16_t cseg_16_len;
multiboot_uint16_t dseg_len;
};

View file

@ -48,7 +48,7 @@
static int listen_fd, conn_fd;
static struct sockaddr_in sin;
static struct sockaddr_in saddrin;
static int
dbg_handler(UNUSED int vcpu, int in, UNUSED int port, int bytes, uint32_t *eax,
@ -123,12 +123,12 @@ init_dbgport(int sport)
exit(1);
}
sin.sin_len = sizeof(sin);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = htons(sport);
saddrin.sin_len = sizeof(saddrin);
saddrin.sin_family = AF_INET;
saddrin.sin_addr.s_addr = htonl(INADDR_ANY);
saddrin.sin_port = htons(sport);
if (bind(listen_fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
if (bind(listen_fd, (struct sockaddr *)&saddrin, sizeof(saddrin)) < 0) {
perror("bind");
exit(1);
}

View file

@ -929,14 +929,15 @@ disk_open(char *path)
return (err);
}
void
fbsd_init(char *userboot_path, char *bootvolume_path, char *kernelenv,
char *cons)
int
fbsd_init(char *opts[])
{
config.userboot = userboot_path;
config.bootvolume = bootvolume_path;
config.kernelenv = kernelenv;
config.cons = cons;
config.userboot = opts[0];
config.bootvolume = opts[1];
config.kernelenv = opts[2];
config.cons = opts[3];
return 0;
}
uint64_t

View file

@ -211,11 +211,13 @@ kexec_load_ramdisk(char *path) {
return 0;
}
void
kexec_init(char *kernel_path, char *initrd_path, char *cmdline) {
config.kernel = kernel_path;
config.initrd = initrd_path;
config.cmdline = cmdline;
int
kexec_init(char *opts[]) {
config.kernel = opts[0];
config.initrd = opts[1];
config.cmdline = opts[2];
return 0;
}
uint64_t

303
src/firmware/multiboot.c Normal file
View file

@ -0,0 +1,303 @@
/*-
* Copyright (c) 2016, Steffen Vogel
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY ???, INC ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* Multiboot Specivication 1 compliant firmware loader.
*
* See: https://www.gnu.org/software/grub/manual/multiboot/multiboot.pdf
*/
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/elf32.h>
#include <xhyve/vmm/vmm_api.h>
#include <xhyve/firmware/multiboot.h>
#ifndef ALIGNUP
#define ALIGNUP(x, a) (((x - 1) & ~(a - 1)) + a)
#endif
#define MAX_MODULES 16
int nmodules; /* number of modules */
static struct mod {
char *path;
char *cmdline;
char *base;
size_t size;
off_t offset;
} memory, kernel, bss, modules[MAX_MODULES];
static int
multiboot_parse_image(const char *image, struct multiboot_header *hdr) {
FILE *f;
uint32_t *head;
size_t bytes;
int ret = -1;
unsigned i;
f = fopen(image, "r");
if (!f) {
fprintf(stderr, "Failed to load kernel image: %s", strerror(errno));
return -1;
}
head = malloc(MULTIBOOT_SEARCH);
if (!head)
return -2;
bytes = fread(head, 1, MULTIBOOT_SEARCH, f);
/* Search Multiboot magic */
for (i = 0; i < bytes / sizeof(*head); i++) {
if (head[i] == MULTIBOOT_HEADER_MAGIC) {
memcpy(hdr, &head[i], sizeof(*hdr));
/* Verify checksum */
ret = (hdr->magic + hdr->flags + hdr->checksum == 0) ? 0 : -3;
break;
}
}
free(head);
fclose(f);
return ret;
}
#if 0
static int
multiboot_parse_elf(struct mod *kernel, struct mod *bss, uint32_t *entrypoint) {
FILE *f;
struct elfhdr *ehdr;
struct elf_phdr *phdr;
int i;
ssize_t sz, pos, bytes;
loff_t offset;
f = fopen(kernel->path, "r");
if (!f)
return -1;
buf = malloc(sizeof(*ehdr));
if (buf == NULL)
return -1;
if (fread(ehdr, sizeof(*ehdr), 1, f) != sizeof(*ehdr))
return -1;
/* Check if this is an ELF file */
if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0)
return -1;
if (ehdr->e_phoff == 0)
return -1;
if (!elf_check_arch(ehdr))
return -1;
for (i=0; i<ehdr->e_phnum; i++) {
phdr = ehdr->e_phoff + i * ehdr->e_phentsize;
if (phdr->p_type == PT_LOAD) {
kernel->offset = phdr->p_offset;
kernel->base =
kernel->size = phdr->p_filesz;
fclose(f);
return 0;
}
}
fclose(f);
return -1; /* Missing PT_LOAD segment */
}
#endif
static int
multiboot_load(struct mod *lowmem, struct mod *module) {
FILE *f;
size_t n;
if (module->base + module->size > lowmem->size)
return -1;
f = fopen(module->path, "r");
if (!f)
return -1;
n = fread(lowmem->base + module->base, module->size, 1, f);
fclose(f);
return n == 1 ? 0 : -1;
}
int
multiboot_init(char *opts[]) {
kernel.path = opts[0];
kernel.cmdline = opts[1];
/* TODO: parse cmdline: "kernel=kernel_cmdline,module1=module1_cmdline,..." */
for (nmodules = 0; nmodules < MAX_MODULES && opts[2 + nmodules]; nmodules++)
modules[nmodules].path = opts[2 + nmodules];
return 0;
}
uint64_t
multiboot(void)
{
int ret, i;
char *module;
struct multiboot_header mbhdr;
struct multiboot_info *mbinfo;
struct stat st;
uint32_t entrypoint;
uintptr_t addr;
/* Map low memory for VM */
memory.base = (uintptr_t) xh_vm_map_gpa(0, xh_vm_get_lowmem_size());
memory.size = xh_vm_get_lowmem_size();
/* Check integrity and load header of multiboot image */
ret = multiboot_parse_image(config.kernel, &mbhdr);
if (ret)
abort();
/* Get address to load kernel */
if (mbhdr.flags & MULTIBOOT_AOUT_KLUDGE) {
kernel.base = mbhdr.load_addr;
kernel.size = mbhdr.load_end_addr - kernel.base;
bss.base = kernel.base + kernel.size;
bss.size = mbhdr.bss_end_addr - bss.base;
entrypoint = mbhdr.entry_addr;
}
/* use ELF header instead */
else {
ret = multiboot_parse_elf(&kernel, &bss, &entrypoint);
if (ret)
abort();
}
/* Load OS image (kernel) */
ret = multiboot_load_kernel(config.kernel, kernel.addr, );
if (ret)
abort();
/* Initialize bss section */
memset(memory.base + bss.base, 0. bss.size);
mbinfo->flags = 0;
mbinfo = memory.base + BASE_MBINFO;
/* Available memory range */
mbinfo->flags |= MULTIBOOT_INFO_MEMORY;
mbinfo->mem_lower = memory.base;
mbinfo->mem_upper = memory.base + memory.size;
/* Kernel cmdline */
mbinfo->flags |= MULTIBOOT_INFO_CMDLINE;
mbinfo->cmdline = BASE_CMDLINE;
strcpy(memory.base + BASE_CMDLINE, kernel.cmdline);
/* Multiboot modules */
mbinfo->flags |= MULTIBOOT_INFO_MODS;
mbinfo->mods_count = 0;
mbinfo->mods_addr = BASE_MBMODS;
/* Load modules (initrd..) after bss section */
addr = bss.base + bss.size;
for (i = 0; i < nmodules; i++) {
struct multiboot_mod_list *mbmod = memory.base + BASE_MBMODS + i * sizeof(*mbmods);
struct mod *module = &modules[i];
ret = stat(module->path, &st);
if (ret)
abort();
module->offset = 0;
module->size = st.st_size;
module->base = mbinfo->flags & MULTIBOOT_PAGE_ALIGN
? ALIGNUP(addr, MULTIBOOT_MOD_ALIGN)
: addr;
ret = multiboot_load(module);
if (ret)
abort();
mbmod->mod_start = (multiboot_uint32_t) module->base;
mbmod->mod_end = (multiboot_uint32_t) module->base + module->size;
mbmod->cmdline = module->cmdline;
mbinfo->mods_count++;
}
/* Prepare machine state. See: Section 3.2 of Multiboot spec 0.6 */
xh_vcpu_reset(0);
xh_vm_set_desc(0, VM_REG_GUEST_GDTR, BASE_GDT, 0x1f, 0);
xh_vm_set_desc(0, VM_REG_GUEST_CS, 0, 0xffffffff, 0xc09b);
xh_vm_set_desc(0, VM_REG_GUEST_DS, 0, 0xffffffff, 0xc093);
xh_vm_set_desc(0, VM_REG_GUEST_ES, 0, 0xffffffff, 0xc093);
xh_vm_set_desc(0, VM_REG_GUEST_SS, 0, 0xffffffff, 0xc093);
xh_vm_set_register(0, VM_REG_GUEST_CS, 0x10);
xh_vm_set_register(0, VM_REG_GUEST_DS, 0x18);
xh_vm_set_register(0, VM_REG_GUEST_ES, 0x18);
xh_vm_set_register(0, VM_REG_GUEST_SS, 0x18);
xh_vm_set_register(0, VM_REG_GUEST_CR0, CR0_PE);
xh_vm_set_register(0, VM_REG_GUEST_RFLAGS, 0);
xh_vm_set_register(0, VM_REG_GUEST_RBP, 0);
xh_vm_set_register(0, VM_REG_GUEST_RDI, 0);
xh_vm_set_register(0, VM_REG_GUEST_RBX, BASE_MBINFO);
xh_vm_set_register(0, VM_REG_GUEST_RSI, 0);
xh_vm_set_register(0, VM_REG_GUEST_RIP, entrypoint);
xh_vm_set_register(0, VM_REG_GUEST_RAX, MULTIBOOT_BOOTLOADER_MAGIG);
return kernel.base;
}

View file

@ -90,6 +90,7 @@ struct fifo {
struct ttyfd {
bool opened;
int fd; /* tty device file descriptor */
char *name; /* slave pty name when using autopty*/
struct termios tio_orig, tio_new; /* I/O Terminals */
};
@ -330,11 +331,11 @@ uart_drain(int fd, enum ev_type ev, void *arg)
struct uart_softc *sc;
int ch;
sc = arg;
sc = arg;
assert(fd == sc->tty.fd);
assert(ev == EVF_READ);
/*
* This routine is called in the context of the mevent thread
* to take out the softc lock to protect against concurrent
@ -362,7 +363,7 @@ uart_write(struct uart_softc *sc, int offset, uint8_t value)
uint8_t msr;
pthread_mutex_lock(&sc->mtx);
/*
* Take care of the special case DLAB accesses first
*/
@ -371,7 +372,7 @@ uart_write(struct uart_softc *sc, int offset, uint8_t value)
sc->dll = value;
goto done;
}
if (offset == REG_DLH) {
sc->dlh = value;
goto done;
@ -501,7 +502,7 @@ uart_read(struct uart_softc *sc, int offset)
reg = sc->dll;
goto done;
}
if (offset == REG_DLH) {
reg = sc->dlh;
goto done;
@ -519,7 +520,7 @@ uart_read(struct uart_softc *sc, int offset)
iir = (sc->fcr & FCR_ENABLE) ? IIR_FIFO_MASK : 0;
intr_reason = (uint8_t) uart_intr_reason(sc);
/*
* Deal with side effects of reading the IIR register
*/
@ -623,7 +624,7 @@ uart_tty_backend(struct uart_softc *sc, const char *opts)
sc->tty.opened = true;
retval = 0;
}
return (retval);
}
@ -631,27 +632,49 @@ int
uart_set_backend(struct uart_softc *sc, const char *opts)
{
int retval;
int ptyfd;
char *ptyname;
retval = -1;
if (opts == NULL)
return (0);
if (strcmp("stdio", opts) == 0) {
if (!uart_stdio) {
sc->tty.fd = STDIN_FILENO;
sc->tty.opened = true;
uart_stdio = true;
retval = 0;
if (strcmp("stdio", opts) == 0 && !uart_stdio) {
sc->tty.fd = STDIN_FILENO;
sc->tty.opened = true;
uart_stdio = true;
retval = fcntl(sc->tty.fd, F_SETFL, O_NONBLOCK);
} else if (strcmp("autopty", opts) == 0) {
if ((ptyfd = open("/dev/ptmx", O_RDWR | O_NONBLOCK)) == -1) {
fprintf(stderr, "error opening /dev/ptmx char device");
return retval;
}
if ((ptyname = ptsname(ptyfd)) == NULL) {
perror("ptsname: error getting name for slave pseudo terminal");
return retval;
}
if ((retval = grantpt(ptyfd)) == -1) {
perror("error setting up ownership and permissions on slave pseudo terminal");
return retval;
}
if ((retval = unlockpt(ptyfd)) == -1) {
perror("error unlocking slave pseudo terminal, to allow its usage");
return retval;
}
fprintf(stdout, "Hook up a terminal emulator to %s in order to access your VM\n", ptyname);
sc->tty.fd = ptyfd;
sc->tty.name = ptyname;
sc->tty.opened = true;
retval = 0;
} else if (uart_tty_backend(sc, opts) == 0) {
retval = 0;
}
/* Make the backend file descriptor non-blocking */
if (retval == 0)
retval = fcntl(sc->tty.fd, F_SETFL, O_NONBLOCK);
if (retval == 0)
uart_opentty(sc);

18
src/xhyve-Info.plist Normal file
View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleShortVersionString</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
</dict>
</plist>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>

View file

@ -31,6 +31,7 @@
#include <stdlib.h>
#include <string.h>
#include <err.h>
#include <fcntl.h>
#include <libgen.h>
#include <unistd.h>
#include <assert.h>
@ -67,6 +68,7 @@
#include <xhyve/firmware/kexec.h>
#include <xhyve/firmware/fbsd.h>
#include <xhyve/firmware/multiboot.h>
#define GUEST_NIO_PORT 0x488 /* guest upcalls via i/o port */
@ -80,6 +82,7 @@ char *vmname = "vm";
int guest_ncpus;
int print_mac;
char *guest_uuid_str;
static char *pidfile;
static int guest_vmexit_on_hlt, guest_vmexit_on_pause;
static int virtio_msix = 1;
@ -110,6 +113,16 @@ static struct bhyvestats {
uint64_t cpu_switch_direct;
} stats;
static const struct loader {
char *name;
int (*init)(char *opts[]);
uint64_t (*load)();
} *fw_loader, fw_loaders[] = {
{ "kexec", kexec_init, kexec },
{ "fbsd", fbsd_init, fbsd_load },
{ "multiboot", multiboot_init, multiboot }
};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpadded"
static struct mt_vmm_info {
@ -118,20 +131,19 @@ static struct mt_vmm_info {
} mt_vmm_info[VM_MAXCPU];
#pragma clang diagnostic pop
static uint64_t (*fw_func)(void);
__attribute__ ((noreturn)) static void
usage(int code)
{
fprintf(stderr,
"Usage: %s [-behuwxMACHPWY] [-c vcpus] [-g <gdb port>] [-l <lpc>]\n"
"Usage: %s [-behuwxMACHPWY] [-c vcpus] [-F <pidfile>] [-g <gdb port>] [-l <lpc>]\n"
" %*s [-m mem] [-p vcpu:hostcpu] [-s <pci>] [-U uuid] -f <fw>\n"
" -A: create ACPI tables\n"
" -c: # cpus (default 1)\n"
" -C: include guest memory in core file\n"
" -e: exit on unhandled I/O access\n"
" -f: firmware\n"
" -F: pidfile\n"
" -g: gdb port\n"
" -h: help\n"
" -H: vmexit from the guest on hlt\n"
@ -159,7 +171,7 @@ show_version()
fprintf(stderr, "%s: %s\n\n%s\n",progname, VERSION,
"xhyve is a port of FreeBSD's bhyve hypervisor to OS X that\n"
"works entirely in userspace and has no other dependencies.\n\n"
"Homepage: https://github.com/mist64/xhyve\n"
"Homepage: http://www.xhyve.xyz\n"
"License: BSD\n");
exit(0);
}
@ -254,7 +266,7 @@ vcpu_thread(void *param)
assert(error == 0);
if (vcpu == BSP) {
rip_entry = fw_func();
rip_entry = fw_loader->load();
} else {
rip_entry = vmexit[vcpu].rip;
spinup_ap_realmode(vcpu, &rip_entry);
@ -720,65 +732,108 @@ parse_memsize(const char *opt, size_t *ret_memsize)
static int
firmware_parse(const char *opt) {
char *fw, *opt1, *opt2, *opt3, *cp;
int ret, i;
char *cp, *opts[16] = { NULL };
fw = strdup(opt);
if (strncmp(fw, "kexec", strlen("kexec")) == 0) {
fw_func = kexec;
} else if (strncmp(fw, "fbsd", strlen("fbsd")) == 0) {
fw_func = fbsd_load;
} else {
cp = strdup(opt);
/* Find method */
for (i = 0; i < (int) nitems(fw_loaders); i++) {
if (strncmp(cp, fw_loaders[i].name, strlen(fw_loaders[i].name)) == 0) {
fw_loader = &fw_loaders[i];
break;
}
}
if (fw_loader == NULL)
goto fail;
/* Split arguments */
for (i = 0; i < (int) nitems(opts) - 1; i++) {
cp = strchr(cp, ',');
if (cp != NULL) {
*cp = '\0';
opts[i] = ++cp;
}
else
break;
}
if ((cp = strchr(fw, ',')) != NULL) {
*cp = '\0';
opt1 = cp + 1;
} else {
goto fail;
}
if ((cp = strchr(opt1, ',')) != NULL) {
*cp = '\0';
opt2 = cp + 1;
} else {
goto fail;
}
if ((cp = strchr(opt2, ',')) != NULL) {
*cp = '\0';
opt3 = cp + 1;
} else {
goto fail;
}
opt2 = strlen(opt2) ? opt2 : NULL;
opt3 = strlen(opt3) ? opt3 : NULL;
if (fw_func == kexec) {
kexec_init(opt1, opt2, opt3);
} else if (fw_func == fbsd_load) {
/* FIXME: let user set boot-loader serial device */
fbsd_init(opt1, opt2, opt3, NULL);
} else {
/* Initialize loader */
ret = fw_loader->init(opts);
if (ret)
goto fail;
}
return 0;
fail:
fprintf(stderr, "Invalid firmware argument\n"
" -f kexec,'kernel','initrd','\"cmdline\"'\n"
" -f fbsd,'userboot','boot volume','\"kernel env\"'\n");
" -f fbsd,'userboot','boot volume','\"kernel env\"'\n"
" -f multiboot,'kernel','\"cmdline\"','initrd','module2','module3'\n");
return -1;
}
static void
remove_pidfile()
{
int error;
if (pidfile == NULL)
return;
error = unlink(pidfile);
if (error < 0)
fprintf(stderr, "Failed to remove pidfile\n");
}
static int
setup_pidfile()
{
int f, error, pid;
char pid_str[21];
if (pidfile == NULL)
return 0;
pid = getpid();
error = sprintf(pid_str, "%d", pid);
if (error < 0)
goto fail;
f = open(pidfile, O_CREAT|O_EXCL|O_WRONLY, 0644);
if (f < 0)
goto fail;
error = atexit(remove_pidfile);
if (error < 0) {
close(f);
remove_pidfile();
goto fail;
}
if (0 > (write(f, (void*)pid_str, strlen(pid_str)))) {
close(f);
goto fail;
}
error = close(f);
if (error < 0)
goto fail;
return 0;
fail:
fprintf(stderr, "Failed to set up pidfile\n");
return -1;
}
int
main(int argc, char *argv[])
{
int c, error, gdb_port, bvmcons, fw;
int c, error, gdb_port, bvmcons;
int dump_guest_memory, max_vcpus, mptgen;
int rtc_localtime;
uint64_t rip;
@ -793,9 +848,8 @@ main(int argc, char *argv[])
memsize = 256 * MB;
mptgen = 1;
rtc_localtime = 1;
fw = 0;
while ((c = getopt(argc, argv, "behvuwxMACHPWY:f:g:c:s:m:l:U:")) != -1) {
while ((c = getopt(argc, argv, "behvuwxMACHPWY:f:F:g:c:s:m:l:U:")) != -1) {
switch (c) {
case 'A':
acpi = 1;
@ -812,10 +866,10 @@ main(int argc, char *argv[])
case 'f':
if (firmware_parse(optarg) != 0) {
exit (1);
} else {
fw = 1;
break;
}
case 'F':
pidfile = optarg;
break;
case 'g':
gdb_port = atoi(optarg);
break;
@ -874,7 +928,7 @@ main(int argc, char *argv[])
}
}
if (fw != 1)
if (fw_loader == NULL)
usage(1);
error = xh_vm_create();
@ -907,6 +961,12 @@ main(int argc, char *argv[])
exit(1);
}
error = setup_pidfile();
if (error) {
fprintf(stderr, "pidfile error %d\n", error);
exit(1);
}
init_mem();
init_inout();
pci_irq_init();

51
xcconfigs/common.xcconfig Normal file
View file

@ -0,0 +1,51 @@
MACOSX_DEPLOYMENT_TARGET = 10.10
CURRENT_PROJECT_VERSION = 0.2.0
INSTALL_PREFIX = /opt/xhyve
CODE_SIGN_IDENTITY = -
VERSIONING_SYSTEM = apple-generic
DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
PREBINDING = NO
ENABLE_STRICT_OBJC_MSGSEND = YES
CLANG_ENABLE_OBJC_ARC = YES
CLANG_ENABLE_MODULES = YES
GCC_C_LANGUAGE_STANDARD = gnu11
GCC_NO_COMMON_BLOCKS = YES
GCC_OPTIMIZATION_LEVEL = s
OTHER_CFLAGS_common = -fstrict-aliasing
OTHER_CFLAGS = $(inherited) $(OTHER_CFLAGS_common)
OTHER_LDFLAGS_common =
OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_common)
GCC_PREPROCESSOR_DEFINITIONS_common =
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) $(GCC_PREPROCESSOR_DEFINITIONS_common)
HEADER_SEARCH_PATHS = $(SRCROOT)/include $(inherited)
WARNING_CFLAGS = -Weverything -Wall -Wno-error=deprecated -Wno-unknown-warning-option -Wno-reserved-id-macro -Wno-missing-variable-declarations -pedantic
GCC_TREAT_WARNINGS_AS_ERRORS = YES
CLANG_WARN_BOOL_CONVERSION = YES
CLANG_WARN_CONSTANT_CONVERSION = YES
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES
CLANG_WARN_EMPTY_BODY = YES
CLANG_WARN_ENUM_CONVERSION = YES
CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES
CLANG_WARN_INT_CONVERSION = YES
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
GCC_WARN_64_TO_32_BIT_CONVERSION = YES
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES
GCC_WARN_UNDECLARED_SELECTOR = YES
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE
GCC_WARN_UNUSED_FUNCTION = YES
GCC_WARN_UNUSED_LABEL = YES
GCC_WARN_UNUSED_PARAMETER = YES
GCC_WARN_UNUSED_VARIABLE = YES
LLVM_LTO = YES

View file

@ -0,0 +1,10 @@
#include "common_debug.xcconfig"
OTHER_CFLAGS_asan = $(OTHER_CFLAGS_common) -fsanitize=address
OTHER_CFLAGS = $(inherited) $(OTHER_CFLAGS_asan)
OTHER_LDFLAGS_asan = $(OTHER_LDFLAGS_debug) -fsanitize=address
OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_asan)
GCC_PREPROCESSOR_DEFINITIONS_asan = $(GCC_PREPROCESSOR_DEFINITIONS_debug)
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) $(GCC_PREPROCESSOR_DEFINITIONS_asan)

View file

@ -0,0 +1,17 @@
#include "common.xcconfig"
COPY_PHASE_STRIP = NO
STRIP_INSTALLED_PRODUCT = NO
GCC_OPTIMIZATION_LEVEL = 0
LLVM_LTO = NO
OTHER_CFLAGS_debug = $(OTHER_CFLAGS_common) -fno-inline
OTHER_CFLAGS = $(inherited) $(OTHER_CFLAGS_debug)
OTHER_LDFLAGS_debug = $(OTHER_LDFLAGS_common)
OTHER_LDFLAGS = $(inherited) $(OTHER_LDFLAGS_debug)
GCC_PREPROCESSOR_DEFINITIONS_asan = $(GCC_PREPROCESSOR_DEFINITIONS_common) XHYVE_CONFIG_ASSERT
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) $(GCC_PREPROCESSOR_DEFINITIONS_common)

12
xcconfigs/xhyve.xcconfig Normal file
View file

@ -0,0 +1,12 @@
CODE_SIGN_ENTITLEMENTS = src/xhyve-entitlements.plist
OTHER_CODE_SIGN_FLAGS = -o library
PRODUCT_BUNDLE_IDENTIFIER = xyz.xhyve.xhyve
INFOPLIST_FILE = src/xhyve-Info.plist
CREATE_INFOPLIST_SECTION_IN_BINARY = YES
OTHER_CFLAGS = $(inherited) -include xhyve-version.h -fvisibility=hidden
INSTALL_PATH = $(INSTALL_PREFIX)/bin
MAN_INSTALL_PATH = $(INSTALL_PREFIX)/share/man

11
xcscripts/version.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/bash
set -e -x
if [[ -d "${SRCROOT}/.git" ]] ; then
VERSION=$(GIT_DIR="${SRCROOT}"/.git git describe --abbrev=6 --dirty --always --tags)
else
VERSION="v${CURRENT_PROJECT_VERSION}"
fi
echo "#define VERSION \"${VERSION}\"" > "${DERIVED_FILE_DIR}/xhyve-version.h"

2
xhyve.xcodeproj/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
project.xcworkspace
xcuserdata

View file

@ -0,0 +1,716 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
3F3FF9E91BF7C63A004C89A1 /* Hypervisor.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F3FF9E81BF7C63A004C89A1 /* Hypervisor.framework */; };
3F3FFA5D1BF7C6A7004C89A1 /* acpitbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA1F1BF7C6A7004C89A1 /* acpitbl.c */; };
3F3FFA5E1BF7C6A7004C89A1 /* atkbdc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA201BF7C6A7004C89A1 /* atkbdc.c */; };
3F3FFA5F1BF7C6A7004C89A1 /* block_if.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA211BF7C6A7004C89A1 /* block_if.c */; };
3F3FFA601BF7C6A7004C89A1 /* consport.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA221BF7C6A7004C89A1 /* consport.c */; };
3F3FFA611BF7C6A7004C89A1 /* dbgport.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA231BF7C6A7004C89A1 /* dbgport.c */; };
3F3FFA621BF7C6A7004C89A1 /* fbsd.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA261BF7C6A7004C89A1 /* fbsd.c */; };
3F3FFA631BF7C6A7004C89A1 /* kexec.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA271BF7C6A7004C89A1 /* kexec.c */; };
3F3FFA641BF7C6A7004C89A1 /* inout.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA281BF7C6A7004C89A1 /* inout.c */; };
3F3FFA651BF7C6A7004C89A1 /* ioapic.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA291BF7C6A7004C89A1 /* ioapic.c */; };
3F3FFA661BF7C6A7004C89A1 /* md5c.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA2A1BF7C6A7004C89A1 /* md5c.c */; };
3F3FFA671BF7C6A7004C89A1 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA2B1BF7C6A7004C89A1 /* mem.c */; };
3F3FFA681BF7C6A7004C89A1 /* mevent.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA2C1BF7C6A7004C89A1 /* mevent.c */; };
3F3FFA6A1BF7C6A7004C89A1 /* mptbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA2E1BF7C6A7004C89A1 /* mptbl.c */; };
3F3FFA6B1BF7C6A7004C89A1 /* pci_ahci.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA2F1BF7C6A7004C89A1 /* pci_ahci.c */; };
3F3FFA6C1BF7C6A7004C89A1 /* pci_emul.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA301BF7C6A7004C89A1 /* pci_emul.c */; };
3F3FFA6D1BF7C6A7004C89A1 /* pci_hostbridge.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA311BF7C6A7004C89A1 /* pci_hostbridge.c */; };
3F3FFA6E1BF7C6A7004C89A1 /* pci_irq.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA321BF7C6A7004C89A1 /* pci_irq.c */; };
3F3FFA6F1BF7C6A7004C89A1 /* pci_lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA331BF7C6A7004C89A1 /* pci_lpc.c */; };
3F3FFA701BF7C6A7004C89A1 /* pci_uart.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA341BF7C6A7004C89A1 /* pci_uart.c */; };
3F3FFA711BF7C6A7004C89A1 /* pci_virtio_block.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA351BF7C6A7004C89A1 /* pci_virtio_block.c */; };
3F3FFA721BF7C6A7004C89A1 /* pci_virtio_net_tap.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA361BF7C6A7004C89A1 /* pci_virtio_net_tap.c */; };
3F3FFA731BF7C6A7004C89A1 /* pci_virtio_net_vmnet.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA371BF7C6A7004C89A1 /* pci_virtio_net_vmnet.c */; };
3F3FFA741BF7C6A7004C89A1 /* pci_virtio_rnd.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA381BF7C6A7004C89A1 /* pci_virtio_rnd.c */; };
3F3FFA751BF7C6A7004C89A1 /* pm.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA391BF7C6A7004C89A1 /* pm.c */; };
3F3FFA761BF7C6A7004C89A1 /* post.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA3A1BF7C6A7004C89A1 /* post.c */; };
3F3FFA771BF7C6A7004C89A1 /* rtc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA3B1BF7C6A7004C89A1 /* rtc.c */; };
3F3FFA781BF7C6A7004C89A1 /* smbiostbl.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA3C1BF7C6A7004C89A1 /* smbiostbl.c */; };
3F3FFA791BF7C6A7004C89A1 /* task_switch.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA3D1BF7C6A7004C89A1 /* task_switch.c */; };
3F3FFA7A1BF7C6A7004C89A1 /* uart_emul.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA3E1BF7C6A7004C89A1 /* uart_emul.c */; };
3F3FFA7B1BF7C6A7004C89A1 /* virtio.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA3F1BF7C6A7004C89A1 /* virtio.c */; };
3F3FFA7C1BF7C6A7004C89A1 /* vmcs.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA421BF7C6A7004C89A1 /* vmcs.c */; };
3F3FFA7D1BF7C6A7004C89A1 /* vmx.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA431BF7C6A7004C89A1 /* vmx.c */; };
3F3FFA7E1BF7C6A7004C89A1 /* vmx_msr.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA441BF7C6A7004C89A1 /* vmx_msr.c */; };
3F3FFA7F1BF7C6A7004C89A1 /* vatpic.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA461BF7C6A7004C89A1 /* vatpic.c */; };
3F3FFA801BF7C6A7004C89A1 /* vatpit.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA471BF7C6A7004C89A1 /* vatpit.c */; };
3F3FFA811BF7C6A7004C89A1 /* vhpet.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA481BF7C6A7004C89A1 /* vhpet.c */; };
3F3FFA821BF7C6A7004C89A1 /* vioapic.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA491BF7C6A7004C89A1 /* vioapic.c */; };
3F3FFA831BF7C6A7004C89A1 /* vlapic.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA4A1BF7C6A7004C89A1 /* vlapic.c */; };
3F3FFA841BF7C6A7004C89A1 /* vpmtmr.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA4B1BF7C6A7004C89A1 /* vpmtmr.c */; };
3F3FFA851BF7C6A7004C89A1 /* vrtc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA4C1BF7C6A7004C89A1 /* vrtc.c */; };
3F3FFA861BF7C6A7004C89A1 /* vmm.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA4D1BF7C6A7004C89A1 /* vmm.c */; };
3F3FFA871BF7C6A7004C89A1 /* vmm_api.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA4E1BF7C6A7004C89A1 /* vmm_api.c */; };
3F3FFA881BF7C6A7004C89A1 /* vmm_callout.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA4F1BF7C6A7004C89A1 /* vmm_callout.c */; };
3F3FFA891BF7C6A7004C89A1 /* vmm_host.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA501BF7C6A7004C89A1 /* vmm_host.c */; };
3F3FFA8A1BF7C6A7004C89A1 /* vmm_instruction_emul.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA511BF7C6A7004C89A1 /* vmm_instruction_emul.c */; };
3F3FFA8B1BF7C6A7004C89A1 /* vmm_ioport.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA521BF7C6A7004C89A1 /* vmm_ioport.c */; };
3F3FFA8C1BF7C6A7004C89A1 /* vmm_lapic.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA531BF7C6A7004C89A1 /* vmm_lapic.c */; };
3F3FFA8D1BF7C6A7004C89A1 /* vmm_mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA541BF7C6A7004C89A1 /* vmm_mem.c */; };
3F3FFA8E1BF7C6A7004C89A1 /* vmm_stat.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA551BF7C6A7004C89A1 /* vmm_stat.c */; };
3F3FFA8F1BF7C6A7004C89A1 /* vmm_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA561BF7C6A7004C89A1 /* vmm_util.c */; };
3F3FFA901BF7C6A7004C89A1 /* x86.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA571BF7C6A7004C89A1 /* x86.c */; };
3F3FFA911BF7C6A7004C89A1 /* xhyve.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA5A1BF7C6A7004C89A1 /* xhyve.c */; };
3F3FFA921BF7C6A7004C89A1 /* xmsr.c in Sources */ = {isa = PBXBuildFile; fileRef = 3F3FFA5B1BF7C6A7004C89A1 /* xmsr.c */; };
3F3FFA971BF7CC0E004C89A1 /* xhyve.1 in Install Man Pages */ = {isa = PBXBuildFile; fileRef = 3F3FF9E41BF7C5DC004C89A1 /* xhyve.1 */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
3F1934901BF7C0D40099CC46 /* Install Man Pages */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "$(MAN_INSTALL_PATH)/man1";
dstSubfolderSpec = 0;
files = (
3F3FFA971BF7CC0E004C89A1 /* xhyve.1 in Install Man Pages */,
);
name = "Install Man Pages";
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
3F1934921BF7C0D40099CC46 /* xhyve */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = xhyve; sourceTree = BUILT_PRODUCTS_DIR; };
3F3FF9E01BF7C5D5004C89A1 /* common.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = common.xcconfig; sourceTree = "<group>"; };
3F3FF9E11BF7C5D5004C89A1 /* common_asan.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = common_asan.xcconfig; sourceTree = "<group>"; };
3F3FF9E21BF7C5D5004C89A1 /* common_debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = common_debug.xcconfig; sourceTree = "<group>"; };
3F3FF9E31BF7C5D5004C89A1 /* xhyve.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = xhyve.xcconfig; sourceTree = "<group>"; };
3F3FF9E41BF7C5DC004C89A1 /* xhyve.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = xhyve.1; sourceTree = SOURCE_ROOT; };
3F3FF9E61BF7C5F9004C89A1 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
3F3FF9E81BF7C63A004C89A1 /* Hypervisor.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Hypervisor.framework; path = /System/Library/Frameworks/Hypervisor.framework; sourceTree = SDKROOT; };
3F3FFA1E1BF7C6A7004C89A1 /* acpi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acpi.c; sourceTree = "<group>"; };
3F3FFA1F1BF7C6A7004C89A1 /* acpitbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acpitbl.c; sourceTree = "<group>"; };
3F3FFA201BF7C6A7004C89A1 /* atkbdc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = atkbdc.c; sourceTree = "<group>"; };
3F3FFA211BF7C6A7004C89A1 /* block_if.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = block_if.c; sourceTree = "<group>"; };
3F3FFA221BF7C6A7004C89A1 /* consport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = consport.c; sourceTree = "<group>"; };
3F3FFA231BF7C6A7004C89A1 /* dbgport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dbgport.c; sourceTree = "<group>"; };
3F3FFA241BF7C6A7004C89A1 /* dsdt.asl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsdt.asl; sourceTree = "<group>"; };
3F3FFA261BF7C6A7004C89A1 /* fbsd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fbsd.c; sourceTree = "<group>"; };
3F3FFA271BF7C6A7004C89A1 /* kexec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = kexec.c; sourceTree = "<group>"; };
3F3FFA281BF7C6A7004C89A1 /* inout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inout.c; sourceTree = "<group>"; };
3F3FFA291BF7C6A7004C89A1 /* ioapic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapic.c; sourceTree = "<group>"; };
3F3FFA2A1BF7C6A7004C89A1 /* md5c.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = md5c.c; sourceTree = "<group>"; };
3F3FFA2B1BF7C6A7004C89A1 /* mem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mem.c; sourceTree = "<group>"; };
3F3FFA2C1BF7C6A7004C89A1 /* mevent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mevent.c; sourceTree = "<group>"; };
3F3FFA2D1BF7C6A7004C89A1 /* mevent_test.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mevent_test.c; sourceTree = "<group>"; };
3F3FFA2E1BF7C6A7004C89A1 /* mptbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mptbl.c; sourceTree = "<group>"; };
3F3FFA2F1BF7C6A7004C89A1 /* pci_ahci.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_ahci.c; sourceTree = "<group>"; };
3F3FFA301BF7C6A7004C89A1 /* pci_emul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_emul.c; sourceTree = "<group>"; };
3F3FFA311BF7C6A7004C89A1 /* pci_hostbridge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_hostbridge.c; sourceTree = "<group>"; };
3F3FFA321BF7C6A7004C89A1 /* pci_irq.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_irq.c; sourceTree = "<group>"; };
3F3FFA331BF7C6A7004C89A1 /* pci_lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_lpc.c; sourceTree = "<group>"; };
3F3FFA341BF7C6A7004C89A1 /* pci_uart.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_uart.c; sourceTree = "<group>"; };
3F3FFA351BF7C6A7004C89A1 /* pci_virtio_block.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_virtio_block.c; sourceTree = "<group>"; };
3F3FFA361BF7C6A7004C89A1 /* pci_virtio_net_tap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_virtio_net_tap.c; sourceTree = "<group>"; };
3F3FFA371BF7C6A7004C89A1 /* pci_virtio_net_vmnet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_virtio_net_vmnet.c; sourceTree = "<group>"; };
3F3FFA381BF7C6A7004C89A1 /* pci_virtio_rnd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pci_virtio_rnd.c; sourceTree = "<group>"; };
3F3FFA391BF7C6A7004C89A1 /* pm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pm.c; sourceTree = "<group>"; };
3F3FFA3A1BF7C6A7004C89A1 /* post.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = post.c; sourceTree = "<group>"; };
3F3FFA3B1BF7C6A7004C89A1 /* rtc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rtc.c; sourceTree = "<group>"; };
3F3FFA3C1BF7C6A7004C89A1 /* smbiostbl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smbiostbl.c; sourceTree = "<group>"; };
3F3FFA3D1BF7C6A7004C89A1 /* task_switch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = task_switch.c; sourceTree = "<group>"; };
3F3FFA3E1BF7C6A7004C89A1 /* uart_emul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = uart_emul.c; sourceTree = "<group>"; };
3F3FFA3F1BF7C6A7004C89A1 /* virtio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = virtio.c; sourceTree = "<group>"; };
3F3FFA421BF7C6A7004C89A1 /* vmcs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmcs.c; sourceTree = "<group>"; };
3F3FFA431BF7C6A7004C89A1 /* vmx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmx.c; sourceTree = "<group>"; };
3F3FFA441BF7C6A7004C89A1 /* vmx_msr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmx_msr.c; sourceTree = "<group>"; };
3F3FFA461BF7C6A7004C89A1 /* vatpic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vatpic.c; sourceTree = "<group>"; };
3F3FFA471BF7C6A7004C89A1 /* vatpit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vatpit.c; sourceTree = "<group>"; };
3F3FFA481BF7C6A7004C89A1 /* vhpet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vhpet.c; sourceTree = "<group>"; };
3F3FFA491BF7C6A7004C89A1 /* vioapic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vioapic.c; sourceTree = "<group>"; };
3F3FFA4A1BF7C6A7004C89A1 /* vlapic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vlapic.c; sourceTree = "<group>"; };
3F3FFA4B1BF7C6A7004C89A1 /* vpmtmr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vpmtmr.c; sourceTree = "<group>"; };
3F3FFA4C1BF7C6A7004C89A1 /* vrtc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vrtc.c; sourceTree = "<group>"; };
3F3FFA4D1BF7C6A7004C89A1 /* vmm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm.c; sourceTree = "<group>"; };
3F3FFA4E1BF7C6A7004C89A1 /* vmm_api.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_api.c; sourceTree = "<group>"; };
3F3FFA4F1BF7C6A7004C89A1 /* vmm_callout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_callout.c; sourceTree = "<group>"; };
3F3FFA501BF7C6A7004C89A1 /* vmm_host.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_host.c; sourceTree = "<group>"; };
3F3FFA511BF7C6A7004C89A1 /* vmm_instruction_emul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_instruction_emul.c; sourceTree = "<group>"; };
3F3FFA521BF7C6A7004C89A1 /* vmm_ioport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_ioport.c; sourceTree = "<group>"; };
3F3FFA531BF7C6A7004C89A1 /* vmm_lapic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_lapic.c; sourceTree = "<group>"; };
3F3FFA541BF7C6A7004C89A1 /* vmm_mem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_mem.c; sourceTree = "<group>"; };
3F3FFA551BF7C6A7004C89A1 /* vmm_stat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_stat.c; sourceTree = "<group>"; };
3F3FFA561BF7C6A7004C89A1 /* vmm_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vmm_util.c; sourceTree = "<group>"; };
3F3FFA571BF7C6A7004C89A1 /* x86.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = x86.c; sourceTree = "<group>"; };
3F3FFA581BF7C6A7004C89A1 /* xhyve-entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "xhyve-entitlements.plist"; path = "src/xhyve-entitlements.plist"; sourceTree = "<group>"; };
3F3FFA591BF7C6A7004C89A1 /* xhyve-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "xhyve-Info.plist"; path = "src/xhyve-Info.plist"; sourceTree = "<group>"; };
3F3FFA5A1BF7C6A7004C89A1 /* xhyve.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xhyve.c; sourceTree = "<group>"; };
3F3FFA5B1BF7C6A7004C89A1 /* xmsr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xmsr.c; sourceTree = "<group>"; };
3F3FFA961BF7CBFF004C89A1 /* version.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = version.sh; sourceTree = "<group>"; };
3FB6515C1BF7CD4500ED886F /* acpi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = acpi.h; sourceTree = "<group>"; };
3FB6515D1BF7CD4500ED886F /* ahci.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ahci.h; sourceTree = "<group>"; };
3FB6515E1BF7CD4500ED886F /* block_if.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = block_if.h; sourceTree = "<group>"; };
3FB6515F1BF7CD4500ED886F /* dbgport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dbgport.h; sourceTree = "<group>"; };
3FB651611BF7CD4500ED886F /* fbsd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fbsd.h; sourceTree = "<group>"; };
3FB651621BF7CD4500ED886F /* kexec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = kexec.h; sourceTree = "<group>"; };
3FB651631BF7CD4500ED886F /* inout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = inout.h; sourceTree = "<group>"; };
3FB651641BF7CD4500ED886F /* ioapic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ioapic.h; sourceTree = "<group>"; };
3FB651651BF7CD4500ED886F /* mem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = "<group>"; };
3FB651661BF7CD4500ED886F /* mevent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mevent.h; sourceTree = "<group>"; };
3FB651671BF7CD4500ED886F /* mptbl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mptbl.h; sourceTree = "<group>"; };
3FB651681BF7CD4500ED886F /* pci_emul.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pci_emul.h; sourceTree = "<group>"; };
3FB651691BF7CD4500ED886F /* pci_irq.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pci_irq.h; sourceTree = "<group>"; };
3FB6516A1BF7CD4500ED886F /* pci_lpc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pci_lpc.h; sourceTree = "<group>"; };
3FB6516B1BF7CD4500ED886F /* rtc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rtc.h; sourceTree = "<group>"; };
3FB6516C1BF7CD4500ED886F /* smbiostbl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = smbiostbl.h; sourceTree = "<group>"; };
3FB6516E1BF7CD4500ED886F /* acpi_hpet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = acpi_hpet.h; sourceTree = "<group>"; };
3FB6516F1BF7CD4500ED886F /* apicreg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = apicreg.h; sourceTree = "<group>"; };
3FB651701BF7CD4500ED886F /* ata.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ata.h; sourceTree = "<group>"; };
3FB651711BF7CD4500ED886F /* atomic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = atomic.h; sourceTree = "<group>"; };
3FB651721BF7CD4500ED886F /* bitset.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bitset.h; sourceTree = "<group>"; };
3FB651731BF7CD4500ED886F /* cpuset.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cpuset.h; sourceTree = "<group>"; };
3FB651741BF7CD4500ED886F /* i8253reg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = i8253reg.h; sourceTree = "<group>"; };
3FB651751BF7CD4500ED886F /* i8259.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = i8259.h; sourceTree = "<group>"; };
3FB651761BF7CD4500ED886F /* linker_set.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = linker_set.h; sourceTree = "<group>"; };
3FB651771BF7CD4500ED886F /* md5.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = "<group>"; };
3FB651781BF7CD4500ED886F /* misc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = misc.h; sourceTree = "<group>"; };
3FB651791BF7CD4500ED886F /* mptable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mptable.h; sourceTree = "<group>"; };
3FB6517A1BF7CD4500ED886F /* ns16550.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ns16550.h; sourceTree = "<group>"; };
3FB6517B1BF7CD4500ED886F /* pcireg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pcireg.h; sourceTree = "<group>"; };
3FB6517C1BF7CD4500ED886F /* psl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = psl.h; sourceTree = "<group>"; };
3FB6517D1BF7CD4500ED886F /* rtc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rtc.h; sourceTree = "<group>"; };
3FB6517E1BF7CD4500ED886F /* segments.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = segments.h; sourceTree = "<group>"; };
3FB6517F1BF7CD4500ED886F /* specialreg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = specialreg.h; sourceTree = "<group>"; };
3FB651801BF7CD4500ED886F /* timerreg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = timerreg.h; sourceTree = "<group>"; };
3FB651811BF7CD4500ED886F /* tree.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tree.h; sourceTree = "<group>"; };
3FB651821BF7CD4500ED886F /* uuid.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = uuid.h; sourceTree = "<group>"; };
3FB651831BF7CD4500ED886F /* uart_emul.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = uart_emul.h; sourceTree = "<group>"; };
3FB651841BF7CD4500ED886F /* virtio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = virtio.h; sourceTree = "<group>"; };
3FB651871BF7CD4500ED886F /* vmcs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmcs.h; sourceTree = "<group>"; };
3FB651881BF7CD4500ED886F /* vmx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmx.h; sourceTree = "<group>"; };
3FB651891BF7CD4500ED886F /* vmx_controls.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmx_controls.h; sourceTree = "<group>"; };
3FB6518A1BF7CD4500ED886F /* vmx_msr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmx_msr.h; sourceTree = "<group>"; };
3FB6518C1BF7CD4500ED886F /* vatpic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vatpic.h; sourceTree = "<group>"; };
3FB6518D1BF7CD4500ED886F /* vatpit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vatpit.h; sourceTree = "<group>"; };
3FB6518E1BF7CD4500ED886F /* vhpet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vhpet.h; sourceTree = "<group>"; };
3FB6518F1BF7CD4500ED886F /* vioapic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vioapic.h; sourceTree = "<group>"; };
3FB651901BF7CD4500ED886F /* vlapic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vlapic.h; sourceTree = "<group>"; };
3FB651911BF7CD4500ED886F /* vlapic_priv.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vlapic_priv.h; sourceTree = "<group>"; };
3FB651921BF7CD4500ED886F /* vpmtmr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vpmtmr.h; sourceTree = "<group>"; };
3FB651931BF7CD4500ED886F /* vrtc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vrtc.h; sourceTree = "<group>"; };
3FB651941BF7CD4500ED886F /* vmm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm.h; sourceTree = "<group>"; };
3FB651951BF7CD4500ED886F /* vmm_api.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_api.h; sourceTree = "<group>"; };
3FB651961BF7CD4500ED886F /* vmm_callout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_callout.h; sourceTree = "<group>"; };
3FB651971BF7CD4500ED886F /* vmm_common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_common.h; sourceTree = "<group>"; };
3FB651981BF7CD4500ED886F /* vmm_host.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_host.h; sourceTree = "<group>"; };
3FB651991BF7CD4500ED886F /* vmm_instruction_emul.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_instruction_emul.h; sourceTree = "<group>"; };
3FB6519A1BF7CD4500ED886F /* vmm_ioport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_ioport.h; sourceTree = "<group>"; };
3FB6519B1BF7CD4500ED886F /* vmm_ktr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_ktr.h; sourceTree = "<group>"; };
3FB6519C1BF7CD4500ED886F /* vmm_lapic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_lapic.h; sourceTree = "<group>"; };
3FB6519D1BF7CD4500ED886F /* vmm_mem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_mem.h; sourceTree = "<group>"; };
3FB6519E1BF7CD4500ED886F /* vmm_stat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_stat.h; sourceTree = "<group>"; };
3FB6519F1BF7CD4500ED886F /* vmm_util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vmm_util.h; sourceTree = "<group>"; };
3FB651A01BF7CD4500ED886F /* x86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = x86.h; sourceTree = "<group>"; };
3FB651A11BF7CD4500ED886F /* xhyve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xhyve.h; sourceTree = "<group>"; };
3FB651A21BF7CD4500ED886F /* xmsr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xmsr.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3F19348F1BF7C0D40099CC46 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3F3FF9E91BF7C63A004C89A1 /* Hypervisor.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3F1934891BF7C0D40099CC46 = {
isa = PBXGroup;
children = (
3FB6515A1BF7CD4500ED886F /* include */,
3F3FFA1D1BF7C6A7004C89A1 /* src */,
3F3FF9E51BF7C5ED004C89A1 /* Documentation */,
3F3FF9E71BF7C5FF004C89A1 /* Build Support */,
3F1934931BF7C0D40099CC46 /* Products */,
);
sourceTree = "<group>";
};
3F1934931BF7C0D40099CC46 /* Products */ = {
isa = PBXGroup;
children = (
3F1934921BF7C0D40099CC46 /* xhyve */,
);
name = Products;
sourceTree = "<group>";
};
3F3FF9DF1BF7C5D5004C89A1 /* xcconfigs */ = {
isa = PBXGroup;
children = (
3F3FFA951BF7CBFF004C89A1 /* xcscripts */,
3F3FF9E01BF7C5D5004C89A1 /* common.xcconfig */,
3F3FF9E11BF7C5D5004C89A1 /* common_asan.xcconfig */,
3F3FF9E21BF7C5D5004C89A1 /* common_debug.xcconfig */,
3F3FF9E31BF7C5D5004C89A1 /* xhyve.xcconfig */,
);
path = xcconfigs;
sourceTree = "<group>";
};
3F3FF9E51BF7C5ED004C89A1 /* Documentation */ = {
isa = PBXGroup;
children = (
3F3FF9E61BF7C5F9004C89A1 /* README.md */,
3F3FF9E41BF7C5DC004C89A1 /* xhyve.1 */,
);
name = Documentation;
sourceTree = "<group>";
};
3F3FF9E71BF7C5FF004C89A1 /* Build Support */ = {
isa = PBXGroup;
children = (
3F3FFA581BF7C6A7004C89A1 /* xhyve-entitlements.plist */,
3F3FFA591BF7C6A7004C89A1 /* xhyve-Info.plist */,
3F3FF9EA1BF7C64C004C89A1 /* Linked Frameworks */,
3F3FF9DF1BF7C5D5004C89A1 /* xcconfigs */,
);
name = "Build Support";
sourceTree = "<group>";
};
3F3FF9EA1BF7C64C004C89A1 /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
3F3FF9E81BF7C63A004C89A1 /* Hypervisor.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
3F3FFA1D1BF7C6A7004C89A1 /* src */ = {
isa = PBXGroup;
children = (
3F3FFA251BF7C6A7004C89A1 /* firmware */,
3F3FFA401BF7C6A7004C89A1 /* vmm */,
3F3FFA1E1BF7C6A7004C89A1 /* acpi.c */,
3F3FFA1F1BF7C6A7004C89A1 /* acpitbl.c */,
3F3FFA201BF7C6A7004C89A1 /* atkbdc.c */,
3F3FFA211BF7C6A7004C89A1 /* block_if.c */,
3F3FFA221BF7C6A7004C89A1 /* consport.c */,
3F3FFA231BF7C6A7004C89A1 /* dbgport.c */,
3F3FFA241BF7C6A7004C89A1 /* dsdt.asl */,
3F3FFA281BF7C6A7004C89A1 /* inout.c */,
3F3FFA291BF7C6A7004C89A1 /* ioapic.c */,
3F3FFA2A1BF7C6A7004C89A1 /* md5c.c */,
3F3FFA2B1BF7C6A7004C89A1 /* mem.c */,
3F3FFA2C1BF7C6A7004C89A1 /* mevent.c */,
3F3FFA2D1BF7C6A7004C89A1 /* mevent_test.c */,
3F3FFA2E1BF7C6A7004C89A1 /* mptbl.c */,
3F3FFA2F1BF7C6A7004C89A1 /* pci_ahci.c */,
3F3FFA301BF7C6A7004C89A1 /* pci_emul.c */,
3F3FFA311BF7C6A7004C89A1 /* pci_hostbridge.c */,
3F3FFA321BF7C6A7004C89A1 /* pci_irq.c */,
3F3FFA331BF7C6A7004C89A1 /* pci_lpc.c */,
3F3FFA341BF7C6A7004C89A1 /* pci_uart.c */,
3F3FFA351BF7C6A7004C89A1 /* pci_virtio_block.c */,
3F3FFA361BF7C6A7004C89A1 /* pci_virtio_net_tap.c */,
3F3FFA371BF7C6A7004C89A1 /* pci_virtio_net_vmnet.c */,
3F3FFA381BF7C6A7004C89A1 /* pci_virtio_rnd.c */,
3F3FFA391BF7C6A7004C89A1 /* pm.c */,
3F3FFA3A1BF7C6A7004C89A1 /* post.c */,
3F3FFA3B1BF7C6A7004C89A1 /* rtc.c */,
3F3FFA3C1BF7C6A7004C89A1 /* smbiostbl.c */,
3F3FFA3D1BF7C6A7004C89A1 /* task_switch.c */,
3F3FFA3E1BF7C6A7004C89A1 /* uart_emul.c */,
3F3FFA3F1BF7C6A7004C89A1 /* virtio.c */,
3F3FFA5A1BF7C6A7004C89A1 /* xhyve.c */,
3F3FFA5B1BF7C6A7004C89A1 /* xmsr.c */,
);
path = src;
sourceTree = "<group>";
};
3F3FFA251BF7C6A7004C89A1 /* firmware */ = {
isa = PBXGroup;
children = (
3F3FFA261BF7C6A7004C89A1 /* fbsd.c */,
3F3FFA271BF7C6A7004C89A1 /* kexec.c */,
);
path = firmware;
sourceTree = "<group>";
};
3F3FFA401BF7C6A7004C89A1 /* vmm */ = {
isa = PBXGroup;
children = (
3F3FFA411BF7C6A7004C89A1 /* intel */,
3F3FFA451BF7C6A7004C89A1 /* io */,
3F3FFA4D1BF7C6A7004C89A1 /* vmm.c */,
3F3FFA4E1BF7C6A7004C89A1 /* vmm_api.c */,
3F3FFA4F1BF7C6A7004C89A1 /* vmm_callout.c */,
3F3FFA501BF7C6A7004C89A1 /* vmm_host.c */,
3F3FFA511BF7C6A7004C89A1 /* vmm_instruction_emul.c */,
3F3FFA521BF7C6A7004C89A1 /* vmm_ioport.c */,
3F3FFA531BF7C6A7004C89A1 /* vmm_lapic.c */,
3F3FFA541BF7C6A7004C89A1 /* vmm_mem.c */,
3F3FFA551BF7C6A7004C89A1 /* vmm_stat.c */,
3F3FFA561BF7C6A7004C89A1 /* vmm_util.c */,
3F3FFA571BF7C6A7004C89A1 /* x86.c */,
);
path = vmm;
sourceTree = "<group>";
};
3F3FFA411BF7C6A7004C89A1 /* intel */ = {
isa = PBXGroup;
children = (
3F3FFA421BF7C6A7004C89A1 /* vmcs.c */,
3F3FFA431BF7C6A7004C89A1 /* vmx.c */,
3F3FFA441BF7C6A7004C89A1 /* vmx_msr.c */,
);
path = intel;
sourceTree = "<group>";
};
3F3FFA451BF7C6A7004C89A1 /* io */ = {
isa = PBXGroup;
children = (
3F3FFA461BF7C6A7004C89A1 /* vatpic.c */,
3F3FFA471BF7C6A7004C89A1 /* vatpit.c */,
3F3FFA481BF7C6A7004C89A1 /* vhpet.c */,
3F3FFA491BF7C6A7004C89A1 /* vioapic.c */,
3F3FFA4A1BF7C6A7004C89A1 /* vlapic.c */,
3F3FFA4B1BF7C6A7004C89A1 /* vpmtmr.c */,
3F3FFA4C1BF7C6A7004C89A1 /* vrtc.c */,
);
path = io;
sourceTree = "<group>";
};
3F3FFA951BF7CBFF004C89A1 /* xcscripts */ = {
isa = PBXGroup;
children = (
3F3FFA961BF7CBFF004C89A1 /* version.sh */,
);
path = xcscripts;
sourceTree = SOURCE_ROOT;
};
3FB6515A1BF7CD4500ED886F /* include */ = {
isa = PBXGroup;
children = (
3FB6515B1BF7CD4500ED886F /* xhyve */,
);
path = include;
sourceTree = "<group>";
};
3FB6515B1BF7CD4500ED886F /* xhyve */ = {
isa = PBXGroup;
children = (
3FB6515C1BF7CD4500ED886F /* acpi.h */,
3FB6515D1BF7CD4500ED886F /* ahci.h */,
3FB6515E1BF7CD4500ED886F /* block_if.h */,
3FB6515F1BF7CD4500ED886F /* dbgport.h */,
3FB651601BF7CD4500ED886F /* firmware */,
3FB651631BF7CD4500ED886F /* inout.h */,
3FB651641BF7CD4500ED886F /* ioapic.h */,
3FB651651BF7CD4500ED886F /* mem.h */,
3FB651661BF7CD4500ED886F /* mevent.h */,
3FB651671BF7CD4500ED886F /* mptbl.h */,
3FB651681BF7CD4500ED886F /* pci_emul.h */,
3FB651691BF7CD4500ED886F /* pci_irq.h */,
3FB6516A1BF7CD4500ED886F /* pci_lpc.h */,
3FB6516B1BF7CD4500ED886F /* rtc.h */,
3FB6516C1BF7CD4500ED886F /* smbiostbl.h */,
3FB6516D1BF7CD4500ED886F /* support */,
3FB651831BF7CD4500ED886F /* uart_emul.h */,
3FB651841BF7CD4500ED886F /* virtio.h */,
3FB651851BF7CD4500ED886F /* vmm */,
3FB651A11BF7CD4500ED886F /* xhyve.h */,
3FB651A21BF7CD4500ED886F /* xmsr.h */,
);
path = xhyve;
sourceTree = "<group>";
};
3FB651601BF7CD4500ED886F /* firmware */ = {
isa = PBXGroup;
children = (
3FB651611BF7CD4500ED886F /* fbsd.h */,
3FB651621BF7CD4500ED886F /* kexec.h */,
);
path = firmware;
sourceTree = "<group>";
};
3FB6516D1BF7CD4500ED886F /* support */ = {
isa = PBXGroup;
children = (
3FB6516E1BF7CD4500ED886F /* acpi_hpet.h */,
3FB6516F1BF7CD4500ED886F /* apicreg.h */,
3FB651701BF7CD4500ED886F /* ata.h */,
3FB651711BF7CD4500ED886F /* atomic.h */,
3FB651721BF7CD4500ED886F /* bitset.h */,
3FB651731BF7CD4500ED886F /* cpuset.h */,
3FB651741BF7CD4500ED886F /* i8253reg.h */,
3FB651751BF7CD4500ED886F /* i8259.h */,
3FB651761BF7CD4500ED886F /* linker_set.h */,
3FB651771BF7CD4500ED886F /* md5.h */,
3FB651781BF7CD4500ED886F /* misc.h */,
3FB651791BF7CD4500ED886F /* mptable.h */,
3FB6517A1BF7CD4500ED886F /* ns16550.h */,
3FB6517B1BF7CD4500ED886F /* pcireg.h */,
3FB6517C1BF7CD4500ED886F /* psl.h */,
3FB6517D1BF7CD4500ED886F /* rtc.h */,
3FB6517E1BF7CD4500ED886F /* segments.h */,
3FB6517F1BF7CD4500ED886F /* specialreg.h */,
3FB651801BF7CD4500ED886F /* timerreg.h */,
3FB651811BF7CD4500ED886F /* tree.h */,
3FB651821BF7CD4500ED886F /* uuid.h */,
);
path = support;
sourceTree = "<group>";
};
3FB651851BF7CD4500ED886F /* vmm */ = {
isa = PBXGroup;
children = (
3FB651861BF7CD4500ED886F /* intel */,
3FB6518B1BF7CD4500ED886F /* io */,
3FB651941BF7CD4500ED886F /* vmm.h */,
3FB651951BF7CD4500ED886F /* vmm_api.h */,
3FB651961BF7CD4500ED886F /* vmm_callout.h */,
3FB651971BF7CD4500ED886F /* vmm_common.h */,
3FB651981BF7CD4500ED886F /* vmm_host.h */,
3FB651991BF7CD4500ED886F /* vmm_instruction_emul.h */,
3FB6519A1BF7CD4500ED886F /* vmm_ioport.h */,
3FB6519B1BF7CD4500ED886F /* vmm_ktr.h */,
3FB6519C1BF7CD4500ED886F /* vmm_lapic.h */,
3FB6519D1BF7CD4500ED886F /* vmm_mem.h */,
3FB6519E1BF7CD4500ED886F /* vmm_stat.h */,
3FB6519F1BF7CD4500ED886F /* vmm_util.h */,
3FB651A01BF7CD4500ED886F /* x86.h */,
);
path = vmm;
sourceTree = "<group>";
};
3FB651861BF7CD4500ED886F /* intel */ = {
isa = PBXGroup;
children = (
3FB651871BF7CD4500ED886F /* vmcs.h */,
3FB651881BF7CD4500ED886F /* vmx.h */,
3FB651891BF7CD4500ED886F /* vmx_controls.h */,
3FB6518A1BF7CD4500ED886F /* vmx_msr.h */,
);
path = intel;
sourceTree = "<group>";
};
3FB6518B1BF7CD4500ED886F /* io */ = {
isa = PBXGroup;
children = (
3FB6518C1BF7CD4500ED886F /* vatpic.h */,
3FB6518D1BF7CD4500ED886F /* vatpit.h */,
3FB6518E1BF7CD4500ED886F /* vhpet.h */,
3FB6518F1BF7CD4500ED886F /* vioapic.h */,
3FB651901BF7CD4500ED886F /* vlapic.h */,
3FB651911BF7CD4500ED886F /* vlapic_priv.h */,
3FB651921BF7CD4500ED886F /* vpmtmr.h */,
3FB651931BF7CD4500ED886F /* vrtc.h */,
);
path = io;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3F1934911BF7C0D40099CC46 /* xhyve */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3F1934991BF7C0D40099CC46 /* Build configuration list for PBXNativeTarget "xhyve" */;
buildPhases = (
3F3FFA981BF7CC1F004C89A1 /* xhyve-version.h */,
3F19348E1BF7C0D40099CC46 /* Sources */,
3F19348F1BF7C0D40099CC46 /* Frameworks */,
3F1934901BF7C0D40099CC46 /* Install Man Pages */,
);
buildRules = (
);
dependencies = (
);
name = xhyve;
productName = xhyve;
productReference = 3F1934921BF7C0D40099CC46 /* xhyve */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3F19348A1BF7C0D40099CC46 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0730;
ORGANIZATIONNAME = "Jeremy Sequoia";
TargetAttributes = {
3F1934911BF7C0D40099CC46 = {
CreatedOnToolsVersion = 7.3;
};
};
};
buildConfigurationList = 3F19348D1BF7C0D40099CC46 /* Build configuration list for PBXProject "xhyve" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 3F1934891BF7C0D40099CC46;
productRefGroup = 3F1934931BF7C0D40099CC46 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3F1934911BF7C0D40099CC46 /* xhyve */,
);
};
/* End PBXProject section */
/* Begin PBXShellScriptBuildPhase section */
3F3FFA981BF7CC1F004C89A1 /* xhyve-version.h */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "xhyve-version.h";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/bash;
shellScript = "${SRCROOT}/xcscripts/version.sh";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3F19348E1BF7C0D40099CC46 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3F3FFA751BF7C6A7004C89A1 /* pm.c in Sources */,
3F3FFA721BF7C6A7004C89A1 /* pci_virtio_net_tap.c in Sources */,
3F3FFA6F1BF7C6A7004C89A1 /* pci_lpc.c in Sources */,
3F3FFA7C1BF7C6A7004C89A1 /* vmcs.c in Sources */,
3F3FFA851BF7C6A7004C89A1 /* vrtc.c in Sources */,
3F3FFA921BF7C6A7004C89A1 /* xmsr.c in Sources */,
3F3FFA7A1BF7C6A7004C89A1 /* uart_emul.c in Sources */,
3F3FFA8A1BF7C6A7004C89A1 /* vmm_instruction_emul.c in Sources */,
3F3FFA841BF7C6A7004C89A1 /* vpmtmr.c in Sources */,
3F3FFA801BF7C6A7004C89A1 /* vatpit.c in Sources */,
3F3FFA901BF7C6A7004C89A1 /* x86.c in Sources */,
3F3FFA631BF7C6A7004C89A1 /* kexec.c in Sources */,
3F3FFA5F1BF7C6A7004C89A1 /* block_if.c in Sources */,
3F3FFA8E1BF7C6A7004C89A1 /* vmm_stat.c in Sources */,
3F3FFA7F1BF7C6A7004C89A1 /* vatpic.c in Sources */,
3F3FFA651BF7C6A7004C89A1 /* ioapic.c in Sources */,
3F3FFA781BF7C6A7004C89A1 /* smbiostbl.c in Sources */,
3F3FFA621BF7C6A7004C89A1 /* fbsd.c in Sources */,
3F3FFA5E1BF7C6A7004C89A1 /* atkbdc.c in Sources */,
3F3FFA661BF7C6A7004C89A1 /* md5c.c in Sources */,
3F3FFA6C1BF7C6A7004C89A1 /* pci_emul.c in Sources */,
3F3FFA701BF7C6A7004C89A1 /* pci_uart.c in Sources */,
3F3FFA7E1BF7C6A7004C89A1 /* vmx_msr.c in Sources */,
3F3FFA5D1BF7C6A7004C89A1 /* acpitbl.c in Sources */,
3F3FFA641BF7C6A7004C89A1 /* inout.c in Sources */,
3F3FFA771BF7C6A7004C89A1 /* rtc.c in Sources */,
3F3FFA8B1BF7C6A7004C89A1 /* vmm_ioport.c in Sources */,
3F3FFA671BF7C6A7004C89A1 /* mem.c in Sources */,
3F3FFA8F1BF7C6A7004C89A1 /* vmm_util.c in Sources */,
3F3FFA791BF7C6A7004C89A1 /* task_switch.c in Sources */,
3F3FFA6B1BF7C6A7004C89A1 /* pci_ahci.c in Sources */,
3F3FFA6E1BF7C6A7004C89A1 /* pci_irq.c in Sources */,
3F3FFA8D1BF7C6A7004C89A1 /* vmm_mem.c in Sources */,
3F3FFA7D1BF7C6A7004C89A1 /* vmx.c in Sources */,
3F3FFA7B1BF7C6A7004C89A1 /* virtio.c in Sources */,
3F3FFA611BF7C6A7004C89A1 /* dbgport.c in Sources */,
3F3FFA6A1BF7C6A7004C89A1 /* mptbl.c in Sources */,
3F3FFA6D1BF7C6A7004C89A1 /* pci_hostbridge.c in Sources */,
3F3FFA881BF7C6A7004C89A1 /* vmm_callout.c in Sources */,
3F3FFA811BF7C6A7004C89A1 /* vhpet.c in Sources */,
3F3FFA861BF7C6A7004C89A1 /* vmm.c in Sources */,
3F3FFA911BF7C6A7004C89A1 /* xhyve.c in Sources */,
3F3FFA831BF7C6A7004C89A1 /* vlapic.c in Sources */,
3F3FFA741BF7C6A7004C89A1 /* pci_virtio_rnd.c in Sources */,
3F3FFA761BF7C6A7004C89A1 /* post.c in Sources */,
3F3FFA601BF7C6A7004C89A1 /* consport.c in Sources */,
3F3FFA681BF7C6A7004C89A1 /* mevent.c in Sources */,
3F3FFA8C1BF7C6A7004C89A1 /* vmm_lapic.c in Sources */,
3F3FFA731BF7C6A7004C89A1 /* pci_virtio_net_vmnet.c in Sources */,
3F3FFA891BF7C6A7004C89A1 /* vmm_host.c in Sources */,
3F3FFA821BF7C6A7004C89A1 /* vioapic.c in Sources */,
3F3FFA711BF7C6A7004C89A1 /* pci_virtio_block.c in Sources */,
3F3FFA871BF7C6A7004C89A1 /* vmm_api.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3F1934971BF7C0D40099CC46 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3F3FF9E21BF7C5D5004C89A1 /* common_debug.xcconfig */;
buildSettings = {
};
name = Debug;
};
3F1934981BF7C0D40099CC46 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3F3FF9E01BF7C5D5004C89A1 /* common.xcconfig */;
buildSettings = {
};
name = Release;
};
3F19349A1BF7C0D40099CC46 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3F3FF9E31BF7C5D5004C89A1 /* xhyve.xcconfig */;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
3F19349B1BF7C0D40099CC46 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3F3FF9E31BF7C5D5004C89A1 /* xhyve.xcconfig */;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
3F3FFA931BF7C7B1004C89A1 /* ASan */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3F3FF9E11BF7C5D5004C89A1 /* common_asan.xcconfig */;
buildSettings = {
};
name = ASan;
};
3F3FFA941BF7C7B1004C89A1 /* ASan */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3F3FF9E31BF7C5D5004C89A1 /* xhyve.xcconfig */;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = ASan;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3F19348D1BF7C0D40099CC46 /* Build configuration list for PBXProject "xhyve" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3F1934971BF7C0D40099CC46 /* Debug */,
3F3FFA931BF7C7B1004C89A1 /* ASan */,
3F1934981BF7C0D40099CC46 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3F1934991BF7C0D40099CC46 /* Build configuration list for PBXNativeTarget "xhyve" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3F19349A1BF7C0D40099CC46 /* Debug */,
3F3FFA941BF7C7B1004C89A1 /* ASan */,
3F19349B1BF7C0D40099CC46 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 3F19348A1BF7C0D40099CC46 /* Project object */;
}