Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions src/hyperlight_guest/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@ log = { version = "0.4", default-features = false }
[build-dependencies]
cc = "1.2"
cfg-if = "1.0"
glob = "0.3.1"
85 changes: 18 additions & 67 deletions src/hyperlight_guest/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,59 +52,12 @@ fn cargo_main() {
}

if cfg!(feature = "libc") {
cfg.file("third_party/libc/musl/src/ctype/isalpha.c")
.file("third_party/libc/musl/src/ctype/isalnum.c")
.file("third_party/libc/musl/src/ctype/isdigit.c")
.file("third_party/libc/musl/src/ctype/isgraph.c")
.file("third_party/libc/musl/src/ctype/islower.c")
.file("third_party/libc/musl/src/ctype/isprint.c")
.file("third_party/libc/musl/src/ctype/isspace.c")
.file("third_party/libc/musl/src/ctype/isupper.c")
.file("third_party/libc/musl/src/ctype/isxdigit.c")
.file("third_party/libc/musl/src/ctype/tolower.c")
.file("third_party/libc/musl/src/ctype/toupper.c")
.file("third_party/libc/musl/src/errno/__errno_location.c")
.file("third_party/libc/musl/src/internal/floatscan.c")
.file("third_party/libc/musl/src/internal/intscan.c")
.file("third_party/libc/musl/src/internal/shgetc.c")
.file("third_party/libc/musl/src/math/copysign.c")
.file("third_party/libc/musl/src/math/copysignl.c")
.file("third_party/libc/musl/src/math/fabs.c")
.file("third_party/libc/musl/src/math/fabsl.c")
.file("third_party/libc/musl/src/math/fmod.c")
.file("third_party/libc/musl/src/math/fmodl.c")
.file("third_party/libc/musl/src/math/scalbnl.c")
.file("third_party/libc/musl/src/math/__signbit.c")
.file("third_party/libc/musl/src/math/__signbitl.c")
.file("third_party/libc/musl/src/math/__fpclassify.c")
.file("third_party/libc/musl/src/math/__fpclassifyl.c")
.file("third_party/libc/musl/src/stdio/__toread.c")
.file("third_party/libc/musl/src/stdio/__uflow.c")
.file("third_party/libc/musl/src/stdlib/atoi.c")
.file("third_party/libc/musl/src/stdlib/strtod.c")
.file("third_party/libc/musl/src/stdlib/strtol.c")
.file("third_party/libc/musl/src/stdlib/qsort.c")
.file("third_party/libc/musl/src/stdlib/qsort_nr.c")
.file("third_party/libc/musl/src/stdlib/bsearch.c")
.file("third_party/libc/musl/src/string/memchr.c")
.file("third_party/libc/musl/src/string/memcmp.c")
.file("third_party/libc/musl/src/string/memcpy.c")
.file("third_party/libc/musl/src/string/memmove.c")
.file("third_party/libc/musl/src/string/memset.c")
.file("third_party/libc/musl/src/string/stpncpy.c")
.file("third_party/libc/musl/src/string/strchr.c")
.file("third_party/libc/musl/src/string/strchrnul.c")
.file("third_party/libc/musl/src/string/strcmp.c")
.file("third_party/libc/musl/src/string/strcspn.c")
.file("third_party/libc/musl/src/string/strlen.c")
.file("third_party/libc/musl/src/string/strncasecmp.c")
.file("third_party/libc/musl/src/string/strncat.c")
.file("third_party/libc/musl/src/string/strncmp.c")
.file("third_party/libc/musl/src/string/strncpy.c")
.file("third_party/libc/musl/src/string/strspn.c")
.file("third_party/libc/musl/src/string/strstr.c")
.file("third_party/libc/musl/src/prng/rand.c")
.include("third_party/libc/musl/src/include")
let entries = glob::glob("third_party/libc/musl/**/*.[cs]") // .c and .s files
.expect("glob pattern should be valid")
.filter_map(Result::ok);
cfg.files(entries);

cfg.include("third_party/libc/musl/src/include")
.include("third_party/libc/musl/include")
.include("third_party/libc/musl/src/internal")
.include("third_party/libc/musl/arch/generic")
Expand All @@ -124,24 +77,22 @@ fn cargo_main() {
feature = "libc",
feature = "alloca"
)) {
if is_pe {
cfg.define("hidden", "");
cfg.define("weak_alias(old, new) ", " ");
cfg.define("__DEFINED_va_list", None);
cfg.define("__DEFINED___isoc_va_list", None);
}
cfg.define("__x86_64__", None);
cfg.define("__LITTLE_ENDIAN__", None);
cfg.define("HYPERLIGHT", None); // used in certain musl files for conditional compilation

// silence compiler warnings
cfg.flag("-Wno-sign-compare");
cfg.flag("-Wno-bitwise-op-parentheses");
cfg.flag("-Wno-unknown-pragmas");
cfg.flag("-Wno-shift-op-parentheses");
cfg.flag("-Wno-logical-op-parentheses");
cfg.flag("-Wno-unused-but-set-variable");
cfg.flag("-Wno-unused-command-line-argument") // including .s files makes clang believe arguments are unused
.flag("-Wno-sign-compare")
.flag("-Wno-bitwise-op-parentheses")
.flag("-Wno-unknown-pragmas")
.flag("-Wno-shift-op-parentheses")
.flag("-Wno-logical-op-parentheses")
.flag("-Wno-unused-but-set-variable")
.flag("-Wno-unused-parameter")
.flag("-Wno-string-plus-int");

if is_pe {
cfg.flag("-Wno-unused-label");
cfg.flag("-Wno-unused-variable");
cfg.compiler("clang-cl");
} else {
cfg.flag("-fPIC");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,4 +131,4 @@
#define EOWNERDEAD 130
#define ENOTRECOVERABLE 131
#define ERFKILL 132
#define EHWPOISON 133
#define EHWPOISON 133
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

#define a_cas a_cas
static inline int a_cas(volatile int *p, int t, int s)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@

#ifndef __cplusplus
#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t)
#ifdef _MSC_VER
typedef unsigned short wchar_t;
#else
typedef int wchar_t;
#endif
#define __DEFINED_wchar_t
#endif

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#define FE_INVALID 1
#define __FE_DENORM 2
#define FE_DIVBYZERO 4
#define FE_OVERFLOW 8
#define FE_UNDERFLOW 16
#define FE_INEXACT 32

#define FE_ALL_EXCEPT 63

#define FE_TONEAREST 0
#define FE_DOWNWARD 0x400
#define FE_UPWARD 0x800
#define FE_TOWARDZERO 0xc00

typedef unsigned short fexcept_t;

typedef struct {
unsigned short __control_word;
unsigned short __unused1;
unsigned short __status_word;
unsigned short __unused2;
unsigned short __tags;
unsigned short __unused3;
unsigned int __eip;
unsigned short __cs_selector;
unsigned int __opcode:11;
unsigned int __unused4:5;
unsigned int __data_offset;
unsigned short __data_selector;
unsigned short __unused5;
unsigned int __mxcsr;
} fenv_t;

#define FE_DFL_ENV ((const fenv_t *) -1)
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,35 @@
#else
#define FLT_EVAL_METHOD 0
#endif

#ifdef _MSC_VER
#define LDBL_EPSILON 2.2204460492503131e-016
#define LDBL_TRUE_MIN 4.9406564584124654e-324
#define LDBL_MIN 2.2250738585072014e-308
#define LDBL_MAX 1.7976931348623158e+308
#define LDBL_EPSILON 2.2204460492503131e-016

#define LDBL_MANT_DIG 53
#define LDBL_MIN_EXP (-1021)
#define LDBL_MAX_EXP 1024
#define LDBL_DIG 15

#define LDBL_DIG 15
#define LDBL_MIN_10_EXP (-307)
#define LDBL_MAX_10_EXP 308
#define LDBL_MAX_10_EXP308

#define DECIMAL_DIG 17
#else
#define LDBL_EPSILON 1.0842021724855044340e-19L
#define LDBL_TRUE_MIN 3.6451995318824746025e-4951L
#define LDBL_MIN 3.3621031431120935063e-4932L
#define LDBL_MAX 1.1897314953572317650e+4932L
#define LDBL_EPSILON 1.0842021724855044340e-19L

#define LDBL_MANT_DIG 64
#define LDBL_MIN_EXP (-16381)
#define LDBL_MAX_EXP 16384

#define LDBL_DIG 18
#define LDBL_MIN_10_EXP (-4931)
#define LDBL_MAX_10_EXP 4932
#endif
#define LDBL_TRUE_MIN 3.6451995318824746025e-4951L

#define DECIMAL_DIG 21
#endif
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
static __inline void outb(unsigned char __val, unsigned short __port)
{
__asm__ volatile ("outb %0,%1" : : "a" (__val), "dN" (__port));
}

static __inline void outw(unsigned short __val, unsigned short __port)
{
__asm__ volatile ("outw %0,%1" : : "a" (__val), "dN" (__port));
}

static __inline void outl(unsigned int __val, unsigned short __port)
{
__asm__ volatile ("outl %0,%1" : : "a" (__val), "dN" (__port));
}

static __inline unsigned char inb(unsigned short __port)
{
unsigned char __val;
__asm__ volatile ("inb %1,%0" : "=a" (__val) : "dN" (__port));
return __val;
}

static __inline unsigned short inw(unsigned short __port)
{
unsigned short __val;
__asm__ volatile ("inw %1,%0" : "=a" (__val) : "dN" (__port));
return __val;
}

static __inline unsigned int inl(unsigned short __port)
{
unsigned int __val;
__asm__ volatile ("inl %1,%0" : "=a" (__val) : "dN" (__port));
return __val;
}

static __inline void outsb(unsigned short __port, const void *__buf, unsigned long __n)
{
__asm__ volatile ("cld; rep; outsb"
: "+S" (__buf), "+c" (__n)
: "d" (__port));
}

static __inline void outsw(unsigned short __port, const void *__buf, unsigned long __n)
{
__asm__ volatile ("cld; rep; outsw"
: "+S" (__buf), "+c" (__n)
: "d" (__port));
}

static __inline void outsl(unsigned short __port, const void *__buf, unsigned long __n)
{
__asm__ volatile ("cld; rep; outsl"
: "+S" (__buf), "+c"(__n)
: "d" (__port));
}

static __inline void insb(unsigned short __port, void *__buf, unsigned long __n)
{
__asm__ volatile ("cld; rep; insb"
: "+D" (__buf), "+c" (__n)
: "d" (__port));
}

static __inline void insw(unsigned short __port, void *__buf, unsigned long __n)
{
__asm__ volatile ("cld; rep; insw"
: "+D" (__buf), "+c" (__n)
: "d" (__port));
}

static __inline void insl(unsigned short __port, void *__buf, unsigned long __n)
{
__asm__ volatile ("cld; rep; insl"
: "+D" (__buf), "+c" (__n)
: "d" (__port));
}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
#define PAGESIZE 4096
#define PAGESIZE 4096
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#define MAP_32BIT 0x40
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#define _POSIX_V6_LP64_OFF64 1
#define _POSIX_V7_LP64_OFF64 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#define PTRACE_GET_THREAD_AREA 25
#define PTRACE_SET_THREAD_AREA 26
#define PTRACE_ARCH_PRCTL 30
#define PTRACE_SYSEMU 31
#define PTRACE_SYSEMU_SINGLESTEP 32
#define PTRACE_SINGLEBLOCK 33

#define PT_GET_THREAD_AREA PTRACE_GET_THREAD_AREA
#define PT_SET_THREAD_AREA PTRACE_SET_THREAD_AREA
#define PT_ARCH_PRCTL PTRACE_ARCH_PRCTL
#define PT_SYSEMU PTRACE_SYSEMU
#define PT_SYSEMU_SINGLESTEP PTRACE_SYSEMU_SINGLESTEP
#define PT_STEPBLOCK PTRACE_SINGLEBLOCK
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#undef __WORDSIZE
#define __WORDSIZE 64
#define R15 0
#define R14 1
#define R13 2
#define R12 3
#define RBP 4
#define RBX 5
#define R11 6
#define R10 7
#define R9 8
#define R8 9
#define RAX 10
#define RCX 11
#define RDX 12
#define RSI 13
#define RDI 14
#define ORIG_RAX 15
#define RIP 16
#define CS 17
#define EFLAGS 18
#define RSP 19
#define SS 20
#define FS_BASE 21
#define GS_BASE 22
#define DS 23
#define ES 24
#define FS 25
#define GS 26
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ typedef uint32_t uint_fast32_t;
#define UINTPTR_MAX UINT64_MAX
#define PTRDIFF_MIN INT64_MIN
#define PTRDIFF_MAX INT64_MAX
#define SIZE_MAX UINT64_MAX
#define SIZE_MAX UINT64_MAX
20 changes: 20 additions & 0 deletions src/hyperlight_guest/third_party/libc/musl/arch/x86_64/reloc.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#define LDSO_ARCH "x86_64"

#define REL_SYMBOLIC R_X86_64_64
#define REL_OFFSET32 R_X86_64_PC32
#define REL_GOT R_X86_64_GLOB_DAT
#define REL_PLT R_X86_64_JUMP_SLOT
#define REL_RELATIVE R_X86_64_RELATIVE
#define REL_COPY R_X86_64_COPY
#define REL_DTPMOD R_X86_64_DTPMOD64
#define REL_DTPOFF R_X86_64_DTPOFF64
#define REL_TPOFF R_X86_64_TPOFF64
#define REL_TLSDESC R_X86_64_TLSDESC

#define CRTJMP(pc,sp) __asm__ __volatile__( \
"mov %1,%%rsp ; jmp *%0" : : "r"(pc), "r"(sp) : "memory" )

#define GETFUNCSYM(fp, sym, got) __asm__ ( \
".hidden " #sym "\n" \
" lea " #sym "(%%rip),%0\n" \
: "=r"(*fp) : : "memory" )
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ void *alloca(size_t);
}
#endif

#endif
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ _Noreturn void __assert_fail (const char *, const char *, int, const char *);

#ifdef __cplusplus
}
#endif
#endif
Loading
Loading