summaryrefslogtreecommitdiffstats
path: root/libc-top-half/musl/arch/x32
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libc-top-half/musl/arch/x32/atomic_arch.h121
-rw-r--r--libc-top-half/musl/arch/x32/bits/alltypes.h.in24
-rw-r--r--libc-top-half/musl/arch/x32/bits/fcntl.h40
-rw-r--r--libc-top-half/musl/arch/x32/bits/fenv.h34
-rw-r--r--libc-top-half/musl/arch/x32/bits/float.h20
-rw-r--r--libc-top-half/musl/arch/x32/bits/io.h77
-rw-r--r--libc-top-half/musl/arch/x32/bits/ioctl_fix.h4
-rw-r--r--libc-top-half/musl/arch/x32/bits/ipc.h11
-rw-r--r--libc-top-half/musl/arch/x32/bits/limits.h1
-rw-r--r--libc-top-half/musl/arch/x32/bits/mman.h1
-rw-r--r--libc-top-half/musl/arch/x32/bits/msg.h15
-rw-r--r--libc-top-half/musl/arch/x32/bits/posix.h2
-rw-r--r--libc-top-half/musl/arch/x32/bits/ptrace.h13
-rw-r--r--libc-top-half/musl/arch/x32/bits/reg.h29
-rw-r--r--libc-top-half/musl/arch/x32/bits/sem.h11
-rw-r--r--libc-top-half/musl/arch/x32/bits/setjmp.h1
-rw-r--r--libc-top-half/musl/arch/x32/bits/shm.h32
-rw-r--r--libc-top-half/musl/arch/x32/bits/signal.h153
-rw-r--r--libc-top-half/musl/arch/x32/bits/socket.h5
-rw-r--r--libc-top-half/musl/arch/x32/bits/stat.h22
-rw-r--r--libc-top-half/musl/arch/x32/bits/statfs.h9
-rw-r--r--libc-top-half/musl/arch/x32/bits/stdint.h20
-rw-r--r--libc-top-half/musl/arch/x32/bits/syscall.h.in349
-rw-r--r--libc-top-half/musl/arch/x32/bits/user.h41
-rw-r--r--libc-top-half/musl/arch/x32/crt_arch.h12
-rw-r--r--libc-top-half/musl/arch/x32/ksigaction.h11
-rw-r--r--libc-top-half/musl/arch/x32/kstat.h22
-rw-r--r--libc-top-half/musl/arch/x32/pthread_arch.h12
-rw-r--r--libc-top-half/musl/arch/x32/reloc.h31
-rw-r--r--libc-top-half/musl/arch/x32/syscall_arch.h93
30 files changed, 1216 insertions, 0 deletions
diff --git a/libc-top-half/musl/arch/x32/atomic_arch.h b/libc-top-half/musl/arch/x32/atomic_arch.h
new file mode 100644
index 0000000..918c2d4
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/atomic_arch.h
@@ -0,0 +1,121 @@
+#define a_cas a_cas
+static inline int a_cas(volatile int *p, int t, int s)
+{
+ __asm__ __volatile__ (
+ "lock ; cmpxchg %3, %1"
+ : "=a"(t), "=m"(*p) : "a"(t), "r"(s) : "memory" );
+ return t;
+}
+
+#define a_swap a_swap
+static inline int a_swap(volatile int *p, int v)
+{
+ __asm__ __volatile__(
+ "xchg %0, %1"
+ : "=r"(v), "=m"(*p) : "0"(v) : "memory" );
+ return v;
+}
+
+#define a_fetch_add a_fetch_add
+static inline int a_fetch_add(volatile int *p, int v)
+{
+ __asm__ __volatile__(
+ "lock ; xadd %0, %1"
+ : "=r"(v), "=m"(*p) : "0"(v) : "memory" );
+ return v;
+}
+
+#define a_and a_and
+static inline void a_and(volatile int *p, int v)
+{
+ __asm__ __volatile__(
+ "lock ; and %1, %0"
+ : "=m"(*p) : "r"(v) : "memory" );
+}
+
+#define a_or a_or
+static inline void a_or(volatile int *p, int v)
+{
+ __asm__ __volatile__(
+ "lock ; or %1, %0"
+ : "=m"(*p) : "r"(v) : "memory" );
+}
+
+#define a_and_64 a_and_64
+static inline void a_and_64(volatile uint64_t *p, uint64_t v)
+{
+ __asm__ __volatile(
+ "lock ; and %1, %0"
+ : "=m"(*p) : "r"(v) : "memory" );
+}
+
+#define a_or_64 a_or_64
+static inline void a_or_64(volatile uint64_t *p, uint64_t v)
+{
+ __asm__ __volatile__(
+ "lock ; or %1, %0"
+ : "=m"(*p) : "r"(v) : "memory" );
+}
+
+#define a_inc a_inc
+static inline void a_inc(volatile int *p)
+{
+ __asm__ __volatile__(
+ "lock ; incl %0"
+ : "=m"(*p) : "m"(*p) : "memory" );
+}
+
+#define a_dec a_dec
+static inline void a_dec(volatile int *p)
+{
+ __asm__ __volatile__(
+ "lock ; decl %0"
+ : "=m"(*p) : "m"(*p) : "memory" );
+}
+
+#define a_store a_store
+static inline void a_store(volatile int *p, int x)
+{
+ __asm__ __volatile__(
+ "mov %1, %0 ; lock ; orl $0,(%%rsp)"
+ : "=m"(*p) : "r"(x) : "memory" );
+}
+
+#define a_barrier a_barrier
+static inline void a_barrier()
+{
+ __asm__ __volatile__( "" : : : "memory" );
+}
+
+#define a_spin a_spin
+static inline void a_spin()
+{
+ __asm__ __volatile__( "pause" : : : "memory" );
+}
+
+#define a_crash a_crash
+static inline void a_crash()
+{
+ __asm__ __volatile__( "hlt" : : : "memory" );
+}
+
+#define a_ctz_64 a_ctz_64
+static inline int a_ctz_64(uint64_t x)
+{
+ __asm__( "bsf %1,%0" : "=r"(x) : "r"(x) );
+ return x;
+}
+
+#define a_ctz_32 a_ctz_32
+static inline int a_ctz_32(uint32_t x)
+{
+ __asm__( "bsf %1,%0" : "=r"(x) : "r"(x) );
+ return x;
+}
+
+#define a_clz_64 a_clz_64
+static inline int a_clz_64(uint64_t x)
+{
+ __asm__( "bsr %1,%0 ; xor $63,%0" : "=r"(x) : "r"(x) );
+ return x;
+}
diff --git a/libc-top-half/musl/arch/x32/bits/alltypes.h.in b/libc-top-half/musl/arch/x32/bits/alltypes.h.in
new file mode 100644
index 0000000..9f9d241
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/alltypes.h.in
@@ -0,0 +1,24 @@
+#define _Addr int
+#define _Int64 long long
+#define _Reg long long
+
+#define __BYTE_ORDER 1234
+#define __LONG_MAX 0x7fffffffL
+
+#ifndef __cplusplus
+#ifdef __WCHAR_TYPE__
+TYPEDEF __WCHAR_TYPE__ wchar_t;
+#else
+TYPEDEF long wchar_t;
+#endif
+#endif
+
+#if defined(__FLT_EVAL_METHOD__) && __FLT_EVAL_METHOD__ == 2
+TYPEDEF long double float_t;
+TYPEDEF long double double_t;
+#else
+TYPEDEF float float_t;
+TYPEDEF double double_t;
+#endif
+
+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
diff --git a/libc-top-half/musl/arch/x32/bits/fcntl.h b/libc-top-half/musl/arch/x32/bits/fcntl.h
new file mode 100644
index 0000000..08627f8
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/fcntl.h
@@ -0,0 +1,40 @@
+#define O_CREAT 0100
+#define O_EXCL 0200
+#define O_NOCTTY 0400
+#define O_TRUNC 01000
+#define O_APPEND 02000
+#define O_NONBLOCK 04000
+#define O_DSYNC 010000
+#define O_SYNC 04010000
+#define O_RSYNC 04010000
+#define O_DIRECTORY 0200000
+#define O_NOFOLLOW 0400000
+#define O_CLOEXEC 02000000
+
+#define O_ASYNC 020000
+#define O_DIRECT 040000
+#define O_LARGEFILE 0100000
+#define O_NOATIME 01000000
+#define O_PATH 010000000
+#define O_TMPFILE 020200000
+#define O_NDELAY O_NONBLOCK
+
+#define F_DUPFD 0
+#define F_GETFD 1
+#define F_SETFD 2
+#define F_GETFL 3
+#define F_SETFL 4
+
+#define F_SETOWN 8
+#define F_GETOWN 9
+#define F_SETSIG 10
+#define F_GETSIG 11
+
+#define F_GETLK 5
+#define F_SETLK 6
+#define F_SETLKW 7
+
+#define F_SETOWN_EX 15
+#define F_GETOWN_EX 16
+
+#define F_GETOWNER_UIDS 17
diff --git a/libc-top-half/musl/arch/x32/bits/fenv.h b/libc-top-half/musl/arch/x32/bits/fenv.h
new file mode 100644
index 0000000..24df041
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/fenv.h
@@ -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)
diff --git a/libc-top-half/musl/arch/x32/bits/float.h b/libc-top-half/musl/arch/x32/bits/float.h
new file mode 100644
index 0000000..4d8e786
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/float.h
@@ -0,0 +1,20 @@
+#ifdef __FLT_EVAL_METHOD__
+#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
+#else
+#define FLT_EVAL_METHOD 0
+#endif
+
+#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
+
+#define DECIMAL_DIG 21
diff --git a/libc-top-half/musl/arch/x32/bits/io.h b/libc-top-half/musl/arch/x32/bits/io.h
new file mode 100644
index 0000000..dd5bddc
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/io.h
@@ -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));
+}
diff --git a/libc-top-half/musl/arch/x32/bits/ioctl_fix.h b/libc-top-half/musl/arch/x32/bits/ioctl_fix.h
new file mode 100644
index 0000000..83b957b
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/ioctl_fix.h
@@ -0,0 +1,4 @@
+#undef SIOCGSTAMP
+#undef SIOCGSTAMPNS
+#define SIOCGSTAMP 0x8906
+#define SIOCGSTAMPNS 0x8907
diff --git a/libc-top-half/musl/arch/x32/bits/ipc.h b/libc-top-half/musl/arch/x32/bits/ipc.h
new file mode 100644
index 0000000..a12380f
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/ipc.h
@@ -0,0 +1,11 @@
+struct ipc_perm {
+ key_t __ipc_perm_key;
+ uid_t uid;
+ gid_t gid;
+ uid_t cuid;
+ gid_t cgid;
+ mode_t mode;
+ int __ipc_perm_seq;
+ long long __pad1;
+ long long __pad2;
+};
diff --git a/libc-top-half/musl/arch/x32/bits/limits.h b/libc-top-half/musl/arch/x32/bits/limits.h
new file mode 100644
index 0000000..07743b6
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/limits.h
@@ -0,0 +1 @@
+#define PAGESIZE 4096
diff --git a/libc-top-half/musl/arch/x32/bits/mman.h b/libc-top-half/musl/arch/x32/bits/mman.h
new file mode 100644
index 0000000..ba2d6f7
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/mman.h
@@ -0,0 +1 @@
+#define MAP_32BIT 0x40
diff --git a/libc-top-half/musl/arch/x32/bits/msg.h b/libc-top-half/musl/arch/x32/bits/msg.h
new file mode 100644
index 0000000..63ae987
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/msg.h
@@ -0,0 +1,15 @@
+struct msqid_ds {
+ struct ipc_perm msg_perm;
+ time_t msg_stime;
+ time_t msg_rtime;
+ time_t msg_ctime;
+ unsigned long msg_cbytes;
+ long __unused1;
+ msgqnum_t msg_qnum;
+ long __unused2;
+ msglen_t msg_qbytes;
+ long __unused3;
+ pid_t msg_lspid;
+ pid_t msg_lrpid;
+ unsigned long long __unused[2];
+};
diff --git a/libc-top-half/musl/arch/x32/bits/posix.h b/libc-top-half/musl/arch/x32/bits/posix.h
new file mode 100644
index 0000000..30a3871
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/posix.h
@@ -0,0 +1,2 @@
+#define _POSIX_V6_ILP32_OFFBIG 1
+#define _POSIX_V7_ILP32_OFFBIG 1
diff --git a/libc-top-half/musl/arch/x32/bits/ptrace.h b/libc-top-half/musl/arch/x32/bits/ptrace.h
new file mode 100644
index 0000000..7f8a09b
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/ptrace.h
@@ -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
diff --git a/libc-top-half/musl/arch/x32/bits/reg.h b/libc-top-half/musl/arch/x32/bits/reg.h
new file mode 100644
index 0000000..5faaef1
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/reg.h
@@ -0,0 +1,29 @@
+#undef __WORDSIZE
+#define __WORDSIZE 32
+#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
diff --git a/libc-top-half/musl/arch/x32/bits/sem.h b/libc-top-half/musl/arch/x32/bits/sem.h
new file mode 100644
index 0000000..18745f4
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/sem.h
@@ -0,0 +1,11 @@
+struct semid_ds {
+ struct ipc_perm sem_perm;
+ time_t sem_otime;
+ long long __unused1;
+ time_t sem_ctime;
+ long long __unused2;
+ unsigned short sem_nsems;
+ char __sem_nsems_pad[sizeof(long long)-sizeof(short)];
+ long long __unused3;
+ long long __unused4;
+};
diff --git a/libc-top-half/musl/arch/x32/bits/setjmp.h b/libc-top-half/musl/arch/x32/bits/setjmp.h
new file mode 100644
index 0000000..a9262a6
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/setjmp.h
@@ -0,0 +1 @@
+typedef unsigned long long __jmp_buf[8];
diff --git a/libc-top-half/musl/arch/x32/bits/shm.h b/libc-top-half/musl/arch/x32/bits/shm.h
new file mode 100644
index 0000000..fa88c1e
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/shm.h
@@ -0,0 +1,32 @@
+#define SHMLBA 4096
+
+struct shmid_ds {
+ struct ipc_perm shm_perm;
+ size_t shm_segsz;
+ time_t shm_atime;
+ time_t shm_dtime;
+ time_t shm_ctime;
+ pid_t shm_cpid;
+ pid_t shm_lpid;
+ unsigned long shm_nattch;
+ unsigned long __pad0;
+ unsigned long long __pad1;
+ unsigned long long __pad2;
+};
+
+struct shminfo {
+ unsigned long shmmax, __pad0, shmmin, __pad1, shmmni, __pad2,
+ shmseg, __pad3, shmall, __pad4;
+ unsigned long long __unused[4];
+};
+
+struct shm_info {
+ int __used_ids;
+ int __pad_ids;
+ unsigned long shm_tot, __pad0, shm_rss, __pad1, shm_swp, __pad2;
+ unsigned long __swap_attempts, __pad3, __swap_successes, __pad4;
+}
+#ifdef __GNUC__
+__attribute__((__aligned__(8)))
+#endif
+;
diff --git a/libc-top-half/musl/arch/x32/bits/signal.h b/libc-top-half/musl/arch/x32/bits/signal.h
new file mode 100644
index 0000000..097be6f
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/signal.h
@@ -0,0 +1,153 @@
+#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
+ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+
+#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+#define MINSIGSTKSZ 2048
+#define SIGSTKSZ 8192
+#endif
+
+#ifdef _GNU_SOURCE
+enum { REG_R8 = 0 };
+#define REG_R8 REG_R8
+enum { REG_R9 = 1 };
+#define REG_R9 REG_R9
+enum { REG_R10 = 2 };
+#define REG_R10 REG_R10
+enum { REG_R11 = 3 };
+#define REG_R11 REG_R11
+enum { REG_R12 = 4 };
+#define REG_R12 REG_R12
+enum { REG_R13 = 5 };
+#define REG_R13 REG_R13
+enum { REG_R14 = 6 };
+#define REG_R14 REG_R14
+enum { REG_R15 = 7 };
+#define REG_R15 REG_R15
+enum { REG_RDI = 8 };
+#define REG_RDI REG_RDI
+enum { REG_RSI = 9 };
+#define REG_RSI REG_RSI
+enum { REG_RBP = 10 };
+#define REG_RBP REG_RBP
+enum { REG_RBX = 11 };
+#define REG_RBX REG_RBX
+enum { REG_RDX = 12 };
+#define REG_RDX REG_RDX
+enum { REG_RAX = 13 };
+#define REG_RAX REG_RAX
+enum { REG_RCX = 14 };
+#define REG_RCX REG_RCX
+enum { REG_RSP = 15 };
+#define REG_RSP REG_RSP
+enum { REG_RIP = 16 };
+#define REG_RIP REG_RIP
+enum { REG_EFL = 17 };
+#define REG_EFL REG_EFL
+enum { REG_CSGSFS = 18 };
+#define REG_CSGSFS REG_CSGSFS
+enum { REG_ERR = 19 };
+#define REG_ERR REG_ERR
+enum { REG_TRAPNO = 20 };
+#define REG_TRAPNO REG_TRAPNO
+enum { REG_OLDMASK = 21 };
+#define REG_OLDMASK REG_OLDMASK
+enum { REG_CR2 = 22 };
+#define REG_CR2 REG_CR2
+#endif
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+typedef long long greg_t, gregset_t[23];
+typedef struct _fpstate {
+ unsigned short cwd, swd, ftw, fop;
+ unsigned long long rip, rdp;
+ unsigned mxcsr, mxcr_mask;
+ struct {
+ unsigned short significand[4], exponent, padding[3];
+ } _st[8];
+ struct {
+ unsigned element[4];
+ } _xmm[16];
+ unsigned padding[24];
+} *fpregset_t;
+struct sigcontext {
+ unsigned long long r8, r9, r10, r11, r12, r13, r14, r15;
+ unsigned long long rdi, rsi, rbp, rbx, rdx, rax, rcx, rsp, rip, eflags;
+ unsigned short cs, gs, fs, __pad0;
+ unsigned long long err, trapno, oldmask, cr2;
+ struct _fpstate *fpstate;
+ unsigned long long __reserved1[8];
+};
+typedef struct {
+ gregset_t gregs;
+ fpregset_t fpregs;
+ unsigned long long __reserved1[8];
+} mcontext_t;
+#else
+typedef struct {
+ unsigned long long __space[32];
+} mcontext_t;
+#endif
+
+struct sigaltstack {
+ void *ss_sp;
+ int ss_flags;
+ size_t ss_size;
+};
+
+typedef struct __ucontext {
+ unsigned long uc_flags;
+ struct __ucontext *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ unsigned long long __fpregs_mem[64];
+} ucontext_t;
+
+#define SA_NOCLDSTOP 1
+#define SA_NOCLDWAIT 2
+#define SA_SIGINFO 4
+#define SA_ONSTACK 0x08000000
+#define SA_RESTART 0x10000000
+#define SA_NODEFER 0x40000000
+#define SA_RESETHAND 0x80000000
+#define SA_RESTORER 0x04000000
+
+#endif
+
+#define SIGHUP 1
+#define SIGINT 2
+#define SIGQUIT 3
+#define SIGILL 4
+#define SIGTRAP 5
+#define SIGABRT 6
+#define SIGIOT SIGABRT
+#define SIGBUS 7
+#define SIGFPE 8
+#define SIGKILL 9
+#define SIGUSR1 10
+#define SIGSEGV 11
+#define SIGUSR2 12
+#define SIGPIPE 13
+#define SIGALRM 14
+#define SIGTERM 15
+#define SIGSTKFLT 16
+#define SIGCHLD 17
+#define SIGCONT 18
+#define SIGSTOP 19
+#define SIGTSTP 20
+#define SIGTTIN 21
+#define SIGTTOU 22
+#define SIGURG 23
+#define SIGXCPU 24
+#define SIGXFSZ 25
+#define SIGVTALRM 26
+#define SIGPROF 27
+#define SIGWINCH 28
+#define SIGIO 29
+#define SIGPOLL 29
+#define SIGPWR 30
+#define SIGSYS 31
+#define SIGUNUSED SIGSYS
+
+#define _NSIG 65
+
diff --git a/libc-top-half/musl/arch/x32/bits/socket.h b/libc-top-half/musl/arch/x32/bits/socket.h
new file mode 100644
index 0000000..8d83001
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/socket.h
@@ -0,0 +1,5 @@
+#define SO_RCVTIMEO 20
+#define SO_SNDTIMEO 21
+#define SO_TIMESTAMP 29
+#define SO_TIMESTAMPNS 35
+#define SO_TIMESTAMPING 37
diff --git a/libc-top-half/musl/arch/x32/bits/stat.h b/libc-top-half/musl/arch/x32/bits/stat.h
new file mode 100644
index 0000000..1f3aa1e
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/stat.h
@@ -0,0 +1,22 @@
+/* copied from kernel definition, but with padding replaced
+ * by the corresponding correctly-sized userspace types. */
+
+struct stat {
+ dev_t st_dev;
+ ino_t st_ino;
+ nlink_t st_nlink;
+
+ mode_t st_mode;
+ uid_t st_uid;
+ gid_t st_gid;
+ unsigned int __pad0;
+ dev_t st_rdev;
+ off_t st_size;
+ blksize_t st_blksize;
+ blkcnt_t st_blocks;
+
+ struct timespec st_atim;
+ struct timespec st_mtim;
+ struct timespec st_ctim;
+ long long __unused[3];
+};
diff --git a/libc-top-half/musl/arch/x32/bits/statfs.h b/libc-top-half/musl/arch/x32/bits/statfs.h
new file mode 100644
index 0000000..79aec35
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/statfs.h
@@ -0,0 +1,9 @@
+struct statfs {
+ unsigned long f_type, __pad0, f_bsize, __pad1;
+ fsblkcnt_t f_blocks, f_bfree, f_bavail;
+ fsfilcnt_t f_files, f_ffree;
+ fsid_t f_fsid;
+ unsigned long f_namelen, __pad2, f_frsize, __pad3;
+ unsigned long f_flags, __pad4;
+ unsigned long long f_spare[4];
+};
diff --git a/libc-top-half/musl/arch/x32/bits/stdint.h b/libc-top-half/musl/arch/x32/bits/stdint.h
new file mode 100644
index 0000000..d1b2712
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/stdint.h
@@ -0,0 +1,20 @@
+typedef int32_t int_fast16_t;
+typedef int32_t int_fast32_t;
+typedef uint32_t uint_fast16_t;
+typedef uint32_t uint_fast32_t;
+
+#define INT_FAST16_MIN INT32_MIN
+#define INT_FAST32_MIN INT32_MIN
+
+#define INT_FAST16_MAX INT32_MAX
+#define INT_FAST32_MAX INT32_MAX
+
+#define UINT_FAST16_MAX UINT32_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+
+#define INTPTR_MIN INT32_MIN
+#define INTPTR_MAX INT32_MAX
+#define UINTPTR_MAX UINT32_MAX
+#define PTRDIFF_MIN INT32_MIN
+#define PTRDIFF_MAX INT32_MAX
+#define SIZE_MAX UINT32_MAX
diff --git a/libc-top-half/musl/arch/x32/bits/syscall.h.in b/libc-top-half/musl/arch/x32/bits/syscall.h.in
new file mode 100644
index 0000000..5d22fa1
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/syscall.h.in
@@ -0,0 +1,349 @@
+#define __NR_read (0x40000000 + 0)
+#define __NR_write (0x40000000 + 1)
+#define __NR_open (0x40000000 + 2)
+#define __NR_close (0x40000000 + 3)
+#define __NR_stat (0x40000000 + 4)
+#define __NR_fstat (0x40000000 + 5)
+#define __NR_lstat (0x40000000 + 6)
+#define __NR_poll (0x40000000 + 7)
+#define __NR_lseek (0x40000000 + 8)
+#define __NR_mmap (0x40000000 + 9)
+#define __NR_mprotect (0x40000000 + 10)
+#define __NR_munmap (0x40000000 + 11)
+#define __NR_brk (0x40000000 + 12)
+#define __NR_rt_sigprocmask (0x40000000 + 14)
+#define __NR_pread64 (0x40000000 + 17)
+#define __NR_pwrite64 (0x40000000 + 18)
+#define __NR_access (0x40000000 + 21)
+#define __NR_pipe (0x40000000 + 22)
+#define __NR_select (0x40000000 + 23)
+#define __NR_sched_yield (0x40000000 + 24)
+#define __NR_mremap (0x40000000 + 25)
+#define __NR_msync (0x40000000 + 26)
+#define __NR_mincore (0x40000000 + 27)
+#define __NR_madvise (0x40000000 + 28)
+#define __NR_shmget (0x40000000 + 29)
+#define __NR_shmat (0x40000000 + 30)
+#define __NR_shmctl (0x40000000 + 31)
+#define __NR_dup (0x40000000 + 32)
+#define __NR_dup2 (0x40000000 + 33)
+#define __NR_pause (0x40000000 + 34)
+#define __NR_nanosleep (0x40000000 + 35)
+#define __NR_getitimer (0x40000000 + 36)
+#define __NR_alarm (0x40000000 + 37)
+#define __NR_setitimer (0x40000000 + 38)
+#define __NR_getpid (0x40000000 + 39)
+#define __NR_sendfile (0x40000000 + 40)
+#define __NR_socket (0x40000000 + 41)
+#define __NR_connect (0x40000000 + 42)
+#define __NR_accept (0x40000000 + 43)
+#define __NR_sendto (0x40000000 + 44)
+#define __NR_shutdown (0x40000000 + 48)
+#define __NR_bind (0x40000000 + 49)
+#define __NR_listen (0x40000000 + 50)
+#define __NR_getsockname (0x40000000 + 51)
+#define __NR_getpeername (0x40000000 + 52)
+#define __NR_socketpair (0x40000000 + 53)
+#define __NR_clone (0x40000000 + 56)
+#define __NR_fork (0x40000000 + 57)
+#define __NR_vfork (0x40000000 + 58)
+#define __NR_exit (0x40000000 + 60)
+#define __NR_wait4 (0x40000000 + 61)
+#define __NR_kill (0x40000000 + 62)
+#define __NR_uname (0x40000000 + 63)
+#define __NR_semget (0x40000000 + 64)
+#define __NR_semop (0x40000000 + 65)
+#define __NR_semctl (0x40000000 + 66)
+#define __NR_shmdt (0x40000000 + 67)
+#define __NR_msgget (0x40000000 + 68)
+#define __NR_msgsnd (0x40000000 + 69)
+#define __NR_msgrcv (0x40000000 + 70)
+#define __NR_msgctl (0x40000000 + 71)
+#define __NR_fcntl (0x40000000 + 72)
+#define __NR_flock (0x40000000 + 73)
+#define __NR_fsync (0x40000000 + 74)
+#define __NR_fdatasync (0x40000000 + 75)
+#define __NR_truncate (0x40000000 + 76)
+#define __NR_ftruncate (0x40000000 + 77)
+#define __NR_getdents (0x40000000 + 78)
+#define __NR_getcwd (0x40000000 + 79)
+#define __NR_chdir (0x40000000 + 80)
+#define __NR_fchdir (0x40000000 + 81)
+#define __NR_rename (0x40000000 + 82)
+#define __NR_mkdir (0x40000000 + 83)
+#define __NR_rmdir (0x40000000 + 84)
+#define __NR_creat (0x40000000 + 85)
+#define __NR_link (0x40000000 + 86)
+#define __NR_unlink (0x40000000 + 87)
+#define __NR_symlink (0x40000000 + 88)
+#define __NR_readlink (0x40000000 + 89)
+#define __NR_chmod (0x40000000 + 90)
+#define __NR_fchmod (0x40000000 + 91)
+#define __NR_chown (0x40000000 + 92)
+#define __NR_fchown (0x40000000 + 93)
+#define __NR_lchown (0x40000000 + 94)
+#define __NR_umask (0x40000000 + 95)
+#define __NR_gettimeofday (0x40000000 + 96)
+#define __NR_getrlimit (0x40000000 + 97)
+#define __NR_getrusage (0x40000000 + 98)
+#define __NR_sysinfo (0x40000000 + 99)
+#define __NR_times (0x40000000 + 100)
+#define __NR_getuid (0x40000000 + 102)
+#define __NR_syslog (0x40000000 + 103)
+#define __NR_getgid (0x40000000 + 104)
+#define __NR_setuid (0x40000000 + 105)
+#define __NR_setgid (0x40000000 + 106)
+#define __NR_geteuid (0x40000000 + 107)
+#define __NR_getegid (0x40000000 + 108)
+#define __NR_setpgid (0x40000000 + 109)
+#define __NR_getppid (0x40000000 + 110)
+#define __NR_getpgrp (0x40000000 + 111)
+#define __NR_setsid (0x40000000 + 112)
+#define __NR_setreuid (0x40000000 + 113)
+#define __NR_setregid (0x40000000 + 114)
+#define __NR_getgroups (0x40000000 + 115)
+#define __NR_setgroups (0x40000000 + 116)
+#define __NR_setresuid (0x40000000 + 117)
+#define __NR_getresuid (0x40000000 + 118)
+#define __NR_setresgid (0x40000000 + 119)
+#define __NR_getresgid (0x40000000 + 120)
+#define __NR_getpgid (0x40000000 + 121)
+#define __NR_setfsuid (0x40000000 + 122)
+#define __NR_setfsgid (0x40000000 + 123)
+#define __NR_getsid (0x40000000 + 124)
+#define __NR_capget (0x40000000 + 125)
+#define __NR_capset (0x40000000 + 126)
+#define __NR_rt_sigsuspend (0x40000000 + 130)
+#define __NR_utime (0x40000000 + 132)
+#define __NR_mknod (0x40000000 + 133)
+#define __NR_personality (0x40000000 + 135)
+#define __NR_ustat (0x40000000 + 136)
+#define __NR_statfs (0x40000000 + 137)
+#define __NR_fstatfs (0x40000000 + 138)
+#define __NR_sysfs (0x40000000 + 139)
+#define __NR_getpriority (0x40000000 + 140)
+#define __NR_setpriority (0x40000000 + 141)
+#define __NR_sched_setparam (0x40000000 + 142)
+#define __NR_sched_getparam (0x40000000 + 143)
+#define __NR_sched_setscheduler (0x40000000 + 144)
+#define __NR_sched_getscheduler (0x40000000 + 145)
+#define __NR_sched_get_priority_max (0x40000000 + 146)
+#define __NR_sched_get_priority_min (0x40000000 + 147)
+#define __NR_sched_rr_get_interval (0x40000000 + 148)
+#define __NR_mlock (0x40000000 + 149)
+#define __NR_munlock (0x40000000 + 150)
+#define __NR_mlockall (0x40000000 + 151)
+#define __NR_munlockall (0x40000000 + 152)
+#define __NR_vhangup (0x40000000 + 153)
+#define __NR_modify_ldt (0x40000000 + 154)
+#define __NR_pivot_root (0x40000000 + 155)
+#define __NR_prctl (0x40000000 + 157)
+#define __NR_arch_prctl (0x40000000 + 158)
+#define __NR_adjtimex (0x40000000 + 159)
+#define __NR_setrlimit (0x40000000 + 160)
+#define __NR_chroot (0x40000000 + 161)
+#define __NR_sync (0x40000000 + 162)
+#define __NR_acct (0x40000000 + 163)
+#define __NR_settimeofday (0x40000000 + 164)
+#define __NR_mount (0x40000000 + 165)
+#define __NR_umount2 (0x40000000 + 166)
+#define __NR_swapon (0x40000000 + 167)
+#define __NR_swapoff (0x40000000 + 168)
+#define __NR_reboot (0x40000000 + 169)
+#define __NR_sethostname (0x40000000 + 170)
+#define __NR_setdomainname (0x40000000 + 171)
+#define __NR_iopl (0x40000000 + 172)
+#define __NR_ioperm (0x40000000 + 173)
+#define __NR_init_module (0x40000000 + 175)
+#define __NR_delete_module (0x40000000 + 176)
+#define __NR_quotactl (0x40000000 + 179)
+#define __NR_getpmsg (0x40000000 + 181)
+#define __NR_putpmsg (0x40000000 + 182)
+#define __NR_afs_syscall (0x40000000 + 183)
+#define __NR_tuxcall (0x40000000 + 184)
+#define __NR_security (0x40000000 + 185)
+#define __NR_gettid (0x40000000 + 186)
+#define __NR_readahead (0x40000000 + 187)
+#define __NR_setxattr (0x40000000 + 188)
+#define __NR_lsetxattr (0x40000000 + 189)
+#define __NR_fsetxattr (0x40000000 + 190)
+#define __NR_getxattr (0x40000000 + 191)
+#define __NR_lgetxattr (0x40000000 + 192)
+#define __NR_fgetxattr (0x40000000 + 193)
+#define __NR_listxattr (0x40000000 + 194)
+#define __NR_llistxattr (0x40000000 + 195)
+#define __NR_flistxattr (0x40000000 + 196)
+#define __NR_removexattr (0x40000000 + 197)
+#define __NR_lremovexattr (0x40000000 + 198)
+#define __NR_fremovexattr (0x40000000 + 199)
+#define __NR_tkill (0x40000000 + 200)
+#define __NR_time (0x40000000 + 201)
+#define __NR_futex (0x40000000 + 202)
+#define __NR_sched_setaffinity (0x40000000 + 203)
+#define __NR_sched_getaffinity (0x40000000 + 204)
+#define __NR_io_destroy (0x40000000 + 207)
+#define __NR_io_getevents (0x40000000 + 208)
+#define __NR_io_cancel (0x40000000 + 210)
+#define __NR_lookup_dcookie (0x40000000 + 212)
+#define __NR_epoll_create (0x40000000 + 213)
+#define __NR_remap_file_pages (0x40000000 + 216)
+#define __NR_getdents64 (0x40000000 + 217)
+#define __NR_set_tid_address (0x40000000 + 218)
+#define __NR_restart_syscall (0x40000000 + 219)
+#define __NR_semtimedop (0x40000000 + 220)
+#define __NR_fadvise64 (0x40000000 + 221)
+#define __NR_timer_settime (0x40000000 + 223)
+#define __NR_timer_gettime (0x40000000 + 224)
+#define __NR_timer_getoverrun (0x40000000 + 225)
+#define __NR_timer_delete (0x40000000 + 226)
+#define __NR_clock_settime (0x40000000 + 227)
+#define __NR_clock_gettime (0x40000000 + 228)
+#define __NR_clock_getres (0x40000000 + 229)
+#define __NR_clock_nanosleep (0x40000000 + 230)
+#define __NR_exit_group (0x40000000 + 231)
+#define __NR_epoll_wait (0x40000000 + 232)
+#define __NR_epoll_ctl (0x40000000 + 233)
+#define __NR_tgkill (0x40000000 + 234)
+#define __NR_utimes (0x40000000 + 235)
+#define __NR_mbind (0x40000000 + 237)
+#define __NR_set_mempolicy (0x40000000 + 238)
+#define __NR_get_mempolicy (0x40000000 + 239)
+#define __NR_mq_open (0x40000000 + 240)
+#define __NR_mq_unlink (0x40000000 + 241)
+#define __NR_mq_timedsend (0x40000000 + 242)
+#define __NR_mq_timedreceive (0x40000000 + 243)
+#define __NR_mq_getsetattr (0x40000000 + 245)
+#define __NR_add_key (0x40000000 + 248)
+#define __NR_request_key (0x40000000 + 249)
+#define __NR_keyctl (0x40000000 + 250)
+#define __NR_ioprio_set (0x40000000 + 251)
+#define __NR_ioprio_get (0x40000000 + 252)
+#define __NR_inotify_init (0x40000000 + 253)
+#define __NR_inotify_add_watch (0x40000000 + 254)
+#define __NR_inotify_rm_watch (0x40000000 + 255)
+#define __NR_migrate_pages (0x40000000 + 256)
+#define __NR_openat (0x40000000 + 257)
+#define __NR_mkdirat (0x40000000 + 258)
+#define __NR_mknodat (0x40000000 + 259)
+#define __NR_fchownat (0x40000000 + 260)
+#define __NR_futimesat (0x40000000 + 261)
+#define __NR_newfstatat (0x40000000 + 262)
+#define __NR_unlinkat (0x40000000 + 263)
+#define __NR_renameat (0x40000000 + 264)
+#define __NR_linkat (0x40000000 + 265)
+#define __NR_symlinkat (0x40000000 + 266)
+#define __NR_readlinkat (0x40000000 + 267)
+#define __NR_fchmodat (0x40000000 + 268)
+#define __NR_faccessat (0x40000000 + 269)
+#define __NR_pselect6 (0x40000000 + 270)
+#define __NR_ppoll (0x40000000 + 271)
+#define __NR_unshare (0x40000000 + 272)
+#define __NR_splice (0x40000000 + 275)
+#define __NR_tee (0x40000000 + 276)
+#define __NR_sync_file_range (0x40000000 + 277)
+#define __NR_utimensat (0x40000000 + 280)
+#define __NR_epoll_pwait (0x40000000 + 281)
+#define __NR_signalfd (0x40000000 + 282)
+#define __NR_timerfd_create (0x40000000 + 283)
+#define __NR_eventfd (0x40000000 + 284)
+#define __NR_fallocate (0x40000000 + 285)
+#define __NR_timerfd_settime (0x40000000 + 286)
+#define __NR_timerfd_gettime (0x40000000 + 287)
+#define __NR_accept4 (0x40000000 + 288)
+#define __NR_signalfd4 (0x40000000 + 289)
+#define __NR_eventfd2 (0x40000000 + 290)
+#define __NR_epoll_create1 (0x40000000 + 291)
+#define __NR_dup3 (0x40000000 + 292)
+#define __NR_pipe2 (0x40000000 + 293)
+#define __NR_inotify_init1 (0x40000000 + 294)
+#define __NR_perf_event_open (0x40000000 + 298)
+#define __NR_fanotify_init (0x40000000 + 300)
+#define __NR_fanotify_mark (0x40000000 + 301)
+#define __NR_prlimit64 (0x40000000 + 302)
+#define __NR_name_to_handle_at (0x40000000 + 303)
+#define __NR_open_by_handle_at (0x40000000 + 304)
+#define __NR_clock_adjtime (0x40000000 + 305)
+#define __NR_syncfs (0x40000000 + 306)
+#define __NR_setns (0x40000000 + 308)
+#define __NR_getcpu (0x40000000 + 309)
+#define __NR_kcmp (0x40000000 + 312)
+#define __NR_finit_module (0x40000000 + 313)
+#define __NR_sched_setattr (0x40000000 + 314)
+#define __NR_sched_getattr (0x40000000 + 315)
+#define __NR_renameat2 (0x40000000 + 316)
+#define __NR_seccomp (0x40000000 + 317)
+#define __NR_getrandom (0x40000000 + 318)
+#define __NR_memfd_create (0x40000000 + 319)
+#define __NR_kexec_file_load (0x40000000 + 320)
+#define __NR_bpf (0x40000000 + 321)
+#define __NR_userfaultfd (0x40000000 + 323)
+#define __NR_membarrier (0x40000000 + 324)
+#define __NR_mlock2 (0x40000000 + 325)
+#define __NR_copy_file_range (0x40000000 + 326)
+#define __NR_pkey_mprotect (0x40000000 + 329)
+#define __NR_pkey_alloc (0x40000000 + 330)
+#define __NR_pkey_free (0x40000000 + 331)
+#define __NR_statx (0x40000000 + 332)
+#define __NR_io_pgetevents (0x40000000 + 333)
+#define __NR_rseq (0x40000000 + 334)
+#define __NR_pidfd_send_signal (0x40000000 + 424)
+#define __NR_io_uring_setup (0x40000000 + 425)
+#define __NR_io_uring_enter (0x40000000 + 426)
+#define __NR_io_uring_register (0x40000000 + 427)
+#define __NR_open_tree (0x40000000 + 428)
+#define __NR_move_mount (0x40000000 + 429)
+#define __NR_fsopen (0x40000000 + 430)
+#define __NR_fsconfig (0x40000000 + 431)
+#define __NR_fsmount (0x40000000 + 432)
+#define __NR_fspick (0x40000000 + 433)
+#define __NR_pidfd_open (0x40000000 + 434)
+#define __NR_clone3 (0x40000000 + 435)
+#define __NR_close_range (0x40000000 + 436)
+#define __NR_openat2 (0x40000000 + 437)
+#define __NR_pidfd_getfd (0x40000000 + 438)
+#define __NR_faccessat2 (0x40000000 + 439)
+#define __NR_process_madvise (0x40000000 + 440)
+#define __NR_epoll_pwait2 (0x40000000 + 441)
+#define __NR_mount_setattr (0x40000000 + 442)
+#define __NR_landlock_create_ruleset (0x40000000 + 444)
+#define __NR_landlock_add_rule (0x40000000 + 445)
+#define __NR_landlock_restrict_self (0x40000000 + 446)
+
+
+#define __NR_rt_sigaction (0x40000000 + 512)
+#define __NR_rt_sigreturn (0x40000000 + 513)
+#define __NR_ioctl (0x40000000 + 514)
+#define __NR_readv (0x40000000 + 515)
+#define __NR_writev (0x40000000 + 516)
+#define __NR_recvfrom (0x40000000 + 517)
+#define __NR_sendmsg (0x40000000 + 518)
+#define __NR_recvmsg (0x40000000 + 519)
+#define __NR_execve (0x40000000 + 520)
+#define __NR_ptrace (0x40000000 + 521)
+#define __NR_rt_sigpending (0x40000000 + 522)
+#define __NR_rt_sigtimedwait (0x40000000 + 523)
+#define __NR_rt_sigqueueinfo (0x40000000 + 524)
+#define __NR_sigaltstack (0x40000000 + 525)
+#define __NR_timer_create (0x40000000 + 526)
+#define __NR_mq_notify (0x40000000 + 527)
+#define __NR_kexec_load (0x40000000 + 528)
+#define __NR_waitid (0x40000000 + 529)
+#define __NR_set_robust_list (0x40000000 + 530)
+#define __NR_get_robust_list (0x40000000 + 531)
+#define __NR_vmsplice (0x40000000 + 532)
+#define __NR_move_pages (0x40000000 + 533)
+#define __NR_preadv (0x40000000 + 534)
+#define __NR_pwritev (0x40000000 + 535)
+#define __NR_rt_tgsigqueueinfo (0x40000000 + 536)
+#define __NR_recvmmsg (0x40000000 + 537)
+#define __NR_sendmmsg (0x40000000 + 538)
+#define __NR_process_vm_readv (0x40000000 + 539)
+#define __NR_process_vm_writev (0x40000000 + 540)
+#define __NR_setsockopt (0x40000000 + 541)
+#define __NR_getsockopt (0x40000000 + 542)
+#define __NR_io_setup (0x40000000 + 543)
+#define __NR_io_submit (0x40000000 + 544)
+#define __NR_execveat (0x40000000 + 545)
+#define __NR_preadv2 (0x40000000 + 546)
+#define __NR_pwritev2 (0x40000000 + 547)
+
diff --git a/libc-top-half/musl/arch/x32/bits/user.h b/libc-top-half/musl/arch/x32/bits/user.h
new file mode 100644
index 0000000..eac82a1
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/bits/user.h
@@ -0,0 +1,41 @@
+#undef __WORDSIZE
+#define __WORDSIZE 32
+
+typedef struct user_fpregs_struct {
+ uint16_t cwd, swd, ftw, fop;
+ uint64_t rip, rdp;
+ uint32_t mxcsr, mxcr_mask;
+ uint32_t st_space[32], xmm_space[64], padding[24];
+} elf_fpregset_t;
+
+struct user_regs_struct {
+ unsigned long r15, r14, r13, r12, rbp, rbx, r11, r10, r9, r8;
+ unsigned long rax, rcx, rdx, rsi, rdi, orig_rax, rip;
+ unsigned long cs, eflags, rsp, ss, fs_base, gs_base, ds, es, fs, gs;
+};
+#define ELF_NGREG 27
+typedef unsigned long long elf_greg_t, elf_gregset_t[ELF_NGREG];
+
+struct user {
+ struct user_regs_struct regs;
+ int u_fpvalid;
+ struct user_fpregs_struct i387;
+ unsigned long u_tsize;
+ unsigned long u_dsize;
+ unsigned long u_ssize;
+ unsigned long start_code;
+ unsigned long start_stack;
+ long signal;
+ int reserved;
+ struct user_regs_struct *u_ar0;
+ struct user_fpregs_struct *u_fpstate;
+ unsigned long magic;
+ char u_comm[32];
+ unsigned long u_debugreg[8];
+};
+
+#define PAGE_MASK (~(PAGESIZE-1))
+#define NBPG PAGESIZE
+#define UPAGES 1
+#define HOST_TEXT_START_ADDR (u.start_code)
+#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
diff --git a/libc-top-half/musl/arch/x32/crt_arch.h b/libc-top-half/musl/arch/x32/crt_arch.h
new file mode 100644
index 0000000..3eec61b
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/crt_arch.h
@@ -0,0 +1,12 @@
+__asm__(
+".text \n"
+".global " START " \n"
+START ": \n"
+" xor %rbp,%rbp \n"
+" mov %rsp,%rdi \n"
+".weak _DYNAMIC \n"
+".hidden _DYNAMIC \n"
+" lea _DYNAMIC(%rip),%rsi \n"
+" andq $-16,%rsp \n"
+" call " START "_c \n"
+);
diff --git a/libc-top-half/musl/arch/x32/ksigaction.h b/libc-top-half/musl/arch/x32/ksigaction.h
new file mode 100644
index 0000000..c40e356
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/ksigaction.h
@@ -0,0 +1,11 @@
+#include <features.h>
+
+struct k_sigaction {
+ void (*handler)(int);
+ unsigned long flags;
+ void (*restorer)(void);
+ unsigned mask[2];
+};
+
+hidden void __restore_rt();
+#define __restore __restore_rt
diff --git a/libc-top-half/musl/arch/x32/kstat.h b/libc-top-half/musl/arch/x32/kstat.h
new file mode 100644
index 0000000..ce25fce
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/kstat.h
@@ -0,0 +1,22 @@
+struct kstat {
+ dev_t st_dev;
+ ino_t st_ino;
+ nlink_t st_nlink;
+
+ mode_t st_mode;
+ uid_t st_uid;
+ gid_t st_gid;
+ unsigned int __pad0;
+ dev_t st_rdev;
+ off_t st_size;
+ blksize_t st_blksize;
+ blkcnt_t st_blocks;
+
+ long long st_atime_sec;
+ long st_atime_nsec;
+ long long st_mtime_sec;
+ long st_mtime_nsec;
+ long long st_ctime_sec;
+ long st_ctime_nsec;
+ long long __unused[3];
+};
diff --git a/libc-top-half/musl/arch/x32/pthread_arch.h b/libc-top-half/musl/arch/x32/pthread_arch.h
new file mode 100644
index 0000000..c1e7716
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/pthread_arch.h
@@ -0,0 +1,12 @@
+static inline uintptr_t __get_tp()
+{
+ uintptr_t tp;
+ __asm__ ("mov %%fs:0,%0" : "=r" (tp) );
+ return tp;
+}
+
+#define MC_PC gregs[REG_RIP]
+
+#define CANARY_PAD
+
+#define tls_mod_off_t unsigned long long
diff --git a/libc-top-half/musl/arch/x32/reloc.h b/libc-top-half/musl/arch/x32/reloc.h
new file mode 100644
index 0000000..dc039ad
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/reloc.h
@@ -0,0 +1,31 @@
+#define LDSO_ARCH "x32"
+
+/* FIXME: x32 is very strange in its use of 64-bit relocation types in
+ * a 32-bit environment. As long as the memory at reloc_addr is
+ * zero-filled prior to relocations, just treating 64-bit relocations
+ * as operating on 32-bit slots should be fine, but this should be
+ * checked. In particular, R_X86_64_64, R_X86_64_DTPOFF64, and
+ * R_X86_64_TPOFF64 may need checking. */
+
+/* The R_X86_64_64, R_X86_64_DTPOFF32, and R_X86_64_TPOFF32 reloc types
+ * were previously mapped in the switch table form of this file; however,
+ * they do not seem to be used/usable for anything. If needed, new
+ * mappings will have to be added. */
+
+#define REL_SYMBOLIC R_X86_64_32
+#define REL_OFFSET 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 CRTJMP(pc,sp) __asm__ __volatile__( \
+ "mov %1,%%esp ; jmp *%0" : : "r"((uint64_t)(uintptr_t)pc), "r"(sp) : "memory" )
+
+#define GETFUNCSYM(fp, sym, got) __asm__ ( \
+ ".hidden " #sym "\n" \
+ " lea " #sym "(%%rip),%0\n" \
+ : "=r"(*fp) : : "memory" )
diff --git a/libc-top-half/musl/arch/x32/syscall_arch.h b/libc-top-half/musl/arch/x32/syscall_arch.h
new file mode 100644
index 0000000..e0111cc
--- /dev/null
+++ b/libc-top-half/musl/arch/x32/syscall_arch.h
@@ -0,0 +1,93 @@
+#define __SYSCALL_LL_E(x) (x)
+#define __SYSCALL_LL_O(x) (x)
+
+#define __scc(X) sizeof(1?(X):0ULL) < 8 ? (unsigned long) (X) : (long long) (X)
+typedef long long syscall_arg_t;
+
+static __inline long __syscall0(long long n)
+{
+ unsigned long ret;
+ __asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n) : "rcx", "r11", "memory");
+ return ret;
+}
+
+static __inline long __syscall1(long long n, long long a1)
+{
+ unsigned long ret;
+ __asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n), "D"(a1) : "rcx", "r11", "memory");
+ return ret;
+}
+
+static __inline long __syscall2(long long n, long long a1, long long a2)
+{
+ unsigned long ret;
+ __asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n), "D"(a1), "S"(a2)
+ : "rcx", "r11", "memory");
+ return ret;
+}
+
+static __inline long __syscall3(long long n, long long a1, long long a2, long long a3)
+{
+ unsigned long ret;
+ __asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n), "D"(a1), "S"(a2),
+ "d"(a3) : "rcx", "r11", "memory");
+ return ret;
+}
+
+static __inline long __syscall4(long long n, long long a1, long long a2, long long a3,
+ long long a4_)
+{
+ unsigned long ret;
+ register long long a4 __asm__("r10") = a4_;
+ __asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n), "D"(a1), "S"(a2),
+ "d"(a3), "r"(a4): "rcx", "r11", "memory");
+ return ret;
+}
+
+static __inline long __syscall5(long long n, long long a1, long long a2, long long a3,
+ long long a4_, long long a5_)
+{
+ unsigned long ret;
+ register long long a4 __asm__("r10") = a4_;
+ register long long a5 __asm__("r8") = a5_;
+ __asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n), "D"(a1), "S"(a2),
+ "d"(a3), "r"(a4), "r"(a5) : "rcx", "r11", "memory");
+ return ret;
+}
+
+static __inline long __syscall6(long long n, long long a1, long long a2, long long a3,
+ long long a4_, long long a5_, long long a6_)
+{
+ unsigned long ret;
+ register long long a4 __asm__("r10") = a4_;
+ register long long a5 __asm__("r8") = a5_;
+ register long long a6 __asm__("r9") = a6_;
+ __asm__ __volatile__ ("syscall" : "=a"(ret) : "a"(n), "D"(a1), "S"(a2),
+ "d"(a3), "r"(a4), "r"(a5), "r"(a6) : "rcx", "r11", "memory");
+ return ret;
+}
+
+#undef SYS_futimesat
+
+#define SYS_clock_gettime64 SYS_clock_gettime
+#define SYS_clock_settime64 SYS_clock_settime
+#define SYS_clock_adjtime64 SYS_clock_adjtime
+#define SYS_clock_nanosleep_time64 SYS_clock_nanosleep
+#define SYS_timer_gettime64 SYS_timer_gettime
+#define SYS_timer_settime64 SYS_timer_settime
+#define SYS_timerfd_gettime64 SYS_timerfd_gettime
+#define SYS_timerfd_settime64 SYS_timerfd_settime
+#define SYS_utimensat_time64 SYS_utimensat
+#define SYS_pselect6_time64 SYS_pselect6
+#define SYS_ppoll_time64 SYS_ppoll
+#define SYS_recvmmsg_time64 SYS_recvmmsg
+#define SYS_mq_timedsend_time64 SYS_mq_timedsend
+#define SYS_mq_timedreceive_time64 SYS_mq_timedreceive
+#define SYS_semtimedop_time64 SYS_semtimedop
+#define SYS_rt_sigtimedwait_time64 SYS_rt_sigtimedwait
+#define SYS_futex_time64 SYS_futex
+#define SYS_sched_rr_get_interval_time64 SYS_sched_rr_get_interval
+#define SYS_getrusage_time64 SYS_getrusage
+#define SYS_wait4_time64 SYS_wait4
+
+#define IPC_64 0