diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2016-11-25 20:59:04 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2016-11-25 20:59:24 +0100 |
commit | 6c89f848df14f4c038079854feb6578c9728fdea (patch) | |
tree | 2aa9cbaa08a65e88dfd2e4808fcb4e9a3fd4a0e2 /toolchain/musl | |
parent | b0f23d1e562e753cb78a473fdade956a25cc337b (diff) |
musl: add s390 hotfix from #musl, remove old xtensa patch
Diffstat (limited to 'toolchain/musl')
-rw-r--r-- | toolchain/musl/patches/1.1.14/musl.xtensa | 2429 | ||||
-rw-r--r-- | toolchain/musl/patches/git/s390-hotfix.patch | 25 |
2 files changed, 25 insertions, 2429 deletions
diff --git a/toolchain/musl/patches/1.1.14/musl.xtensa b/toolchain/musl/patches/1.1.14/musl.xtensa deleted file mode 100644 index dbb25ebc6..000000000 --- a/toolchain/musl/patches/1.1.14/musl.xtensa +++ /dev/null @@ -1,2429 +0,0 @@ -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 -+#define SYS_rename 33 -+#define SYS_symlink 34 -+#define SYS_readlink 35 -+#define SYS_mknod 36 -+#define SYS_pipe 37 -+#define SYS_unlink 38 -+#define SYS_rmdir 39 -+#define SYS_mkdir 40 -+#define SYS_chdir 41 -+#define SYS_fchdir 42 -+#define SYS_getcwd 43 -+#define SYS_chmod 44 -+#define SYS_chown 45 -+#define SYS_stat 46 -+#define SYS_stat64 47 -+#define SYS_lchown 48 -+#define SYS_lstat 49 -+#define SYS_lstat64 50 -+#define SYS_available51 51 -+#define SYS_fchmod 52 -+#define SYS_fchown 53 -+#define SYS_fstat 54 -+#define SYS_fstat64 55 -+#define SYS_flock 56 -+#define SYS_access 57 -+#define SYS_umask 58 -+#define SYS_getdents 59 -+#define SYS_getdents64 60 -+#define SYS_fcntl64 61 -+#define SYS_fallocate 62 -+#define SYS_fadvise64_64 63 -+#define SYS_utime 64 /* glibc 2.3.3 ?? */ -+#define SYS_utimes 65 -+#define SYS_ioctl 66 -+#define SYS_fcntl 67 -+#define SYS_setxattr 68 -+#define SYS_getxattr 69 -+#define SYS_listxattr 70 -+#define SYS_removexattr 71 -+#define SYS_lsetxattr 72 -+#define SYS_lgetxattr 73 -+#define SYS_llistxattr 74 -+#define SYS_lremovexattr 75 -+#define SYS_fsetxattr 76 -+#define SYS_fgetxattr 77 -+#define SYS_flistxattr 78 -+#define SYS_fremovexattr 79 -+#define SYS_mmap2 80 -+#define SYS_munmap 81 -+#define SYS_mprotect 82 -+#define SYS_brk 83 -+#define SYS_mlock 84 -+#define SYS_munlock 85 -+#define SYS_mlockall 86 -+#define SYS_munlockall 87 -+#define SYS_mremap 88 -+#define SYS_msync 89 -+#define SYS_mincore 90 -+#define SYS_madvise 91 -+#define SYS_shmget 92 -+#define SYS_shmat 93 -+#define SYS_shmctl 94 -+#define SYS_shmdt 95 -+#define SYS_socket 96 -+#define SYS_setsockopt 97 -+#define SYS_getsockopt 98 -+#define SYS_shutdown 99 -+#define SYS_bind 100 -+#define SYS_connect 101 -+#define SYS_listen 102 -+#define SYS_accept 103 -+#define SYS_getsockname 104 -+#define SYS_getpeername 105 -+#define SYS_sendmsg 106 -+#define SYS_recvmsg 107 -+#define SYS_send 108 -+#define SYS_recv 109 -+#define SYS_sendto 110 -+#define SYS_recvfrom 111 -+#define SYS_socketpair 112 -+#define SYS_sendfile 113 -+#define SYS_sendfile64 114 -+#define SYS_sendmmsg 115 -+#define SYS_clone 116 -+#define SYS_execve 117 -+#define SYS_exit 118 -+#define SYS_exit_group 119 -+#define SYS_getpid 120 -+#define SYS_wait4 121 -+#define SYS_waitid 122 -+#define SYS_kill 123 -+#define SYS_tkill 124 -+#define SYS_tgkill 125 -+#define SYS_set_tid_address 126 -+#define SYS_gettid 127 -+#define SYS_setsid 128 -+#define SYS_getsid 129 -+#define SYS_prctl 130 -+#define SYS_personality 131 -+#define SYS_getpriority 132 -+#define SYS_setpriority 133 -+#define SYS_setitimer 134 -+#define SYS_getitimer 135 -+#define SYS_setuid 136 -+#define SYS_getuid 137 -+#define SYS_setgid 138 -+#define SYS_getgid 139 -+#define SYS_geteuid 140 -+#define SYS_getegid 141 -+#define SYS_setreuid 142 -+#define SYS_setregid 143 -+#define SYS_setresuid 144 -+#define SYS_getresuid 145 -+#define SYS_setresgid 146 -+#define SYS_getresgid 147 -+#define SYS_setpgid 148 -+#define SYS_getpgid 149 -+#define SYS_getppid 150 -+#define SYS_getpgrp 151 -+#define SYS_reserved152 152 /* set_thread_area */ -+#define SYS_reserved153 153 /* get_thread_area */ -+#define SYS_times 154 -+#define SYS_acct 155 -+#define SYS_sched_setaffinity 156 -+#define SYS_sched_getaffinity 157 -+#define SYS_capget 158 -+#define SYS_capset 159 -+#define SYS_ptrace 160 -+#define SYS_semtimedop 161 -+#define SYS_semget 162 -+#define SYS_semop 163 -+#define SYS_semctl 164 -+#define SYS_available165 165 -+#define SYS_msgget 166 -+#define SYS_msgsnd 167 -+#define SYS_msgrcv 168 -+#define SYS_msgctl 169 -+#define SYS_available170 170 -+#define SYS_umount2 171 -+#define SYS_mount 172 -+#define SYS_swapon 173 -+#define SYS_chroot 174 -+#define SYS_pivot_root 175 -+#define SYS_umount 176 -+#define SYS_swapoff 177 -+#define SYS_sync 178 -+#define SYS_syncfs 179 -+#define SYS_setfsuid 180 -+#define SYS_setfsgid 181 -+#define SYS_sysfs 182 -+#define SYS_ustat 183 -+#define SYS_statfs 184 -+#define SYS_fstatfs 185 -+#define SYS_statfs64 186 -+#define SYS_fstatfs64 187 -+#define SYS_setrlimit 188 -+#define SYS_getrlimit 189 -+#define SYS_getrusage 190 -+#define SYS_futex 191 -+#define SYS_gettimeofday 192 -+#define SYS_settimeofday 193 -+#define SYS_adjtimex 194 -+#define SYS_nanosleep 195 -+#define SYS_getgroups 196 -+#define SYS_setgroups 197 -+#define SYS_sethostname 198 -+#define SYS_setdomainname 199 -+#define SYS_syslog 200 -+#define SYS_vhangup 201 -+#define SYS_uselib 202 -+#define SYS_reboot 203 -+#define SYS_quotactl 204 -+#define SYS_nfsservctl 205 -+#define SYS__sysctl 206 -+#define SYS_bdflush 207 -+#define SYS_uname 208 -+#define SYS_sysinfo 209 -+#define SYS_init_module 210 -+#define SYS_delete_module 211 -+#define SYS_sched_setparam 212 -+#define SYS_sched_getparam 213 -+#define SYS_sched_setscheduler 214 -+#define SYS_sched_getscheduler 215 -+#define SYS_sched_get_priority_max 216 -+#define SYS_sched_get_priority_min 217 -+#define SYS_sched_rr_get_interval 218 -+#define SYS_sched_yield 219 -+#define SYS_available222 222 -+#define SYS_restart_syscall 223 -+#define SYS_sigaltstack 224 -+#define SYS_rt_sigreturn 225 -+#define SYS_rt_sigaction 226 -+#define SYS_rt_sigprocmask 227 -+#define SYS_rt_sigpending 228 -+#define SYS_rt_sigtimedwait 229 -+#define SYS_rt_sigqueueinfo 230 -+#define SYS_rt_sigsuspend 231 -+#define SYS_mq_open 232 -+#define SYS_mq_unlink 233 -+#define SYS_mq_timedsend 234 -+#define SYS_mq_timedreceive 235 -+#define SYS_mq_notify 236 -+#define SYS_mq_getsetattr 237 -+#define SYS_available238 238 -+#define SYS_io_setup 239 -+#define SYS_io_destroy 240 -+#define SYS_io_submit 241 -+#define SYS_io_getevents 242 -+#define SYS_io_cancel 243 -+#define SYS_clock_settime 244 -+#define SYS_clock_gettime 245 -+#define SYS_clock_getres 246 -+#define SYS_clock_nanosleep 247 -+#define SYS_timer_create 248 -+#define SYS_timer_delete 249 -+#define SYS_timer_settime 250 -+#define SYS_timer_gettime 251 -+#define SYS_timer_getoverrun 252 -+#define SYS_reserved253 253 -+#define SYS_lookup_dcookie 254 -+#define SYS_available255 255 -+#define SYS_add_key 256 -+#define SYS_request_key 257 -+#define SYS_keyctl 258 -+#define SYS_available259 259 -+#define SYS_readahead 260 -+#define SYS_remap_file_pages 261 -+#define SYS_migrate_pages 262 -+#define SYS_mbind 263 -+#define SYS_get_mempolicy 264 -+#define SYS_set_mempolicy 265 -+#define SYS_unshare 266 -+#define SYS_move_pages 267 -+#define SYS_splice 268 -+#define SYS_tee 269 -+#define SYS_vmsplice 270 -+#define SYS_available271 271 -+#define SYS_pselect6 272 -+#define SYS_ppoll 273 -+#define SYS_epoll_pwait 274 -+#define SYS_epoll_create1 275 -+#define SYS_inotify_init 276 -+#define SYS_inotify_add_watch 277 -+#define SYS_inotify_rm_watch 278 -+#define SYS_inotify_init1 279 -+#define SYS_getcpu 280 -+#define SYS_kexec_load 281 -+#define SYS_ioprio_set 282 -+#define SYS_ioprio_get 283 -+#define SYS_set_robust_list 284 -+#define SYS_get_robust_list 285 -+#define SYS_available286 286 -+#define SYS_available287 287 -+#define SYS_openat 288 -+#define SYS_mkdirat 289 -+#define SYS_mknodat 290 -+#define SYS_unlinkat 291 -+#define SYS_renameat 292 -+#define SYS_linkat 293 -+#define SYS_symlinkat 294 -+#define SYS_readlinkat 295 -+#define SYS_utimensat 296 -+#define SYS_fchownat 297 -+#define SYS_futimesat 298 -+#define SYS_fstatat64 299 -+#define SYS_fchmodat 300 -+#define SYS_faccessat 301 -+#define SYS_available302 302 -+#define SYS_available303 303 -+#define SYS_signalfd 304 -+#define SYS_eventfd 306 -+#define SYS_recvmmsg 307 -+#define SYS_setns 308 -+#define SYS_signalfd4 309 -+#define SYS_dup3 310 -+#define SYS_pipe2 311 -+#define SYS_timerfd_create 312 -+#define SYS_timerfd_settime 313 -+#define SYS_timerfd_gettime 314 -+#define SYS_available315 315 -+#define SYS_eventfd2 316 -+#define SYS_preadv 317 -+#define SYS_pwritev 318 -+#define SYS_available319 319 -+#define SYS_fanotify_init 320 -+#define SYS_fanotify_mark 321 -+#define SYS_process_vm_readv 322 -+#define SYS_process_vm_writev 323 -+#define SYS_name_to_handle_at 324 -+#define SYS_open_by_handle_at 325 -+#define SYS_sync_file_range2 326 -+#define SYS_perf_event_open 327 -+#define SYS_rt_tgsigqueueinfo 328 -+#define SYS_clock_adjtime 329 -+#define SYS_prlimit64 330 -+#define SYS_kcmp 331 -+#define SYS_finit_module 332 -+#define SYS_accept4 333 -+#define SYS_sched_setattr 334 -+#define SYS_sched_getattr 335 -+#define SYS_renameat2 336 -+#define SYS_seccomp 337 -+#define SYS_getrandom 338 -+#define SYS_memfd_create 339 -+#define SYS_bpf 340 -+#define SYS_execveat 341 -diff --git a/arch/xtensa/bits/termios.h b/arch/xtensa/bits/termios.h -new file mode 100644 -index 0000000..f1b32e0 ---- /dev/null -+++ b/arch/xtensa/bits/termios.h -@@ -0,0 +1,168 @@ -+struct termios -+{ -+ tcflag_t c_iflag; -+ tcflag_t c_oflag; -+ tcflag_t c_cflag; -+ tcflag_t c_lflag; -+ cc_t c_line; -+ cc_t c_cc[NCCS]; -+ speed_t __c_ispeed; -+ speed_t __c_ospeed; -+}; -+ -+#define VINTR 0 -+#define VQUIT 1 -+#define VERASE 2 -+#define VKILL 3 -+#define VEOF 4 -+#define VTIME 5 -+#define VMIN 6 -+#define VSWTC 7 -+#define VSTART 8 -+#define VSTOP 9 -+#define VSUSP 10 -+#define VEOL 11 -+#define VREPRINT 12 -+#define VDISCARD 13 -+#define VWERASE 14 -+#define VLNEXT 15 -+#define VEOL2 16 -+ -+#define IGNBRK 0000001 -+#define BRKINT 0000002 -+#define IGNPAR 0000004 -+#define PARMRK 0000010 -+#define INPCK 0000020 -+#define ISTRIP 0000040 -+#define INLCR 0000100 -+#define IGNCR 0000200 -+#define ICRNL 0000400 -+#define IUCLC 0001000 -+#define IXON 0002000 -+#define IXANY 0004000 -+#define IXOFF 0010000 -+#define IMAXBEL 0020000 -+#define IUTF8 0040000 -+ -+#define OPOST 0000001 -+#define OLCUC 0000002 -+#define ONLCR 0000004 -+#define OCRNL 0000010 -+#define ONOCR 0000020 -+#define ONLRET 0000040 -+#define OFILL 0000100 -+#define OFDEL 0000200 -+#define NLDLY 0000400 -+#define NL0 0000000 -+#define NL1 0000400 -+#define CRDLY 0003000 -+#define CR0 0000000 -+#define CR1 0001000 -+#define CR2 0002000 -+#define CR3 0003000 -+#define TABDLY 0014000 -+#define TAB0 0000000 -+#define TAB1 0004000 -+#define TAB2 0010000 -+#define TAB3 0014000 -+#define XTABS 0014000 -+#define BSDLY 0020000 -+#define BS0 0000000 -+#define BS1 0020000 -+#define VTDLY 0040000 -+#define VT0 0000000 -+#define VT1 0040000 -+#define FFDLY 0100000 -+#define FF0 0000000 -+#define FF1 0100000 -+ -+#define B0 0000000 -+#define B50 0000001 -+#define B75 0000002 -+#define B110 0000003 -+#define B134 0000004 -+#define B150 0000005 -+#define B200 0000006 -+#define B300 0000007 -+#define B600 0000010 -+#define B1200 0000011 -+#define B1800 0000012 -+#define B2400 0000013 -+#define B4800 0000014 -+#define B9600 0000015 -+#define B19200 0000016 -+#define B38400 0000017 -+#define EXTA 0000016 -+#define EXTB 0000017 -+ -+#define BOTHER 0010000 -+#define B57600 0010001 -+#define B115200 0010002 -+#define B230400 0010003 -+#define B460800 0010004 -+#define B500000 0010005 -+#define B576000 0010006 -+#define B921600 0010007 -+#define B1000000 0010010 -+#define B1152000 0010011 -+#define B1500000 0010012 -+#define B2000000 0010013 -+#define B2500000 0010014 -+#define B3000000 0010015 -+#define B3500000 0010016 -+#define B4000000 0010017 -+ -+#define CBAUD 0010017 -+ -+#define CSIZE 0000060 -+#define CS5 0000000 -+#define CS6 0000020 -+#define CS7 0000040 -+#define CS8 0000060 -+#define CSTOPB 0000100 -+#define CREAD 0000200 -+#define PARENB 0000400 -+#define PARODD 0001000 -+#define HUPCL 0002000 -+#define CLOCAL 0004000 -+ -+#define ISIG 0000001 -+#define ICANON 0000002 -+#define XCASE 0000004 -+#define ECHO 0000010 -+#define ECHOE 0000020 -+#define ECHOK 0000040 -+#define ECHONL 0000100 -+#define NOFLSH 0000200 -+#define TOSTOP 0000400 -+#define ECHOCTL 0001000 -+#define ECHOPRT 0002000 -+#define ECHOKE 0004000 -+#define FLUSHO 0010000 -+#define PENDIN 0040000 -+#define IEXTEN 0100000 -+#define EXTPROC 0200000 -+ -+#define TCOOFF 0 -+#define TCOON 1 -+#define TCIOFF 2 -+#define TCION 3 -+ -+#define TCIFLUSH 0 -+#define TCOFLUSH 1 -+#define TCIOFLUSH 2 -+ -+#define TCSANOW 0 -+#define TCSADRAIN 1 -+#define TCSAFLUSH 2 -+ -+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) -+#define CBAUDEX 0010000 -+#define CIBAUD 002003600000 -+#define IBSHIFT 16 -+#define CMSPAR 010000000000 -+#define CRTSCTS 020000000000 -+#define EXTPROC 0200000 -+#define XTABS 0014000 -+#define TIOCSER_TEMT 1 -+#endif -diff --git a/arch/xtensa/bits/user.h b/arch/xtensa/bits/user.h -new file mode 100644 -index 0000000..8ac7526 ---- /dev/null -+++ b/arch/xtensa/bits/user.h -@@ -0,0 +1,4 @@ -+#define ELF_NGREG 128 -+#define ELF_NFPREG 18 -+typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; -+typedef unsigned int elf_fpreg_t, elf_fpregset_t[ELF_NFPREG]; -diff --git a/arch/xtensa/bits/xtensa-config.h b/arch/xtensa/bits/xtensa-config.h -new file mode 100644 -index 0000000..2e60af9 ---- /dev/null -+++ b/arch/xtensa/bits/xtensa-config.h -@@ -0,0 +1,46 @@ -+/* Xtensa configuration settings. -+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 -+ Free Software Foundation, Inc. -+ Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, see -+ <http://www.gnu.org/licenses/>. */ -+ -+#ifndef XTENSA_CONFIG_H -+#define XTENSA_CONFIG_H -+ -+/* The macros defined here match those with the same names in the Xtensa -+ compile-time HAL (Hardware Abstraction Layer). Please refer to the -+ Xtensa System Software Reference Manual for documentation of these -+ macros. */ -+ -+/* The following macros reflect the default expectations for Xtensa -+ processor configurations that can run glibc. If you want to try -+ building glibc for an Xtensa configuration that is missing these -+ options, you will at least need to change the values of these -+ macros. */ -+ -+#undef XCHAL_HAVE_NSA -+#define XCHAL_HAVE_NSA 1 -+ -+#undef XCHAL_HAVE_LOOPS -+#define XCHAL_HAVE_LOOPS 1 -+ -+/* Assume the maximum number of AR registers. This currently only affects -+ the __window_spill function, and it is always safe to flush extra. */ -+ -+#undef XCHAL_NUM_AREGS -+#define XCHAL_NUM_AREGS 64 -+ -+#endif /* !XTENSA_CONFIG_H */ -diff --git a/arch/xtensa/crt_arch.h b/arch/xtensa/crt_arch.h -new file mode 100644 -index 0000000..dc6ddaa ---- /dev/null -+++ b/arch/xtensa/crt_arch.h -@@ -0,0 +1,26 @@ -+__asm__( -+".begin no-transform\n" -+".text \n" -+".global _" START "\n" -+".global " START "\n" -+".type _" START ", @function\n" -+".type " START ", @function\n" -+"_" START ":\n" -+"" START ":\n" -+" call0 2f\n" -+"1:\n" -+".align 4\n" -+".weak _DYNAMIC\n" -+".hidden _DYNAMIC\n" -+" .literal .L0, _DYNAMIC\n" -+" .literal .L1, 1b\n" -+"2:\n" -+" mov a6, a1\n" -+" l32r a7, .L0\n" -+" l32r a5, .L1\n" -+" add a7, a7, a0\n" -+" sub a7, a7, a5\n" -+" movi a0, 0\n" -+" call4 " START "_c\n" -+".end no-transform\n" -+); -diff --git a/arch/xtensa/pthread_arch.h b/arch/xtensa/pthread_arch.h -new file mode 100644 -index 0000000..35c752e ---- /dev/null -+++ b/arch/xtensa/pthread_arch.h -@@ -0,0 +1,11 @@ -+static inline struct pthread *__pthread_self() -+{ -+ register char *tp; -+ __asm__ __volatile__ ("rur %0, threadptr" : "=r" (tp)); -+ return (pthread_t)(tp + 8 - sizeof(struct pthread)); -+} -+ -+#define TLS_ABOVE_TP -+#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) - 8) -+ -+#define MC_PC sc_pc -diff --git a/arch/xtensa/reloc.h b/arch/xtensa/reloc.h -new file mode 100644 -index 0000000..bae93a5 ---- /dev/null -+++ b/arch/xtensa/reloc.h -@@ -0,0 +1,21 @@ -+#include <endian.h> -+ -+#if __BYTE_ORDER == __BIG_ENDIAN -+#define ENDIAN_SUFFIX "eb" -+#else -+#define ENDIAN_SUFFIX "" -+#endif -+ -+#define LDSO_ARCH "xtensa" ENDIAN_SUFFIX -+ -+#define TPOFF_K 8 -+ -+#define REL_PLT R_XTENSA_JMP_SLOT -+#define REL_RELATIVE R_XTENSA_RELATIVE -+#define REL_GOT R_XTENSA_GLOB_DAT -+#define REL_COPY R_XTENSA_32 -+#define REL_TPOFF R_XTENSA_TLS_TPOFF -+//#define REL_TLSDESC R_XTENSA_TLSDESC_FN -+ -+#define CRTJMP(pc,sp) __asm__ __volatile__( \ -+ "movsp a1, %1 ; jx %0" : : "a"(pc), "a"(sp) : "memory" ) -diff --git a/arch/xtensa/syscall_arch.h b/arch/xtensa/syscall_arch.h -new file mode 100644 -index 0000000..380ce17 ---- /dev/null -+++ b/arch/xtensa/syscall_arch.h -@@ -0,0 +1,102 @@ -+#define __SYSCALL_LL_E(x) \ -+((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ -+((union { long long ll; long l[2]; }){ .ll = x }).l[1] -+#define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x)) -+ -+static inline long __syscall0(long n) -+{ -+ register long a2 __asm__("a2") = n; -+ -+ __asm__ __volatile__ ("syscall" -+ : "+&a"(a2) -+ : -+ : "memory"); -+ return a2; -+} -+ -+static inline long __syscall1(long n, long a) -+{ -+ register long a2 __asm__("a2") = n; -+ register long a6 __asm__("a6") = a; -+ -+ __asm__ __volatile__ ("syscall" -+ : "+&a"(a2) -+ : "a"(a6) -+ : "memory"); -+ return a2; -+} -+ -+static inline long __syscall2(long n, long a, long b) -+{ -+ register long a2 __asm__("a2") = n; -+ register long a6 __asm__("a6") = a; -+ register long a3 __asm__("a3") = b; -+ -+ __asm__ __volatile__ ("syscall" -+ : "+&a"(a2) -+ : "a"(a6), "a"(a3) -+ : "memory"); -+ return a2; -+} -+ -+static inline long __syscall3(long n, long a, long b, long c) -+{ -+ register long a2 __asm__("a2") = n; -+ register long a6 __asm__("a6") = a; -+ register long a3 __asm__("a3") = b; -+ register long a4 __asm__("a4") = c; -+ -+ __asm__ __volatile__ ("syscall" -+ : "+&a"(a2) -+ : "a"(a6), "a"(a3), "a"(a4) -+ : "memory"); -+ return a2; -+} -+ -+static inline long __syscall4(long n, long a, long b, long c, long d) -+{ -+ register long a2 __asm__("a2") = n; -+ register long a6 __asm__("a6") = a; -+ register long a3 __asm__("a3") = b; -+ register long a4 __asm__("a4") = c; -+ register long a5 __asm__("a5") = d; -+ -+ __asm__ __volatile__ ("syscall" -+ : "+&a"(a2) -+ : "a"(a6), "a"(a3), "a"(a4), "a"(a5) -+ : "memory"); -+ return a2; -+} -+ -+static inline long __syscall5(long n, long a, long b, long c, long d, long e) -+{ -+ register long a2 __asm__("a2") = n; -+ register long a6 __asm__("a6") = a; -+ register long a3 __asm__("a3") = b; -+ register long a4 __asm__("a4") = c; -+ register long a5 __asm__("a5") = d; -+ register long a8 __asm__("a8") = e; -+ -+ __asm__ __volatile__ ("syscall" -+ : "+&a"(a2) -+ : "a"(a6), "a"(a3), "a"(a4), "a"(a5), "a"(a8) -+ : "memory"); -+ return a2; -+} -+ -+static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) -+{ -+ register long a2 __asm__("a2") = n; -+ register long a6 __asm__("a6") = a; -+ register long a3 __asm__("a3") = b; -+ register long a4 __asm__("a4") = c; -+ register long a5 __asm__("a5") = d; -+ register long a8 __asm__("a8") = e; -+ register long a9 __asm__("a9") = f; -+ -+ __asm__ __volatile__ ("syscall" -+ : "+&a"(a2) -+ : "a"(a6), "a"(a3), "a"(a4), "a"(a5), "a"(a8), "a"(a9) -+ : "memory"); -+ return a2; -+} -diff --git a/configure b/configure -index 0955ce6..2c56cab 100755 ---- a/configure -+++ b/configure -@@ -312,6 +312,7 @@ microblaze*) ARCH=microblaze ;; - or1k*) ARCH=or1k ;; - powerpc*) ARCH=powerpc ;; - sh[1-9bel-]*|sh|superh*) ARCH=sh ;; -+xtensa*) ARCH=xtensa ;; - unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;; - *) fail "$0: unknown or unsupported target \"$target\"" ;; - esac -diff --git a/crt/xtensa/crti.s b/crt/xtensa/crti.s -new file mode 100644 -index 0000000..6565656 ---- /dev/null -+++ b/crt/xtensa/crti.s -@@ -0,0 +1,11 @@ -+.section .init -+.global _init -+.type _init, @function -+_init: -+ entry a1, 32 -+ -+.section .fini -+.global _fini -+.type _fini, @function -+_fini: -+ entry a1, 32 -diff --git a/crt/xtensa/crtn.s b/crt/xtensa/crtn.s -new file mode 100644 -index 0000000..7e9a014 ---- /dev/null -+++ b/crt/xtensa/crtn.s -@@ -0,0 +1,5 @@ -+.section .init -+ retw -+ -+.section .fini -+ retw -diff --git a/include/elf.h b/include/elf.h -index 8b3cd3e..8168cf1 100644 ---- a/include/elf.h -+++ b/include/elf.h -@@ -2819,6 +2819,64 @@ typedef Elf32_Addr Elf32_Conflict; - #define R_OR1K_TLS_DTPOFF 33 - #define R_OR1K_TLS_DTPMOD 34 - -+ -+#define DT_XTENSA_GOT_LOC_OFF (DT_LOPROC + 0) -+#define DT_XTENSA_GOT_LOC_SZ (DT_LOPROC + 1) -+#define DT_XTENSA_NUM 2 -+ -+#define R_XTENSA_NONE 0 -+#define R_XTENSA_32 1 -+#define R_XTENSA_RTLD 2 -+#define R_XTENSA_GLOB_DAT 3 -+#define R_XTENSA_JMP_SLOT 4 -+#define R_XTENSA_RELATIVE 5 -+#define R_XTENSA_PLT 6 -+#define R_XTENSA_OP0 8 -+#define R_XTENSA_OP1 9 -+#define R_XTENSA_OP2 10 -+#define R_XTENSA_ASM_EXPAND 11 -+#define R_XTENSA_ASM_SIMPLIFY 12 -+#define R_XTENSA_GNU_VTINHERIT 15 -+#define R_XTENSA_GNU_VTENTRY 16 -+#define R_XTENSA_DIFF8 17 -+#define R_XTENSA_DIFF16 18 -+#define R_XTENSA_DIFF32 19 -+#define R_XTENSA_SLOT0_OP 20 -+#define R_XTENSA_SLOT1_OP 21 -+#define R_XTENSA_SLOT2_OP 22 -+#define R_XTENSA_SLOT3_OP 23 -+#define R_XTENSA_SLOT4_OP 24 -+#define R_XTENSA_SLOT5_OP 25 -+#define R_XTENSA_SLOT6_OP 26 -+#define R_XTENSA_SLOT7_OP 27 -+#define R_XTENSA_SLOT8_OP 28 -+#define R_XTENSA_SLOT9_OP 29 -+#define R_XTENSA_SLOT10_OP 30 -+#define R_XTENSA_SLOT11_OP 31 -+#define R_XTENSA_SLOT12_OP 32 -+#define R_XTENSA_SLOT13_OP 33 -+#define R_XTENSA_SLOT14_OP 34 -+#define R_XTENSA_SLOT0_ALT 35 -+#define R_XTENSA_SLOT1_ALT 36 -+#define R_XTENSA_SLOT2_ALT 37 -+#define R_XTENSA_SLOT3_ALT 38 -+#define R_XTENSA_SLOT4_ALT 39 -+#define R_XTENSA_SLOT5_ALT 40 -+#define R_XTENSA_SLOT6_ALT 41 -+#define R_XTENSA_SLOT7_ALT 42 -+#define R_XTENSA_SLOT8_ALT 43 -+#define R_XTENSA_SLOT9_ALT 44 -+#define R_XTENSA_SLOT10_ALT 45 -+#define R_XTENSA_SLOT11_ALT 46 -+#define R_XTENSA_SLOT12_ALT 47 -+#define R_XTENSA_SLOT13_ALT 48 -+#define R_XTENSA_SLOT14_ALT 49 -+#define R_XTENSA_TLSDESC_FN 50 -+#define R_XTENSA_TLSDESC_ARG 51 -+#define R_XTENSA_TLS_TPOFF 53 -+ -+#define R_XTENSA_NUM 54 -+ - #ifdef __cplusplus - } - #endif -diff --git a/ldso/dlstart.c b/ldso/dlstart.c -index 4dbe178..0249937 100644 ---- a/ldso/dlstart.c -+++ b/ldso/dlstart.c -@@ -22,6 +22,7 @@ void _dlstart_c(size_t *sp, size_t *dynv) - { - size_t i, aux[AUX_CNT], dyn[DYN_CNT]; - size_t *rel, rel_size, base; -+ unsigned long addr = 1; - - int argc = *sp; - char **argv = (void *)(sp+1); -@@ -138,7 +139,17 @@ void _dlstart_c(size_t *sp, size_t *dynv) - for (; rel_size; rel+=3, rel_size-=3*sizeof(size_t)) { - if (!IS_RELATIVE(rel[1], 0)) continue; - size_t *rel_addr = (void *)(base + rel[0]); -- *rel_addr = base + rel[2]; -+ if (((unsigned long)rel_addr & -4096) != addr) { -+ addr = (unsigned long)rel_addr & -4096; -+ __asm__ __volatile__ ("movi a2, 82\n\t" -+ "mov a6, %0\n\t" -+ "mov a3, %1\n\t" -+ "mov a4, %2\n\t" -+ "syscall" -+ :: "a"(addr), "a"(4096), "a"(7) -+ : "a2", "a3", "a4", "a6", "memory"); -+ } -+ *rel_addr += base + rel[2]; - } - #endif - -diff --git a/ldso/dynlink.c b/ldso/dynlink.c -index 87f3b7f..1927097 100644 ---- a/ldso/dynlink.c -+++ b/ldso/dynlink.c -@@ -314,6 +314,7 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri - size_t tls_val; - size_t addend; - int skip_relative = 0, reuse_addends = 0, save_slot = 0; -+ unsigned long addr = 1; - - if (dso == &ldso) { - /* Only ldso's REL table needs addend saving/reuse. */ -@@ -328,6 +329,10 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri - if (type == REL_NONE) continue; - sym_index = R_SYM(rel[1]); - reloc_addr = laddr(dso, rel[0]); -+ if (((unsigned long)reloc_addr & -4096) != addr) { -+ addr = (unsigned long)reloc_addr & -4096; -+ mprotect((void *)addr, 4096, 7); -+ } - if (sym_index) { - sym = syms + sym_index; - name = strings + sym->st_name; -@@ -377,7 +382,7 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri - *reloc_addr = sym_val + addend; - break; - case REL_RELATIVE: -- *reloc_addr = (size_t)base + addend; -+ *reloc_addr += (size_t)base + addend; - break; - case REL_SYM_OR_REL: - if (sym) *reloc_addr = sym_val + addend; -@@ -444,6 +449,40 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri - #endif - } - break; -+ case R_XTENSA_RTLD: -+ break; -+ case R_XTENSA_TLSDESC_FN: -+ if (runtime && def.dso->tls_id >= static_tls_cnt) { -+ reloc_addr[0] = (size_t)__tlsdesc_dynamic; -+ } else { -+ reloc_addr[0] = (size_t)__tlsdesc_static; -+ } -+ break; -+ case R_XTENSA_TLSDESC_ARG: -+ if (stride<3) addend = reloc_addr[1]; -+ if (runtime && def.dso->tls_id >= static_tls_cnt) { -+ struct td_index *new = malloc(sizeof *new); -+ if (!new) { -+ error( -+ "Error relocating %s: cannot allocate TLSDESC for %s", -+ dso->name, sym ? name : "(local)" ); -+ longjmp(*rtld_fail, 1); -+ } -+ new->next = dso->td_index; -+ dso->td_index = new; -+ new->args[0] = def.dso->tls_id; -+ new->args[1] = tls_val + addend; -+ reloc_addr[0] = (size_t)new; -+ } else { -+#ifdef TLS_ABOVE_TP -+ reloc_addr[0] = tls_val + def.dso->tls.offset -+ + TPOFF_K + addend; -+#else -+ reloc_addr[0] = tls_val - def.dso->tls.offset -+ + addend; -+#endif -+ } -+ break; - default: - error("Error relocating %s: unsupported relocation type %d", - dso->name, type); -diff --git a/src/internal/xtensa/syscall.s b/src/internal/xtensa/syscall.s -new file mode 100644 -index 0000000..6dc584b ---- /dev/null -+++ b/src/internal/xtensa/syscall.s -@@ -0,0 +1,15 @@ -+.global __syscall -+.hidden __syscall -+.type __syscall,@function -+.align 4 -+__syscall: -+ entry a1, 16 -+ mov a8, a3 -+ mov a3, a4 -+ mov a4, a5 -+ mov a5, a6 -+ mov a6, a8 -+ mov a8, a7 -+ l32i a9, a1, 16 -+ syscall -+ retw -diff --git a/src/ldso/xtensa/tlsdesc.s b/src/ldso/xtensa/tlsdesc.s -new file mode 100644 -index 0000000..5fa846d ---- /dev/null -+++ b/src/ldso/xtensa/tlsdesc.s -@@ -0,0 +1,22 @@ -+.global __tlsdesc_static -+.hidden __tlsdesc_static -+.type __tlsdesc_static,@function -+.align 4 -+__tlsdesc_static: -+ entry a1, 16 -+ rur a3, threadptr -+ add a2, a2, a3 -+ retw -+ -+.hidden __tls_get_new -+ -+.global __tlsdesc_dynamic -+.hidden __tlsdesc_dynamic -+.type __tlsdesc_dynamic,@function -+.align 4 -+__tlsdesc_dynamic: -+ entry a1, 16 -+ mov a6, a2 -+ call4 __tls_get_addr -+ mov a2, a6 -+ retw -diff --git a/src/setjmp/xtensa/longjmp.s b/src/setjmp/xtensa/longjmp.s -new file mode 100644 -index 0000000..0b49188 ---- /dev/null -+++ b/src/setjmp/xtensa/longjmp.s -@@ -0,0 +1,73 @@ -+.global _longjmp -+.global longjmp -+.type _longjmp,%function -+.type longjmp,%function -+.align 4 -+_longjmp: -+longjmp: -+ entry a1, 16 -+ -+ /* Invalidate all but the current register window. */ -+ call4 __window_spill -+ -+ l32i a0, a2, 64 -+ addi a7, a1, -16 -+ l32i a4, a2, 0 -+ l32i a5, a2, 4 -+ s32i a4, a7, 0 -+ s32i a5, a7, 4 -+ l32i a4, a2, 8 -+ l32i a5, a2, 12 -+ s32i a4, a7, 8 -+ s32i a5, a7, 12 -+ -+ /* Copy the remaining 0-8 saved registers. */ -+ extui a7, a0, 30, 2 -+ blti a7, 2, 2f -+ l32i a8, a2, 52 /* a8: SP of 'caller-1' */ -+ slli a4, a7, 4 -+ sub a6, a8, a4 -+ addi a5, a2, 16 -+ addi a8, a8, -16 /* a8: end of overflow area */ -+1: -+ l32i a7, a5, 0 -+ l32i a4, a5, 4 -+ s32i a7, a6, 0 -+ s32i a4, a6, 4 -+ l32i a7, a5, 8 -+ l32i a4, a5, 12 -+ s32i a7, a6, 8 -+ s32i a4, a6, 12 -+ addi a5, a5, 16 -+ addi a6, a6, 16 -+ bltu a6, a8, 1b -+2: -+ /* The 4 words saved from the register save area at the target's -+ * sp are copied back to the target procedure's save area. The -+ * only point of this is to prevent a catastrophic failure in -+ * case the contents were moved by an alloca after calling -+ * setjmp. This is a bit paranoid but it doesn't cost much. -+ */ -+ -+ l32i a7, a2, 4 /* load the target stack pointer */ -+ addi a7, a7, -16 /* find the destination save area */ -+ l32i a4, a2, 48 -+ l32i a5, a2, 52 -+ s32i a4, a7, 0 -+ s32i a5, a7, 4 -+ l32i a4, a2, 56 -+ l32i a5, a2, 60 -+ s32i a4, a7, 8 -+ s32i a5, a7, 12 -+ -+ l32i a4, a2, 68 -+ beqz a4, 1f -+ -+ mov a6, a2 -+ movi a7, 1 -+.hidden __sigsetjmp_tail -+ call4 __sigsetjmp_tail -+1: -+ movi a2, 1 -+ movnez a2, a3, a3 -+ retw -diff --git a/src/setjmp/xtensa/setjmp.s b/src/setjmp/xtensa/setjmp.s -new file mode 100644 -index 0000000..1366af0 ---- /dev/null -+++ b/src/setjmp/xtensa/setjmp.s -@@ -0,0 +1,13 @@ -+.global __setjmp -+.global _setjmp -+.global setjmp -+.type __setjmp,@function -+.type _setjmp,@function -+.type setjmp,@function -+.align 4 -+__setjmp: -+_setjmp: -+setjmp: -+ entry a1, 16 -+ movi a3, 0 -+ j ___sigsetjmp -diff --git a/src/signal/xtensa/restore.s b/src/signal/xtensa/restore.s -new file mode 100644 -index 0000000..a0c5229 ---- /dev/null -+++ b/src/signal/xtensa/restore.s -@@ -0,0 +1,10 @@ -+.global __restore -+.global __restore_rt -+.type __restore,%function -+.type __restore_rt,%function -+.space 1 -+.align 4 -+__restore: -+__restore_rt: -+ movi a2, 225 # SYS_rt_sigreturn -+ syscall -diff --git a/src/signal/xtensa/sigsetjmp.s b/src/signal/xtensa/sigsetjmp.s -new file mode 100644 -index 0000000..825e182 ---- /dev/null -+++ b/src/signal/xtensa/sigsetjmp.s -@@ -0,0 +1,69 @@ -+.global sigsetjmp -+.global __sigsetjmp -+.global ___sigsetjmp -+.type sigsetjmp,%function -+.type __sigsetjmp,%function -+.type ___sigsetjmp,%function -+.align 4 -+sigsetjmp: -+__sigsetjmp: -+ entry a1, 16 -+ -+___sigsetjmp: -+ call4 __window_spill -+ -+ /* Copy the caller registers a0 - a3 at (sp - 16) to jmpbuf. */ -+ addi a7, a1, -16 -+ l32i a4, a7, 0 -+ l32i a5, a7, 4 -+ s32i a4, a2, 0 -+ s32i a5, a2, 4 -+ l32i a4, a7, 8 -+ l32i a5, a7, 12 -+ s32i a4, a2, 8 -+ s32i a5, a2, 12 -+ -+ /* Copy the caller registers a4-a8/a12 from the overflow area. */ -+ /* Entry moved the SP by 16 bytes, so SP of caller-1 is at (sp + 4). */ -+ extui a7, a0, 30, 2 -+ blti a7, 2, 2f -+ l32i a8, a1, 4 /* a8: SP of 'caller-1' */ -+ slli a4, a7, 4 -+ sub a6, a8, a4 -+ addi a5, a2, 16 -+ addi a8, a8, -16 /* a8: end of overflow area */ -+1: -+ l32i a7, a6, 0 -+ l32i a4, a6, 4 -+ s32i a7, a5, 0 -+ s32i a4, a5, 4 -+ l32i a7, a6, 8 -+ l32i a4, a6, 12 -+ s32i a7, a5, 8 -+ s32i a4, a5, 12 -+ addi a5, a5, 16 -+ addi a6, a6, 16 -+ bltu a6, a8, 1b -+2: -+ /* Copy caller-1 registers a0 - a3 (this is assuming entry a1, 16) */ -+ l32i a4, a1, 0 -+ l32i a5, a1, 4 -+ s32i a4, a2, 48 -+ s32i a5, a2, 52 -+ l32i a4, a1, 8 -+ l32i a5, a1, 12 -+ s32i a4, a2, 56 -+ s32i a5, a2, 60 -+ -+ /* Save the return address, including the window size bits. */ -+ s32i a0, a2, 64 -+ s32i a3, a2, 68 -+ beqz a3, 1f -+ -+ mov a6, a2 -+ movi a7, 0 -+.hidden __sigsetjmp_tail -+ call4 __sigsetjmp_tail -+1: -+ movi a2, 0 -+ retw -diff --git a/src/signal/xtensa/windowspill.s b/src/signal/xtensa/windowspill.s -new file mode 100644 -index 0000000..7ab7f3d ---- /dev/null -+++ b/src/signal/xtensa/windowspill.s -@@ -0,0 +1,78 @@ -+#include <bits/xtensa-config.h> -+ -+#ifdef __XTENSA_WINDOWED_ABI__ -+.global __window_spill -+.type __window_spill, @function -+.align 4 -+__window_spill: -+ entry a1, 48 -+ bbci.l a0, 31, .L4 /* branch if called with call4 */ -+ bbsi.l a0, 30, .L12 /* branch if called with call12 */ -+ -+ /* Called with call8: touch register NUM_REGS-12 (4/20/52) */ -+.L8: -+#if XCHAL_NUM_AREGS > 16 -+ call12 1f -+ retw -+ -+ .align 4 -+1: _entry a1, 48 /* touch NUM_REGS-24 (x/8/40) */ -+ -+#if XCHAL_NUM_AREGS == 32 -+ mov a8, a0 -+ retw -+#else -+ mov a12, a0 -+ _entry a1, 48 /* touch NUM_REGS-36 (x/x/28) */ -+ mov a12, a0 -+ _entry a1, 48 /* touch NUM_REGS-48 (x/x/16) */ -+ mov a12, a0 -+ _entry a1, 16 /* touch NUM_REGS-60 (x/x/4) */ -+#endif -+#endif -+ mov a4, a0 -+ retw -+ -+ /* Called with call4: touch register NUM_REGS-8 (8/24/56) */ -+.L4: -+#if XCHAL_NUM_AREGS == 16 -+ mov a8, a0 -+#else -+ call12 1f -+ retw -+ -+ .align 4 -+1: _entry a1, 48 /* touch NUM_REGS-20 (x/12/44) */ -+ mov a12, a0 -+#if XCHAL_NUM_AREGS > 32 -+ _entry a1, 48 /* touch NUM_REGS-32 (x/x/32) */ -+ mov a12, a0 -+ _entry a1, 48 /* touch NUM_REGS-44 (x/x/20) */ -+ mov a12, a0 -+ _entry a1, 48 /* touch NUM_REGS-56 (x/x/8) */ -+ mov a8, a0 -+#endif -+#endif -+ retw -+ -+ /* Called with call12: touch register NUM_REGS-16 (x/16/48) */ -+.L12: -+#if XCHAL_NUM_AREGS > 16 -+ call12 1f -+ retw -+ -+ .align 4 -+1: _entry a1, 48 /* touch NUM_REGS-28 (x/4/36) */ -+#if XCHAL_NUM_AREGS == 32 -+ mov a4, a0 -+#else -+ mov a12, a0 -+ _entry a1, 48 /* touch NUM_REGS-40 (x/x/24) */ -+ mov a12, a0 -+ _entry a1, 48 /* touch NUM_REGS-52 (x/x/12) */ -+ mov a12, a0 -+#endif -+#endif -+ retw -+ -+#endif -diff --git a/src/thread/xtensa/__set_thread_area.s b/src/thread/xtensa/__set_thread_area.s -new file mode 100644 -index 0000000..4fe97ac ---- /dev/null -+++ b/src/thread/xtensa/__set_thread_area.s -@@ -0,0 +1,8 @@ -+.global __set_thread_area -+.type __set_thread_area,@function -+.align 4 -+__set_thread_area: -+ entry a1, 16 -+ wur a2, threadptr -+ movi a2, 0 -+ retw -diff --git a/src/thread/xtensa/__unmapself.s b/src/thread/xtensa/__unmapself.s -new file mode 100644 -index 0000000..c5d8f54 ---- /dev/null -+++ b/src/thread/xtensa/__unmapself.s -@@ -0,0 +1,10 @@ -+.global __unmapself -+.type __unmapself,%function -+.align 4 -+__unmapself: -+ entry a1, 16 -+ mov a6, a2 -+ movi a2, 81 # SYS_munmap -+ syscall -+ movi a2, 118 # SYS_exit -+ syscall -diff --git a/src/thread/xtensa/clone.s b/src/thread/xtensa/clone.s -new file mode 100644 -index 0000000..c75db81 ---- /dev/null -+++ b/src/thread/xtensa/clone.s -@@ -0,0 +1,39 @@ -+// __clone(func, stack, flags, arg, ptid, tls, ctid) -+// a2, a3, a4, a5, a6, a7, [sp] -+ -+// syscall(SYS_clone, flags, stack, ptid, tls, ctid) -+// a2, a6, a3, a4, a5, a8 -+ -+.global __clone -+.type __clone,%function -+.align 4 -+__clone: -+ entry a1, 16 -+ // align stack and save func,arg -+ srli a3, a3, 4 -+ slli a3, a3, 4 -+ addi a3, a3, -16 -+ s32i a2, a3, 0 -+ s32i a5, a3, 4 -+ -+ // syscall -+ mov a2, a4 -+ mov a4, a6 -+ mov a6, a2 -+ mov a5, a7 -+ l32i a8, a1, 16 -+ movi a2, 116 # SYS_clone -+ syscall -+ -+ beqz a2, 1f -+ // parent -+ retw -+ -+ // child -+1: -+ movi a0, 0 -+ l32i a4, a1, 0 -+ l32i a6, a1, 4 -+ callx4 a4 -+ movi a2, 118 # SYS_exit -+ syscall -diff --git a/src/thread/xtensa/syscall_cp.s b/src/thread/xtensa/syscall_cp.s -new file mode 100644 -index 0000000..f68df8d ---- /dev/null -+++ b/src/thread/xtensa/syscall_cp.s -@@ -0,0 +1,37 @@ -+// __syscall_cp_asm(&self->cancel, nr, u, v, w, x, y, z) -+// a2 a3 a4 a5 a6 a7 [sp] [sp+4] -+ -+// syscall(nr, u, v, w, x, y, z) -+// a2 a6 a3 a4 a5 a8 a9 -+ -+.global __cp_begin -+.hidden __cp_begin -+.global __cp_end -+.hidden __cp_end -+.global __cp_cancel -+.hidden __cp_cancel -+.hidden __cancel -+.global __syscall_cp_asm -+.hidden __syscall_cp_asm -+.type __syscall_cp_asm,%function -+.align 4 -+__syscall_cp_asm: -+ entry a1, 16 -+__cp_begin: -+ l32i a2, a2, 0 -+ bnez a2, __cp_cancel -+ mov a2, a4 -+ mov a4, a6 -+ mov a6, a2 -+ mov a2, a3 -+ mov a3, a5 -+ mov a5, a7 -+ l32i a8, a1, 16 -+ l32i a9, a1, 20 -+ syscall -+__cp_end: -+ retw -+__cp_cancel: -+ call4 __cancel -+ mov a2, a6 -+ retw --- -2.1.4 - diff --git a/toolchain/musl/patches/git/s390-hotfix.patch b/toolchain/musl/patches/git/s390-hotfix.patch new file mode 100644 index 000000000..ad5dee080 --- /dev/null +++ b/toolchain/musl/patches/git/s390-hotfix.patch @@ -0,0 +1,25 @@ +From 67d252fe0c131e3a1fa56d8bec9c25613a7f3bcd Mon Sep 17 00:00:00 2001 +From: Bobby Bingham <koorogi@koorogi.info> +Date: Fri, 25 Nov 2016 12:58:04 -0600 +Subject: [PATCH] s390: replace absolute branch with relative branch + +--- + src/signal/s390x/sigsetjmp.s | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/signal/s390x/sigsetjmp.s b/src/signal/s390x/sigsetjmp.s +index 72dfc25..41b1bd9 100644 +--- a/src/signal/s390x/sigsetjmp.s ++++ b/src/signal/s390x/sigsetjmp.s +@@ -6,7 +6,7 @@ + sigsetjmp: + __sigsetjmp: + ltgr %r3, %r3 +- bz ___setjmp ++ jz ___setjmp + + stg %r14, 18*8(%r2) + stg %r6, 20*8(%r2) +-- +2.10.2 + |