summaryrefslogtreecommitdiff
path: root/toolchain
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@uclibc-ng.org>2016-05-18 18:17:59 +0200
committerWaldemar Brodkorb <wbx@uclibc-ng.org>2016-05-18 18:17:59 +0200
commit0950409b45f581d6bedd354d0bf4d9957e446709 (patch)
tree1c1bd90c2f25918400abe107789630db12ec6e37 /toolchain
parent362bd31a15a6fb071368de1aad45a65c7c149775 (diff)
add experimental musl xtensa support
Diffstat (limited to 'toolchain')
-rw-r--r--toolchain/gcc/patches/6.1.0/xtensa-musl.patch27
-rw-r--r--toolchain/musl/patches/1.1.14/xtensa.patch2429
2 files changed, 2456 insertions, 0 deletions
diff --git a/toolchain/gcc/patches/6.1.0/xtensa-musl.patch b/toolchain/gcc/patches/6.1.0/xtensa-musl.patch
new file mode 100644
index 000000000..fa00abbfa
--- /dev/null
+++ b/toolchain/gcc/patches/6.1.0/xtensa-musl.patch
@@ -0,0 +1,27 @@
+From 8f018dd26d3d9992fc32f6ce04492572312d2790 Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Tue, 22 Mar 2016 16:07:24 +0300
+Subject: [PATCH] xtensa: support musl
+
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+---
+ gcc/config/xtensa/linux.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/gcc/config/xtensa/linux.h b/gcc/config/xtensa/linux.h
+index 6ecb153..a41ef96 100644
+--- a/gcc/config/xtensa/linux.h
++++ b/gcc/config/xtensa/linux.h
+@@ -48,6 +48,9 @@ along with GCC; see the file COPYING3. If not see
+
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
+
++#undef MUSL_DYNAMIC_LINKER
++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-xtensa.so.1"
++
+ #undef LINK_SPEC
+ #define LINK_SPEC \
+ "%{shared:-shared} \
+--
+2.1.4
+
diff --git a/toolchain/musl/patches/1.1.14/xtensa.patch b/toolchain/musl/patches/1.1.14/xtensa.patch
new file mode 100644
index 000000000..dbb25ebc6
--- /dev/null
+++ b/toolchain/musl/patches/1.1.14/xtensa.patch
@@ -0,0 +1,2429 @@
+From be7942d8dbce223ed6a75dfdf8d2cd1beb04e2eb Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Tue, 22 Mar 2016 02:35:58 +0300
+Subject: [PATCH 242/242] xtensa: add port
+
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>
+---
+ arch/xtensa/atomic_arch.h | 30 ++
+ arch/xtensa/bits/alltypes.h.in | 30 ++
+ arch/xtensa/bits/endian.h | 7 +
+ arch/xtensa/bits/float.h | 16 +
+ arch/xtensa/bits/ioctl.h | 227 ++++++++++++
+ arch/xtensa/bits/limits.h | 7 +
+ arch/xtensa/bits/mman.h | 57 +++
+ arch/xtensa/bits/posix.h | 2 +
+ arch/xtensa/bits/reg.h | 2 +
+ arch/xtensa/bits/setjmp.h | 1 +
+ arch/xtensa/bits/signal.h | 88 +++++
+ arch/xtensa/bits/stat.h | 21 ++
+ arch/xtensa/bits/stdint.h | 20 +
+ arch/xtensa/bits/syscall.h | 679 ++++++++++++++++++++++++++++++++++
+ arch/xtensa/bits/termios.h | 168 +++++++++
+ arch/xtensa/bits/user.h | 4 +
+ arch/xtensa/bits/xtensa-config.h | 46 +++
+ arch/xtensa/crt_arch.h | 26 ++
+ arch/xtensa/pthread_arch.h | 11 +
+ arch/xtensa/reloc.h | 21 ++
+ arch/xtensa/syscall_arch.h | 102 +++++
+ configure | 1 +
+ crt/xtensa/crti.s | 11 +
+ crt/xtensa/crtn.s | 5 +
+ include/elf.h | 58 +++
+ ldso/dlstart.c | 13 +-
+ ldso/dynlink.c | 41 +-
+ src/internal/xtensa/syscall.s | 15 +
+ src/ldso/xtensa/tlsdesc.s | 22 ++
+ src/setjmp/xtensa/longjmp.s | 73 ++++
+ src/setjmp/xtensa/setjmp.s | 13 +
+ src/signal/xtensa/restore.s | 10 +
+ src/signal/xtensa/sigsetjmp.s | 69 ++++
+ src/signal/xtensa/windowspill.s | 78 ++++
+ src/thread/xtensa/__set_thread_area.s | 8 +
+ src/thread/xtensa/__unmapself.s | 10 +
+ src/thread/xtensa/clone.s | 39 ++
+ src/thread/xtensa/syscall_cp.s | 37 ++
+ 38 files changed, 2066 insertions(+), 2 deletions(-)
+ create mode 100644 arch/xtensa/atomic_arch.h
+ create mode 100644 arch/xtensa/bits/alltypes.h.in
+ create mode 100644 arch/xtensa/bits/endian.h
+ create mode 100644 arch/xtensa/bits/float.h
+ create mode 100644 arch/xtensa/bits/ioctl.h
+ create mode 100644 arch/xtensa/bits/limits.h
+ create mode 100644 arch/xtensa/bits/mman.h
+ create mode 100644 arch/xtensa/bits/posix.h
+ create mode 100644 arch/xtensa/bits/reg.h
+ create mode 100644 arch/xtensa/bits/setjmp.h
+ create mode 100644 arch/xtensa/bits/signal.h
+ create mode 100644 arch/xtensa/bits/stat.h
+ create mode 100644 arch/xtensa/bits/stdint.h
+ create mode 100644 arch/xtensa/bits/syscall.h
+ create mode 100644 arch/xtensa/bits/termios.h
+ create mode 100644 arch/xtensa/bits/user.h
+ create mode 100644 arch/xtensa/bits/xtensa-config.h
+ create mode 100644 arch/xtensa/crt_arch.h
+ create mode 100644 arch/xtensa/pthread_arch.h
+ create mode 100644 arch/xtensa/reloc.h
+ create mode 100644 arch/xtensa/syscall_arch.h
+ create mode 100644 crt/xtensa/crti.s
+ create mode 100644 crt/xtensa/crtn.s
+ create mode 100644 src/internal/xtensa/syscall.s
+ create mode 100644 src/ldso/xtensa/tlsdesc.s
+ create mode 100644 src/setjmp/xtensa/longjmp.s
+ create mode 100644 src/setjmp/xtensa/setjmp.s
+ create mode 100644 src/signal/xtensa/restore.s
+ create mode 100644 src/signal/xtensa/sigsetjmp.s
+ create mode 100644 src/signal/xtensa/windowspill.s
+ create mode 100644 src/thread/xtensa/__set_thread_area.s
+ create mode 100644 src/thread/xtensa/__unmapself.s
+ create mode 100644 src/thread/xtensa/clone.s
+ create mode 100644 src/thread/xtensa/syscall_cp.s
+
+diff --git a/arch/xtensa/atomic_arch.h b/arch/xtensa/atomic_arch.h
+new file mode 100644
+index 0000000..476814b
+--- /dev/null
++++ b/arch/xtensa/atomic_arch.h
+@@ -0,0 +1,30 @@
++#ifndef _INTERNAL_ATOMIC_H
++#define _INTERNAL_ATOMIC_H
++
++#include <stdint.h>
++
++#define a_cas a_cas
++static inline int a_cas(volatile int *p, int t, int s)
++{
++ __asm__ __volatile__(
++ " wsr %1, scompare1\n"
++ " s32c1i %0, %2, 0\n"
++ : "+a"(s)
++ : "a"(t), "a"(p)
++ : "memory" );
++ return s;
++}
++
++#define a_barrier a_barrier
++static inline void a_barrier()
++{
++ __asm__ __volatile__ ("memw" : : : "memory");
++}
++
++#define a_crash a_crash
++static inline void a_crash()
++{
++ __asm__ __volatile__ ("ill" : : : "memory");
++}
++
++#endif
+diff --git a/arch/xtensa/bits/alltypes.h.in b/arch/xtensa/bits/alltypes.h.in
+new file mode 100644
+index 0000000..1e2a8c1
+--- /dev/null
++++ b/arch/xtensa/bits/alltypes.h.in
+@@ -0,0 +1,30 @@
++#define _Addr int
++#define _Int64 long long
++#define _Reg int
++
++TYPEDEF __builtin_va_list va_list;
++TYPEDEF __builtin_va_list __isoc_va_list;
++
++#ifndef __cplusplus
++#ifdef __WCHAR_TYPE__
++TYPEDEF __WCHAR_TYPE__ wchar_t;
++#else
++TYPEDEF unsigned wchar_t;
++#endif
++#endif
++
++TYPEDEF float float_t;
++TYPEDEF double double_t;
++
++TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
++
++TYPEDEF long time_t;
++TYPEDEF long suseconds_t;
++
++TYPEDEF struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t;
++TYPEDEF struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t;
++TYPEDEF struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t;
++TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t;
++TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t;
++TYPEDEF struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t;
++TYPEDEF struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t;
+diff --git a/arch/xtensa/bits/endian.h b/arch/xtensa/bits/endian.h
+new file mode 100644
+index 0000000..d719907
+--- /dev/null
++++ b/arch/xtensa/bits/endian.h
+@@ -0,0 +1,7 @@
++#if __XTENSA_EB__
++#define __BYTE_ORDER __BIG_ENDIAN
++#elif __XTENSA_EL__
++#define __BYTE_ORDER __LITTLE_ENDIAN
++#else
++#error Unknown endianness
++#endif
+diff --git a/arch/xtensa/bits/float.h b/arch/xtensa/bits/float.h
+new file mode 100644
+index 0000000..c4a655e
+--- /dev/null
++++ b/arch/xtensa/bits/float.h
+@@ -0,0 +1,16 @@
++#define FLT_EVAL_METHOD 0
++
++#define LDBL_TRUE_MIN 4.94065645841246544177e-324L
++#define LDBL_MIN 2.22507385850720138309e-308L
++#define LDBL_MAX 1.79769313486231570815e+308L
++#define LDBL_EPSILON 2.22044604925031308085e-16L
++
++#define LDBL_MANT_DIG 53
++#define LDBL_MIN_EXP (-1021)
++#define LDBL_MAX_EXP 1024
++
++#define LDBL_DIG 15
++#define LDBL_MIN_10_EXP (-307)
++#define LDBL_MAX_10_EXP 308
++
++#define DECIMAL_DIG 17
+diff --git a/arch/xtensa/bits/ioctl.h b/arch/xtensa/bits/ioctl.h
+new file mode 100644
+index 0000000..e1ab80e
+--- /dev/null
++++ b/arch/xtensa/bits/ioctl.h
+@@ -0,0 +1,227 @@
++#define _IOC(a,b,c,d) ( ((a)<<30) | ((b)<<8) | (c) | ((d)<<16) )
++#define _IOC_NONE 0U
++#define _IOC_READ 2U
++#define _IOC_WRITE 1U
++
++#define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0)
++#define _IOW(a,b,c) _IOC(_IOC_WRITE,(a),(b),sizeof(c))
++#define _IOR(a,b,c) _IOC(_IOC_READ,(a),(b),sizeof(c))
++#define _IOWR(a,b,c) _IOC(_IOC_READ|_IOC_WRITE,(a),(b),sizeof(c))
++
++#define FIOCLEX _IO('f', 1)
++#define FIONCLEX _IO('f', 2)
++#define FIOASYNC _IOW('f', 125, int)
++#define FIONBIO _IOW('f', 126, int)
++#define FIONREAD _IOR('f', 127, int)
++#define TIOCINQ FIONREAD
++#define FIOQSIZE _IOR('f', 128, loff_t)
++
++#define TCGETS 0x5401
++#define TCSETS 0x5402
++#define TCSETSW 0x5403
++#define TCSETSF 0x5404
++
++#define TCGETA 0x80127417 /* _IOR('t', 23, struct termio) */
++#define TCSETA 0x40127418 /* _IOW('t', 24, struct termio) */
++#define TCSETAW 0x40127419 /* _IOW('t', 25, struct termio) */
++#define TCSETAF 0x4012741C /* _IOW('t', 28, struct termio) */
++
++#define TCSBRK _IO('t', 29)
++#define TCXONC _IO('t', 30)
++#define TCFLSH _IO('t', 31)
++
++#define TIOCSWINSZ 0x40087467 /* _IOW('t', 103, struct winsize) */
++#define TIOCGWINSZ 0x80087468 /* _IOR('t', 104, struct winsize) */
++#define TIOCSTART _IO('t', 110) /* start output, like ^Q */
++#define TIOCSTOP _IO('t', 111) /* stop output, like ^S */
++#define TIOCOUTQ _IOR('t', 115, int) /* output queue size */
++
++#define TIOCSPGRP _IOW('t', 118, int)
++#define TIOCGPGRP _IOR('t', 119, int)
++
++#define TIOCEXCL _IO('T', 12)
++#define TIOCNXCL _IO('T', 13)
++#define TIOCSCTTY _IO('T', 14)
++
++#define TIOCSTI _IOW('T', 18, char)
++#define TIOCMGET _IOR('T', 21, unsigned int)
++#define TIOCMBIS _IOW('T', 22, unsigned int)
++#define TIOCMBIC _IOW('T', 23, unsigned int)
++#define TIOCMSET _IOW('T', 24, unsigned int)
++# define TIOCM_LE 0x001
++# define TIOCM_DTR 0x002
++# define TIOCM_RTS 0x004
++# define TIOCM_ST 0x008
++# define TIOCM_SR 0x010
++# define TIOCM_CTS 0x020
++# define TIOCM_CAR 0x040
++# define TIOCM_RNG 0x080
++# define TIOCM_DSR 0x100
++# define TIOCM_CD TIOCM_CAR
++# define TIOCM_RI TIOCM_RNG
++
++#define TIOCGSOFTCAR _IOR('T', 25, unsigned int)
++#define TIOCSSOFTCAR _IOW('T', 26, unsigned int)
++#define TIOCLINUX _IOW('T', 28, char)
++#define TIOCCONS _IO('T', 29)
++#define TIOCGSERIAL 0x803C541E /*_IOR('T', 30, struct serial_struct)*/
++#define TIOCSSERIAL 0x403C541F /*_IOW('T', 31, struct serial_struct)*/
++#define TIOCPKT _IOW('T', 32, int)
++# define TIOCPKT_DATA 0
++# define TIOCPKT_FLUSHREAD 1
++# define TIOCPKT_FLUSHWRITE 2
++# define TIOCPKT_STOP 4
++# define TIOCPKT_START 8
++# define TIOCPKT_NOSTOP 16
++# define TIOCPKT_DOSTOP 32
++# define TIOCPKT_IOCTL 64
++
++
++#define TIOCNOTTY _IO('T', 34)
++#define TIOCSETD _IOW('T', 35, int)
++#define TIOCGETD _IOR('T', 36, int)
++#define TCSBRKP _IOW('T', 37, int) /* Needed for POSIX tcsendbreak()*/
++#define TIOCSBRK _IO('T', 39) /* BSD compatibility */
++#define TIOCCBRK _IO('T', 40) /* BSD compatibility */
++#define TIOCGSID _IOR('T', 41, pid_t) /* Return the session ID of FD*/
++#define TCGETS2 _IOR('T', 42, struct termios2)
++#define TCSETS2 _IOW('T', 43, struct termios2)
++#define TCSETSW2 _IOW('T', 44, struct termios2)
++#define TCSETSF2 _IOW('T', 45, struct termios2)
++#define TIOCGRS485 _IOR('T', 46, struct serial_rs485)
++#define TIOCSRS485 _IOWR('T', 47, struct serial_rs485)
++#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
++#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
++#define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
++#define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */
++#define TIOCVHANGUP _IO('T', 0x37)
++#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
++#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
++#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
++
++#define TIOCSERCONFIG _IO('T', 83)
++#define TIOCSERGWILD _IOR('T', 84, int)
++#define TIOCSERSWILD _IOW('T', 85, int)
++#define TIOCGLCKTRMIOS 0x5456
++#define TIOCSLCKTRMIOS 0x5457
++#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
++#define TIOCSERGETLSR _IOR('T', 89, unsigned int) /* Get line status reg. */
++ /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
++# define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
++#define TIOCSERGETMULTI 0x80a8545a /* Get multiport config */
++ /* _IOR('T', 90, struct serial_multiport_struct) */
++#define TIOCSERSETMULTI 0x40a8545b /* Set multiport config */
++ /* _IOW('T', 91, struct serial_multiport_struct) */
++
++#define TIOCMIWAIT _IO('T', 92) /* wait for a change on serial input line(s) */
++#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
++
++struct winsize {
++ unsigned short ws_row;
++ unsigned short ws_col;
++ unsigned short ws_xpixel;
++ unsigned short ws_ypixel;
++};
++
++#define TIOCM_LE 0x001
++#define TIOCM_DTR 0x002
++#define TIOCM_RTS 0x004
++#define TIOCM_ST 0x008
++#define TIOCM_SR 0x010
++#define TIOCM_CTS 0x020
++#define TIOCM_CAR 0x040
++#define TIOCM_RNG 0x080
++#define TIOCM_DSR 0x100
++#define TIOCM_CD TIOCM_CAR
++#define TIOCM_RI TIOCM_RNG
++#define TIOCM_OUT1 0x2000
++#define TIOCM_OUT2 0x4000
++#define TIOCM_LOOP 0x8000
++#define TIOCM_MODEM_BITS TIOCM_OUT2
++
++#define N_TTY 0
++#define N_SLIP 1
++#define N_MOUSE 2
++#define N_PPP 3
++#define N_STRIP 4
++#define N_AX25 5
++#define N_X25 6
++#define N_6PACK 7
++#define N_MASC 8
++#define N_R3964 9
++#define N_PROFIBUS_FDL 10
++#define N_IRDA 11
++#define N_SMSBLOCK 12
++#define N_HDLC 13
++#define N_SYNC_PPP 14
++#define N_HCI 15
++
++#define FIOGETOWN _IOR('f', 123, int)
++#define FIOSETOWN _IOW('f', 124, int)
++#define SIOCATMARK _IOR('s', 7, int)
++#define SIOCSPGRP _IOW('s', 8, pid_t)
++#define SIOCGPGRP _IOR('s', 9, pid_t)
++#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */
++#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */
++
++#define SIOCADDRT 0x890B
++#define SIOCDELRT 0x890C
++#define SIOCRTMSG 0x890D
++
++#define SIOCGIFNAME 0x8910
++#define SIOCSIFLINK 0x8911
++#define SIOCGIFCONF 0x8912
++#define SIOCGIFFLAGS 0x8913
++#define SIOCSIFFLAGS 0x8914
++#define SIOCGIFADDR 0x8915
++#define SIOCSIFADDR 0x8916
++#define SIOCGIFDSTADDR 0x8917
++#define SIOCSIFDSTADDR 0x8918
++#define SIOCGIFBRDADDR 0x8919
++#define SIOCSIFBRDADDR 0x891a
++#define SIOCGIFNETMASK 0x891b
++#define SIOCSIFNETMASK 0x891c
++#define SIOCGIFMETRIC 0x891d
++#define SIOCSIFMETRIC 0x891e
++#define SIOCGIFMEM 0x891f
++#define SIOCSIFMEM 0x8920
++#define SIOCGIFMTU 0x8921
++#define SIOCSIFMTU 0x8922
++#define SIOCSIFHWADDR 0x8924
++#define SIOCGIFENCAP 0x8925
++#define SIOCSIFENCAP 0x8926
++#define SIOCGIFHWADDR 0x8927
++#define SIOCGIFSLAVE 0x8929
++#define SIOCSIFSLAVE 0x8930
++#define SIOCADDMULTI 0x8931
++#define SIOCDELMULTI 0x8932
++#define SIOCGIFINDEX 0x8933
++#define SIOGIFINDEX SIOCGIFINDEX
++#define SIOCSIFPFLAGS 0x8934
++#define SIOCGIFPFLAGS 0x8935
++#define SIOCDIFADDR 0x8936
++#define SIOCSIFHWBROADCAST 0x8937
++#define SIOCGIFCOUNT 0x8938
++
++#define SIOCGIFBR 0x8940
++#define SIOCSIFBR 0x8941
++
++#define SIOCGIFTXQLEN 0x8942
++#define SIOCSIFTXQLEN 0x8943
++
++#define SIOCDARP 0x8953
++#define SIOCGARP 0x8954
++#define SIOCSARP 0x8955
++
++#define SIOCDRARP 0x8960
++#define SIOCGRARP 0x8961
++#define SIOCSRARP 0x8962
++
++#define SIOCGIFMAP 0x8970
++#define SIOCSIFMAP 0x8971
++
++#define SIOCADDDLCI 0x8980
++#define SIOCDELDLCI 0x8981
++
++#define SIOCDEVPRIVATE 0x89F0
++#define SIOCPROTOPRIVATE 0x89E0
+diff --git a/arch/xtensa/bits/limits.h b/arch/xtensa/bits/limits.h
+new file mode 100644
+index 0000000..fbc6d23
+--- /dev/null
++++ b/arch/xtensa/bits/limits.h
+@@ -0,0 +1,7 @@
++#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
++ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
++#define LONG_BIT 32
++#endif
++
++#define LONG_MAX 0x7fffffffL
++#define LLONG_MAX 0x7fffffffffffffffLL
+diff --git a/arch/xtensa/bits/mman.h b/arch/xtensa/bits/mman.h
+new file mode 100644
+index 0000000..3125fc2
+--- /dev/null
++++ b/arch/xtensa/bits/mman.h
+@@ -0,0 +1,57 @@
++#define MAP_FAILED ((void *) -1)
++
++#define PROT_NONE 0
++#define PROT_READ 1
++#define PROT_WRITE 2
++#define PROT_EXEC 4
++#define PROT_GROWSDOWN 0x01000000
++#define PROT_GROWSUP 0x02000000
++
++#define MAP_SHARED 0x01
++#define MAP_PRIVATE 0x02
++#define MAP_FIXED 0x10
++
++#define MAP_TYPE 0x0f
++#define MAP_FILE 0x00
++#define MAP_ANON 0x800
++#define MAP_ANONYMOUS MAP_ANON
++#define MAP_NORESERVE 0x0400
++#define MAP_GROWSDOWN 0x1000
++#define MAP_DENYWRITE 0x2000
++#define MAP_EXECUTABLE 0x4000
++#define MAP_LOCKED 0x8000
++#define MAP_POPULATE 0x10000
++#define MAP_NONBLOCK 0x20000
++#define MAP_STACK 0x40000
++#define MAP_HUGETLB 0x80000
++
++#define POSIX_MADV_NORMAL 0
++#define POSIX_MADV_RANDOM 1
++#define POSIX_MADV_SEQUENTIAL 2
++#define POSIX_MADV_WILLNEED 3
++#define POSIX_MADV_DONTNEED 0
++
++#define MS_ASYNC 1
++#define MS_INVALIDATE 2
++#define MS_SYNC 4
++
++#define MCL_CURRENT 1
++#define MCL_FUTURE 2
++
++#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
++#define MADV_NORMAL 0
++#define MADV_RANDOM 1
++#define MADV_SEQUENTIAL 2
++#define MADV_WILLNEED 3
++#define MADV_DONTNEED 4
++#define MADV_REMOVE 9
++#define MADV_DONTFORK 10
++#define MADV_DOFORK 11
++#define MADV_MERGEABLE 12
++#define MADV_UNMERGEABLE 13
++#define MADV_HUGEPAGE 14
++#define MADV_NOHUGEPAGE 15
++#define MADV_DONTDUMP 16
++#define MADV_DODUMP 17
++#define MADV_HWPOISON 100
++#endif
+diff --git a/arch/xtensa/bits/posix.h b/arch/xtensa/bits/posix.h
+new file mode 100644
+index 0000000..30a3871
+--- /dev/null
++++ b/arch/xtensa/bits/posix.h
+@@ -0,0 +1,2 @@
++#define _POSIX_V6_ILP32_OFFBIG 1
++#define _POSIX_V7_ILP32_OFFBIG 1
+diff --git a/arch/xtensa/bits/reg.h b/arch/xtensa/bits/reg.h
+new file mode 100644
+index 0000000..0192a29
+--- /dev/null
++++ b/arch/xtensa/bits/reg.h
+@@ -0,0 +1,2 @@
++#undef __WORDSIZE
++#define __WORDSIZE 32
+diff --git a/arch/xtensa/bits/setjmp.h b/arch/xtensa/bits/setjmp.h
+new file mode 100644
+index 0000000..b2bd974
+--- /dev/null
++++ b/arch/xtensa/bits/setjmp.h
+@@ -0,0 +1 @@
++typedef unsigned long __jmp_buf[18];
+diff --git a/arch/xtensa/bits/signal.h b/arch/xtensa/bits/signal.h
+new file mode 100644
+index 0000000..545ffd3
+--- /dev/null
++++ b/arch/xtensa/bits/signal.h
+@@ -0,0 +1,88 @@
++#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
++
++typedef struct sigcontext
++{
++ unsigned long sc_pc;
++ unsigned long sc_ps;
++ unsigned long sc_lbeg;
++ unsigned long sc_lend;
++ unsigned long sc_lcount;
++ unsigned long sc_sar;
++ unsigned long sc_acclo;
++ unsigned long sc_acchi;
++ unsigned long sc_a[16];
++ void *sc_xtregs;
++} mcontext_t;
++
++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;
++} ucontext_t;
++
++#define SA_NOCLDSTOP 0x00000001
++#define SA_NOCLDWAIT 0x00000002 /* not supported yet */
++#define SA_SIGINFO 0x00000004
++#define SA_ONSTACK 0x08000000
++#define SA_RESTART 0x10000000
++#define SA_NODEFER 0x40000000
++#define SA_RESETHAND 0x80000000
++
++#define SA_NOMASK SA_NODEFER
++#define SA_ONESHOT SA_RESETHAND
++
++#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 6
++#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 SIGIO
++/* #define SIGLOST 29 */
++#define SIGPWR 30
++#define SIGSYS 31
++#define SIGUNUSED 31
++
++#define _NSIG 64
+diff --git a/arch/xtensa/bits/stat.h b/arch/xtensa/bits/stat.h
+new file mode 100644
+index 0000000..24231f8
+--- /dev/null
++++ b/arch/xtensa/bits/stat.h
+@@ -0,0 +1,21 @@
++/* 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;
++ mode_t st_mode;
++ nlink_t st_nlink;
++ uid_t st_uid;
++ gid_t st_gid;
++ dev_t st_rdev;
++ off_t st_size;
++ blksize_t st_blksize;
++ long __st_padding1;
++ blkcnt_t st_blocks;
++ struct timespec st_atim;
++ struct timespec st_mtim;
++ struct timespec st_ctim;
++ long __st_padding2[2];
++};
+diff --git a/arch/xtensa/bits/stdint.h b/arch/xtensa/bits/stdint.h
+new file mode 100644
+index 0000000..d1b2712
+--- /dev/null
++++ b/arch/xtensa/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/arch/xtensa/bits/syscall.h b/arch/xtensa/bits/syscall.h
+new file mode 100644
+index 0000000..df8c2ab
+--- /dev/null
++++ b/arch/xtensa/bits/syscall.h
+@@ -0,0 +1,679 @@
++#define __NR_spill 0
++#define __NR_xtensa 1
++#define __NR_available4 2
++#define __NR_available5 3
++#define __NR_available6 4
++#define __NR_available7 5
++#define __NR_available8 6
++#define __NR_available9 7
++#define __NR_open 8
++#define __NR_close 9
++#define __NR_dup 10
++#define __NR_dup2 11
++#define __NR_read 12
++#define __NR_write 13
++#define __NR_select 14
++#define __NR_lseek 15
++#define __NR_poll 16
++#define __NR__llseek 17
++#define __NR_epoll_wait 18
++#define __NR_epoll_ctl 19
++#define __NR_epoll_create 20
++#define __NR_creat 21
++#define __NR_truncate 22
++#define __NR_ftruncate 23
++#define __NR_readv 24
++#define __NR_writev 25
++#define __NR_fsync 26
++#define __NR_fdatasync 27
++#define __NR_truncate64 28
++#define __NR_ftruncate64 29
++#define __NR_pread64 30
++#define __NR_pwrite64 31
++#define __NR_link 32
++#define __NR_rename 33
++#define __NR_symlink 34
++#define __NR_readlink 35
++#define __NR_mknod 36
++#define __NR_pipe 37
++#define __NR_unlink 38
++#define __NR_rmdir 39
++#define __NR_mkdir 40
++#define __NR_chdir 41
++#define __NR_fchdir 42
++#define __NR_getcwd 43
++#define __NR_chmod 44
++#define __NR_chown 45
++#define __NR_stat 46
++#define __NR_stat64 47
++#define __NR_lchown 48
++#define __NR_lstat 49
++#define __NR_lstat64 50
++#define __NR_available51 51
++#define __NR_fchmod 52
++#define __NR_fchown 53
++#define __NR_fstat 54
++#define __NR_fstat64 55
++#define __NR_flock 56
++#define __NR_access 57
++#define __NR_umask 58
++#define __NR_getdents 59
++#define __NR_getdents64 60
++#define __NR_fcntl64 61
++#define __NR_fallocate 62
++#define __NR_fadvise64_64 63
++#define __NR_utime 64 /* glibc 2.3.3 ?? */
++#define __NR_utimes 65
++#define __NR_ioctl 66
++#define __NR_fcntl 67
++#define __NR_setxattr 68
++#define __NR_getxattr 69
++#define __NR_listxattr 70
++#define __NR_removexattr 71
++#define __NR_lsetxattr 72
++#define __NR_lgetxattr 73
++#define __NR_llistxattr 74
++#define __NR_lremovexattr 75
++#define __NR_fsetxattr 76
++#define __NR_fgetxattr 77
++#define __NR_flistxattr 78
++#define __NR_fremovexattr 79
++#define __NR_mmap2 80
++#define __NR_munmap 81
++#define __NR_mprotect 82
++#define __NR_brk 83
++#define __NR_mlock 84
++#define __NR_munlock 85
++#define __NR_mlockall 86
++#define __NR_munlockall 87
++#define __NR_mremap 88
++#define __NR_msync 89
++#define __NR_mincore 90
++#define __NR_madvise 91
++#define __NR_shmget 92
++#define __NR_shmat 93
++#define __NR_shmctl 94
++#define __NR_shmdt 95
++#define __NR_socket 96
++#define __NR_setsockopt 97
++#define __NR_getsockopt 98
++#define __NR_shutdown 99
++#define __NR_bind 100
++#define __NR_connect 101
++#define __NR_listen 102
++#define __NR_accept 103
++#define __NR_getsockname 104
++#define __NR_getpeername 105
++#define __NR_sendmsg 106
++#define __NR_recvmsg 107
++#define __NR_send 108
++#define __NR_recv 109
++#define __NR_sendto 110
++#define __NR_recvfrom 111
++#define __NR_socketpair 112
++#define __NR_sendfile 113
++#define __NR_sendfile64 114
++#define __NR_sendmmsg 115
++#define __NR_clone 116
++#define __NR_execve 117
++#define __NR_exit 118
++#define __NR_exit_group 119
++#define __NR_getpid 120
++#define __NR_wait4 121
++#define __NR_waitid 122
++#define __NR_kill 123
++#define __NR_tkill 124
++#define __NR_tgkill 125
++#define __NR_set_tid_address 126
++#define __NR_gettid 127
++#define __NR_setsid 128
++#define __NR_getsid 129
++#define __NR_prctl 130
++#define __NR_personality 131
++#define __NR_getpriority 132
++#define __NR_setpriority 133
++#define __NR_setitimer 134
++#define __NR_getitimer 135
++#define __NR_setuid 136
++#define __NR_getuid 137
++#define __NR_setgid 138
++#define __NR_getgid 139
++#define __NR_geteuid 140
++#define __NR_getegid 141
++#define __NR_setreuid 142
++#define __NR_setregid 143
++#define __NR_setresuid 144
++#define __NR_getresuid 145
++#define __NR_setresgid 146
++#define __NR_getresgid 147
++#define __NR_setpgid 148
++#define __NR_getpgid 149
++#define __NR_getppid 150
++#define __NR_getpgrp 151
++#define __NR_reserved152 152 /* set_thread_area */
++#define __NR_reserved153 153 /* get_thread_area */
++#define __NR_times 154
++#define __NR_acct 155
++#define __NR_sched_setaffinity 156
++#define __NR_sched_getaffinity 157
++#define __NR_capget 158
++#define __NR_capset 159
++#define __NR_ptrace 160
++#define __NR_semtimedop 161
++#define __NR_semget 162
++#define __NR_semop 163
++#define __NR_semctl 164
++#define __NR_available165 165
++#define __NR_msgget 166
++#define __NR_msgsnd 167
++#define __NR_msgrcv 168
++#define __NR_msgctl 169
++#define __NR_available170 170
++#define __NR_umount2 171
++#define __NR_mount 172
++#define __NR_swapon 173
++#define __NR_chroot 174
++#define __NR_pivot_root 175
++#define __NR_umount 176
++#define __NR_swapoff 177
++#define __NR_sync 178
++#define __NR_syncfs 179
++#define __NR_setfsuid 180
++#define __NR_setfsgid 181
++#define __NR_sysfs 182
++#define __NR_ustat 183
++#define __NR_statfs 184
++#define __NR_fstatfs 185
++#define __NR_statfs64 186
++#define __NR_fstatfs64 187
++#define __NR_setrlimit 188
++#define __NR_getrlimit 189
++#define __NR_getrusage 190
++#define __NR_futex 191
++#define __NR_gettimeofday 192
++#define __NR_settimeofday 193
++#define __NR_adjtimex 194
++#define __NR_nanosleep 195
++#define __NR_getgroups 196
++#define __NR_setgroups 197
++#define __NR_sethostname 198
++#define __NR_setdomainname 199
++#define __NR_syslog 200
++#define __NR_vhangup 201
++#define __NR_uselib 202
++#define __NR_reboot 203
++#define __NR_quotactl 204
++#define __NR_nfsservctl 205
++#define __NR__sysctl 206
++#define __NR_bdflush 207
++#define __NR_uname 208
++#define __NR_sysinfo 209
++#define __NR_init_module 210
++#define __NR_delete_module 211
++#define __NR_sched_setparam 212
++#define __NR_sched_getparam 213
++#define __NR_sched_setscheduler 214
++#define __NR_sched_getscheduler 215
++#define __NR_sched_get_priority_max 216
++#define __NR_sched_get_priority_min 217
++#define __NR_sched_rr_get_interval 218
++#define __NR_sched_yield 219
++#define __NR_available222 222
++#define __NR_restart_syscall 223
++#define __NR_sigaltstack 224
++#define __NR_rt_sigreturn 225
++#define __NR_rt_sigaction 226
++#define __NR_rt_sigprocmask 227
++#define __NR_rt_sigpending 228
++#define __NR_rt_sigtimedwait 229
++#define __NR_rt_sigqueueinfo 230
++#define __NR_rt_sigsuspend 231
++#define __NR_mq_open 232
++#define __NR_mq_unlink 233
++#define __NR_mq_timedsend 234
++#define __NR_mq_timedreceive 235
++#define __NR_mq_notify 236
++#define __NR_mq_getsetattr 237
++#define __NR_available238 238
++#define __NR_io_setup 239
++#define __NR_io_destroy 240
++#define __NR_io_submit 241
++#define __NR_io_getevents 242
++#define __NR_io_cancel 243
++#define __NR_clock_settime 244
++#define __NR_clock_gettime 245
++#define __NR_clock_getres 246
++#define __NR_clock_nanosleep 247
++#define __NR_timer_create 248
++#define __NR_timer_delete 249
++#define __NR_timer_settime 250
++#define __NR_timer_gettime 251
++#define __NR_timer_getoverrun 252
++#define __NR_reserved253 253
++#define __NR_lookup_dcookie 254
++#define __NR_available255 255
++#define __NR_add_key 256
++#define __NR_request_key 257
++#define __NR_keyctl 258
++#define __NR_available259 259
++#define __NR_readahead 260
++#define __NR_remap_file_pages 261
++#define __NR_migrate_pages 262
++#define __NR_mbind 263
++#define __NR_get_mempolicy 264
++#define __NR_set_mempolicy 265
++#define __NR_unshare 266
++#define __NR_move_pages 267
++#define __NR_splice 268
++#define __NR_tee 269
++#define __NR_vmsplice 270
++#define __NR_available271 271
++#define __NR_pselect6 272
++#define __NR_ppoll 273
++#define __NR_epoll_pwait 274
++#define __NR_epoll_create1 275
++#define __NR_inotify_init 276
++#define __NR_inotify_add_watch 277
++#define __NR_inotify_rm_watch 278
++#define __NR_inotify_init1 279
++#define __NR_getcpu 280
++#define __NR_kexec_load 281
++#define __NR_ioprio_set 282
++#define __NR_ioprio_get 283
++#define __NR_set_robust_list 284
++#define __NR_get_robust_list 285
++#define __NR_available286 286
++#define __NR_available287 287
++#define __NR_openat 288
++#define __NR_mkdirat 289
++#define __NR_mknodat 290
++#define __NR_unlinkat 291
++#define __NR_renameat 292
++#define __NR_linkat 293
++#define __NR_symlinkat 294
++#define __NR_readlinkat 295
++#define __NR_utimensat 296
++#define __NR_fchownat 297
++#define __NR_futimesat 298
++#define __NR_fstatat64 299
++#define __NR_fchmodat 300
++#define __NR_faccessat 301
++#define __NR_available302 302
++#define __NR_available303 303
++#define __NR_signalfd 304
++#define __NR_eventfd 306
++#define __NR_recvmmsg 307
++#define __NR_setns 308
++#define __NR_signalfd4 309
++#define __NR_dup3 310
++#define __NR_pipe2 311
++#define __NR_timerfd_create 312
++#define __NR_timerfd_settime 313
++#define __NR_timerfd_gettime 314
++#define __NR_available315 315
++#define __NR_eventfd2 316
++#define __NR_preadv 317
++#define __NR_pwritev 318
++#define __NR_available319 319
++#define __NR_fanotify_init 320
++#define __NR_fanotify_mark 321
++#define __NR_process_vm_readv 322
++#define __NR_process_vm_writev 323
++#define __NR_name_to_handle_at 324
++#define __NR_open_by_handle_at 325
++#define __NR_sync_file_range2 326
++#define __NR_perf_event_open 327
++#define __NR_rt_tgsigqueueinfo 328
++#define __NR_clock_adjtime 329
++#define __NR_prlimit64 330
++#define __NR_kcmp 331
++#define __NR_finit_module 332
++#define __NR_accept4 333
++#define __NR_sched_setattr 334
++#define __NR_sched_getattr 335
++#define __NR_renameat2 336
++#define __NR_seccomp 337
++#define __NR_getrandom 338
++#define __NR_memfd_create 339
++#define __NR_bpf 340
++#define __NR_execveat 341
++
++#define SYS_spill 0
++#define SYS_xtensa 1
++#define SYS_available4 2
++#define SYS_available5 3
++#define SYS_available6 4
++#define SYS_available7 5
++#define SYS_available8 6
++#define SYS_available9 7
++#define SYS_open 8
++#define SYS_close 9
++#define SYS_dup 10
++#define SYS_dup2 11
++#define SYS_read 12
++#define SYS_write 13
++#define SYS_select 14
++#define SYS_lseek 15
++#define SYS_poll 16
++#define SYS__llseek 17
++#define SYS_epoll_wait 18
++#define SYS_epoll_ctl 19
++#define SYS_epoll_create 20
++#define SYS_creat 21
++#define SYS_truncate 22
++#define SYS_ftruncate 23
++#define SYS_readv 24
++#define SYS_writev 25
++#define SYS_fsync 26
++#define SYS_fdatasync 27
++#define SYS_truncate64 28
++#define SYS_ftruncate64 29
++#define SYS_pread64 30
++#define SYS_pwrite64 31
++#define SYS_link 32</