Compare commits
No commits in common. "multiboot" and "master" have entirely different histories.
24 changed files with 106 additions and 3245 deletions
10
.gitignore
vendored
10
.gitignore
vendored
|
@ -1,9 +1 @@
|
||||||
build
|
/build/
|
||||||
DerivedData
|
|
||||||
.DS_Store
|
|
||||||
*~
|
|
||||||
*.rej
|
|
||||||
*.orig
|
|
||||||
cscope.*
|
|
||||||
tags
|
|
||||||
TAGS
|
|
||||||
|
|
3
Makefile
3
Makefile
|
@ -65,8 +65,7 @@ XHYVE_SRC := \
|
||||||
|
|
||||||
FIRMWARE_SRC := \
|
FIRMWARE_SRC := \
|
||||||
src/firmware/kexec.c \
|
src/firmware/kexec.c \
|
||||||
src/firmware/fbsd.c \
|
src/firmware/fbsd.c
|
||||||
src/firmware/multiboot.c
|
|
||||||
|
|
||||||
SRC := \
|
SRC := \
|
||||||
$(VMM_SRC) \
|
$(VMM_SRC) \
|
||||||
|
|
20
README.md
20
README.md
|
@ -1,4 +1,4 @@
|
||||||
# [xhyve.xyz](http://www.xhyve.xyz)
|
# [xhyve.org](http://www.xhyve.org)
|
||||||
|
|
||||||

|

|
||||||
<!-- https://thenounproject.com/term/squirrel/57718/ -->
|
<!-- https://thenounproject.com/term/squirrel/57718/ -->
|
||||||
|
@ -18,13 +18,25 @@ Requirements
|
||||||
* OS X 10.10.3 Yosemite or later
|
* OS X 10.10.3 Yosemite or later
|
||||||
* a 2010 or later Mac (i.e. a CPU that supports EPT)
|
* 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
|
Building
|
||||||
--------
|
--------
|
||||||
$ git clone https://github.com/xhyve-xyz/xhyve.git
|
$ git clone https://github.com/mist64/xhyve
|
||||||
$ cd xhyve
|
$ cd xhyve
|
||||||
$ xcodebuild
|
$ make
|
||||||
|
|
||||||
The resulting binary will be in build/Release/xhyve
|
The resulting binary will be in build/xhyve
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
/*-
|
|
||||||
* 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_ */
|
|
|
@ -1,257 +0,0 @@
|
||||||
/*-
|
|
||||||
* 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_ */
|
|
File diff suppressed because it is too large
Load diff
|
@ -97,5 +97,6 @@ struct loader_callbacks {
|
||||||
const char * (*getenv)(void *arg, int num);
|
const char * (*getenv)(void *arg, int num);
|
||||||
};
|
};
|
||||||
|
|
||||||
int fbsd_init(char *opts[]);
|
void fbsd_init(char *userboot_path, char *bootvolume_path, char *kernelenv,
|
||||||
|
char *cons);
|
||||||
uint64_t fbsd_load(void);
|
uint64_t fbsd_load(void);
|
||||||
|
|
|
@ -85,5 +85,5 @@ struct zero_page {
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
#pragma clang diagnostic pop
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
int kexec_init(char *opts[]);
|
void kexec_init(char *kernel_path, char *initrd_path, char *cmdline);
|
||||||
uint64_t kexec(void);
|
uint64_t kexec(void);
|
||||||
|
|
|
@ -1,288 +0,0 @@
|
||||||
/*-
|
|
||||||
* 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;
|
|
||||||
};
|
|
|
@ -48,7 +48,7 @@
|
||||||
|
|
||||||
static int listen_fd, conn_fd;
|
static int listen_fd, conn_fd;
|
||||||
|
|
||||||
static struct sockaddr_in saddrin;
|
static struct sockaddr_in sin;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
dbg_handler(UNUSED int vcpu, int in, UNUSED int port, int bytes, uint32_t *eax,
|
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);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
saddrin.sin_len = sizeof(saddrin);
|
sin.sin_len = sizeof(sin);
|
||||||
saddrin.sin_family = AF_INET;
|
sin.sin_family = AF_INET;
|
||||||
saddrin.sin_addr.s_addr = htonl(INADDR_ANY);
|
sin.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||||
saddrin.sin_port = htons(sport);
|
sin.sin_port = htons(sport);
|
||||||
|
|
||||||
if (bind(listen_fd, (struct sockaddr *)&saddrin, sizeof(saddrin)) < 0) {
|
if (bind(listen_fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
|
||||||
perror("bind");
|
perror("bind");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -929,15 +929,14 @@ disk_open(char *path)
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void
|
||||||
fbsd_init(char *opts[])
|
fbsd_init(char *userboot_path, char *bootvolume_path, char *kernelenv,
|
||||||
|
char *cons)
|
||||||
{
|
{
|
||||||
config.userboot = opts[0];
|
config.userboot = userboot_path;
|
||||||
config.bootvolume = opts[1];
|
config.bootvolume = bootvolume_path;
|
||||||
config.kernelenv = opts[2];
|
config.kernelenv = kernelenv;
|
||||||
config.cons = opts[3];
|
config.cons = cons;
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t
|
uint64_t
|
||||||
|
|
|
@ -211,13 +211,11 @@ kexec_load_ramdisk(char *path) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void
|
||||||
kexec_init(char *opts[]) {
|
kexec_init(char *kernel_path, char *initrd_path, char *cmdline) {
|
||||||
config.kernel = opts[0];
|
config.kernel = kernel_path;
|
||||||
config.initrd = opts[1];
|
config.initrd = initrd_path;
|
||||||
config.cmdline = opts[2];
|
config.cmdline = cmdline;
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t
|
uint64_t
|
||||||
|
|
|
@ -1,303 +0,0 @@
|
||||||
/*-
|
|
||||||
* 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;
|
|
||||||
}
|
|
|
@ -90,7 +90,6 @@ struct fifo {
|
||||||
struct ttyfd {
|
struct ttyfd {
|
||||||
bool opened;
|
bool opened;
|
||||||
int fd; /* tty device file descriptor */
|
int fd; /* tty device file descriptor */
|
||||||
char *name; /* slave pty name when using autopty*/
|
|
||||||
struct termios tio_orig, tio_new; /* I/O Terminals */
|
struct termios tio_orig, tio_new; /* I/O Terminals */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -632,49 +631,27 @@ int
|
||||||
uart_set_backend(struct uart_softc *sc, const char *opts)
|
uart_set_backend(struct uart_softc *sc, const char *opts)
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
int ptyfd;
|
|
||||||
char *ptyname;
|
|
||||||
|
|
||||||
retval = -1;
|
retval = -1;
|
||||||
|
|
||||||
if (opts == NULL)
|
if (opts == NULL)
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
if (strcmp("stdio", opts) == 0 && !uart_stdio) {
|
if (strcmp("stdio", opts) == 0) {
|
||||||
sc->tty.fd = STDIN_FILENO;
|
if (!uart_stdio) {
|
||||||
sc->tty.opened = true;
|
sc->tty.fd = STDIN_FILENO;
|
||||||
uart_stdio = true;
|
sc->tty.opened = true;
|
||||||
retval = fcntl(sc->tty.fd, F_SETFL, O_NONBLOCK);
|
uart_stdio = true;
|
||||||
} else if (strcmp("autopty", opts) == 0) {
|
retval = 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) {
|
} else if (uart_tty_backend(sc, opts) == 0) {
|
||||||
retval = 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)
|
if (retval == 0)
|
||||||
uart_opentty(sc);
|
uart_opentty(sc);
|
||||||
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?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>
|
|
158
src/xhyve.c
158
src/xhyve.c
|
@ -31,7 +31,6 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
#include <fcntl.h>
|
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -68,7 +67,6 @@
|
||||||
|
|
||||||
#include <xhyve/firmware/kexec.h>
|
#include <xhyve/firmware/kexec.h>
|
||||||
#include <xhyve/firmware/fbsd.h>
|
#include <xhyve/firmware/fbsd.h>
|
||||||
#include <xhyve/firmware/multiboot.h>
|
|
||||||
|
|
||||||
#define GUEST_NIO_PORT 0x488 /* guest upcalls via i/o port */
|
#define GUEST_NIO_PORT 0x488 /* guest upcalls via i/o port */
|
||||||
|
|
||||||
|
@ -82,7 +80,6 @@ char *vmname = "vm";
|
||||||
int guest_ncpus;
|
int guest_ncpus;
|
||||||
int print_mac;
|
int print_mac;
|
||||||
char *guest_uuid_str;
|
char *guest_uuid_str;
|
||||||
static char *pidfile;
|
|
||||||
|
|
||||||
static int guest_vmexit_on_hlt, guest_vmexit_on_pause;
|
static int guest_vmexit_on_hlt, guest_vmexit_on_pause;
|
||||||
static int virtio_msix = 1;
|
static int virtio_msix = 1;
|
||||||
|
@ -113,16 +110,6 @@ static struct bhyvestats {
|
||||||
uint64_t cpu_switch_direct;
|
uint64_t cpu_switch_direct;
|
||||||
} stats;
|
} 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 push
|
||||||
#pragma clang diagnostic ignored "-Wpadded"
|
#pragma clang diagnostic ignored "-Wpadded"
|
||||||
static struct mt_vmm_info {
|
static struct mt_vmm_info {
|
||||||
|
@ -131,19 +118,20 @@ static struct mt_vmm_info {
|
||||||
} mt_vmm_info[VM_MAXCPU];
|
} mt_vmm_info[VM_MAXCPU];
|
||||||
#pragma clang diagnostic pop
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
|
static uint64_t (*fw_func)(void);
|
||||||
|
|
||||||
__attribute__ ((noreturn)) static void
|
__attribute__ ((noreturn)) static void
|
||||||
usage(int code)
|
usage(int code)
|
||||||
{
|
{
|
||||||
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Usage: %s [-behuwxMACHPWY] [-c vcpus] [-F <pidfile>] [-g <gdb port>] [-l <lpc>]\n"
|
"Usage: %s [-behuwxMACHPWY] [-c vcpus] [-g <gdb port>] [-l <lpc>]\n"
|
||||||
" %*s [-m mem] [-p vcpu:hostcpu] [-s <pci>] [-U uuid] -f <fw>\n"
|
" %*s [-m mem] [-p vcpu:hostcpu] [-s <pci>] [-U uuid] -f <fw>\n"
|
||||||
" -A: create ACPI tables\n"
|
" -A: create ACPI tables\n"
|
||||||
" -c: # cpus (default 1)\n"
|
" -c: # cpus (default 1)\n"
|
||||||
" -C: include guest memory in core file\n"
|
" -C: include guest memory in core file\n"
|
||||||
" -e: exit on unhandled I/O access\n"
|
" -e: exit on unhandled I/O access\n"
|
||||||
" -f: firmware\n"
|
" -f: firmware\n"
|
||||||
" -F: pidfile\n"
|
|
||||||
" -g: gdb port\n"
|
" -g: gdb port\n"
|
||||||
" -h: help\n"
|
" -h: help\n"
|
||||||
" -H: vmexit from the guest on hlt\n"
|
" -H: vmexit from the guest on hlt\n"
|
||||||
|
@ -171,7 +159,7 @@ show_version()
|
||||||
fprintf(stderr, "%s: %s\n\n%s\n",progname, 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"
|
"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"
|
"works entirely in userspace and has no other dependencies.\n\n"
|
||||||
"Homepage: http://www.xhyve.xyz\n"
|
"Homepage: https://github.com/mist64/xhyve\n"
|
||||||
"License: BSD\n");
|
"License: BSD\n");
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
@ -266,7 +254,7 @@ vcpu_thread(void *param)
|
||||||
assert(error == 0);
|
assert(error == 0);
|
||||||
|
|
||||||
if (vcpu == BSP) {
|
if (vcpu == BSP) {
|
||||||
rip_entry = fw_loader->load();
|
rip_entry = fw_func();
|
||||||
} else {
|
} else {
|
||||||
rip_entry = vmexit[vcpu].rip;
|
rip_entry = vmexit[vcpu].rip;
|
||||||
spinup_ap_realmode(vcpu, &rip_entry);
|
spinup_ap_realmode(vcpu, &rip_entry);
|
||||||
|
@ -732,108 +720,65 @@ parse_memsize(const char *opt, size_t *ret_memsize)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
firmware_parse(const char *opt) {
|
firmware_parse(const char *opt) {
|
||||||
int ret, i;
|
char *fw, *opt1, *opt2, *opt3, *cp;
|
||||||
char *cp, *opts[16] = { NULL };
|
|
||||||
|
|
||||||
cp = strdup(opt);
|
fw = strdup(opt);
|
||||||
|
|
||||||
/* Find method */
|
if (strncmp(fw, "kexec", strlen("kexec")) == 0) {
|
||||||
for (i = 0; i < (int) nitems(fw_loaders); i++) {
|
fw_func = kexec;
|
||||||
if (strncmp(cp, fw_loaders[i].name, strlen(fw_loaders[i].name)) == 0) {
|
} else if (strncmp(fw, "fbsd", strlen("fbsd")) == 0) {
|
||||||
fw_loader = &fw_loaders[i];
|
fw_func = fbsd_load;
|
||||||
break;
|
} else {
|
||||||
}
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fw_loader == NULL)
|
if ((cp = strchr(fw, ',')) != NULL) {
|
||||||
goto fail;
|
|
||||||
|
|
||||||
/* Split arguments */
|
|
||||||
for (i = 0; i < (int) nitems(opts) - 1; i++) {
|
|
||||||
cp = strchr(cp, ',');
|
|
||||||
if (cp != NULL) {
|
|
||||||
*cp = '\0';
|
*cp = '\0';
|
||||||
opts[i] = ++cp;
|
opt1 = cp + 1;
|
||||||
|
} else {
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize loader */
|
if ((cp = strchr(opt1, ',')) != NULL) {
|
||||||
ret = fw_loader->init(opts);
|
*cp = '\0';
|
||||||
if (ret)
|
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 {
|
||||||
goto fail;
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
fprintf(stderr, "Invalid firmware argument\n"
|
fprintf(stderr, "Invalid firmware argument\n"
|
||||||
" -f kexec,'kernel','initrd','\"cmdline\"'\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;
|
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
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int c, error, gdb_port, bvmcons;
|
int c, error, gdb_port, bvmcons, fw;
|
||||||
int dump_guest_memory, max_vcpus, mptgen;
|
int dump_guest_memory, max_vcpus, mptgen;
|
||||||
int rtc_localtime;
|
int rtc_localtime;
|
||||||
uint64_t rip;
|
uint64_t rip;
|
||||||
|
@ -848,8 +793,9 @@ main(int argc, char *argv[])
|
||||||
memsize = 256 * MB;
|
memsize = 256 * MB;
|
||||||
mptgen = 1;
|
mptgen = 1;
|
||||||
rtc_localtime = 1;
|
rtc_localtime = 1;
|
||||||
|
fw = 0;
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "behvuwxMACHPWY:f:F:g:c:s:m:l:U:")) != -1) {
|
while ((c = getopt(argc, argv, "behvuwxMACHPWY:f:g:c:s:m:l:U:")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'A':
|
case 'A':
|
||||||
acpi = 1;
|
acpi = 1;
|
||||||
|
@ -866,10 +812,10 @@ main(int argc, char *argv[])
|
||||||
case 'f':
|
case 'f':
|
||||||
if (firmware_parse(optarg) != 0) {
|
if (firmware_parse(optarg) != 0) {
|
||||||
exit (1);
|
exit (1);
|
||||||
|
} else {
|
||||||
|
fw = 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case 'F':
|
|
||||||
pidfile = optarg;
|
|
||||||
break;
|
|
||||||
case 'g':
|
case 'g':
|
||||||
gdb_port = atoi(optarg);
|
gdb_port = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
@ -928,7 +874,7 @@ main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fw_loader == NULL)
|
if (fw != 1)
|
||||||
usage(1);
|
usage(1);
|
||||||
|
|
||||||
error = xh_vm_create();
|
error = xh_vm_create();
|
||||||
|
@ -961,12 +907,6 @@ main(int argc, char *argv[])
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
error = setup_pidfile();
|
|
||||||
if (error) {
|
|
||||||
fprintf(stderr, "pidfile error %d\n", error);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
init_mem();
|
init_mem();
|
||||||
init_inout();
|
init_inout();
|
||||||
pci_irq_init();
|
pci_irq_init();
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
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
|
|
|
@ -1,10 +0,0 @@
|
||||||
#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)
|
|
|
@ -1,17 +0,0 @@
|
||||||
#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)
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
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
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/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
2
xhyve.xcodeproj/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
project.xcworkspace
|
|
||||||
xcuserdata
|
|
|
@ -1,716 +0,0 @@
|
||||||
// !$*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 */;
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue