Compare commits

..

No commits in common. "master" and "v1.2.0" have entirely different histories.

677 changed files with 3053 additions and 9276 deletions

View file

@ -74,7 +74,6 @@ Kylie McClain
Leah Neukirchen Leah Neukirchen
Luca Barbato Luca Barbato
Luka Perkov Luka Perkov
Lynn Ochs
M Farkas-Dyck (Strake) M Farkas-Dyck (Strake)
Mahesh Bodapati Mahesh Bodapati
Markus Wichmann Markus Wichmann
@ -104,6 +103,7 @@ Stefan O'Rear
Szabolcs Nagy Szabolcs Nagy
Timo Teräs Timo Teräs
Trutz Behn Trutz Behn
Valentin Ochs
Will Dietz Will Dietz
William Haddon William Haddon
William Pitcock William Pitcock
@ -127,13 +127,10 @@ Copyright © 2017-2018 Arm Limited
and labelled as such in comments in the individual source files. All and labelled as such in comments in the individual source files. All
have been licensed under extremely permissive terms. have been licensed under extremely permissive terms.
The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008 The ARM memcpy code (src/string/arm/memcpy_el.S) is Copyright © 2008
The Android Open Source Project and is licensed under a two-clause BSD The Android Open Source Project and is licensed under a two-clause BSD
license. It was taken from Bionic libc, used on Android. license. It was taken from Bionic libc, used on Android.
The AArch64 memcpy and memset code (src/string/aarch64/*) are
Copyright © 1999-2019, Arm Limited.
The implementation of DES for crypt (src/crypt/crypt_des.c) is The implementation of DES for crypt (src/crypt/crypt_des.c) is
Copyright © 1994 David Burren. It is licensed under a BSD license. Copyright © 1994 David Burren. It is licensed under a BSD license.
@ -143,7 +140,7 @@ domain. The code also comes with a fallback permissive license for use
in jurisdictions that may not recognize the public domain. in jurisdictions that may not recognize the public domain.
The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
Lynn Ochs and is licensed under an MIT-style license. Valentin Ochs and is licensed under an MIT-style license.
The x86_64 port was written by Nicholas J. Kain and is licensed under The x86_64 port was written by Nicholas J. Kain and is licensed under
the standard MIT terms. the standard MIT terms.

View file

@ -86,7 +86,7 @@ and ABI combinations:
* SuperH (SH) * SuperH (SH)
* Standard ELF ABI or FDPIC ABI (shared-text without MMU) * Standard ELF ABI or FDPIC ABI (shared-text without MMU)
* Little-endian by default; big-endian variant also supported * Little-endian by default; big-engian variant also supported
* Full FPU ABI or soft-float ABI is supported, but the * Full FPU ABI or soft-float ABI is supported, but the
single-precision-only FPU ABI is not single-precision-only FPU ABI is not
@ -97,16 +97,11 @@ and ABI combinations:
* OpenRISC 1000 (or1k) * OpenRISC 1000 (or1k)
* RISC-V * RISC-V 64
* 32-bit and 64-bit
* Little endian * Little endian
* Hard, soft, and hard-single/soft-double floating point ABIs * Hard, soft, and hard-single/soft-double floating point ABIs
* Standard ELF; no shared-text NOMMU support * Standard ELF; no shared-text NOMMU support
* LoongArch
* 64-bit ISA
* Hard, soft, and hard-single/soft-double floating point ABIs
Build and Installation Procedure Build and Installation Procedure

View file

@ -17,8 +17,7 @@ includedir = $(prefix)/include
libdir = $(prefix)/lib libdir = $(prefix)/lib
syslibdir = /lib syslibdir = /lib
MALLOC_DIR = mallocng SRC_DIRS = $(addprefix $(srcdir)/,src/* crt ldso $(COMPAT_SRC_DIRS))
SRC_DIRS = $(addprefix $(srcdir)/,src/* src/malloc/$(MALLOC_DIR) crt ldso $(COMPAT_SRC_DIRS))
BASE_GLOBS = $(addsuffix /*.c,$(SRC_DIRS)) BASE_GLOBS = $(addsuffix /*.c,$(SRC_DIRS))
ARCH_GLOBS = $(addsuffix /$(ARCH)/*.[csS],$(SRC_DIRS)) ARCH_GLOBS = $(addsuffix /$(ARCH)/*.[csS],$(SRC_DIRS))
BASE_SRCS = $(sort $(wildcard $(BASE_GLOBS))) BASE_SRCS = $(sort $(wildcard $(BASE_GLOBS)))
@ -109,7 +108,7 @@ obj/src/internal/version.o obj/src/internal/version.lo: obj/src/internal/version
obj/crt/rcrt1.o obj/ldso/dlstart.lo obj/ldso/dynlink.lo: $(srcdir)/src/internal/dynlink.h $(srcdir)/arch/$(ARCH)/reloc.h obj/crt/rcrt1.o obj/ldso/dlstart.lo obj/ldso/dynlink.lo: $(srcdir)/src/internal/dynlink.h $(srcdir)/arch/$(ARCH)/reloc.h
obj/crt/crt1.o obj/crt/Scrt1.o obj/crt/rcrt1.o obj/ldso/dlstart.lo: $(srcdir)/arch/$(ARCH)/crt_arch.h obj/crt/crt1.o obj/crt/scrt1.o obj/crt/rcrt1.o obj/ldso/dlstart.lo: $(srcdir)/arch/$(ARCH)/crt_arch.h
obj/crt/rcrt1.o: $(srcdir)/ldso/dlstart.c obj/crt/rcrt1.o: $(srcdir)/ldso/dlstart.c

View file

@ -1 +1 @@
1.2.5 1.2.0

238
WHATSNEW
View file

@ -2200,241 +2200,3 @@ arch-specific bugs fixed:
- arm dynamic linker chose wrong tls/atomic variants since 1.1.21 - arm dynamic linker chose wrong tls/atomic variants since 1.1.21
- some math library functions returned excess precision on i386 - some math library functions returned excess precision on i386
- unconfirmed regression in fchmodat AT_SYMLINK_NOFOLLOW on mips* - unconfirmed regression in fchmodat AT_SYMLINK_NOFOLLOW on mips*
1.2.1 release notes
major changes:
- new malloc implementation (mallocng & overhauled bump allocator)
new features:
- DNS queries via res_* now set AD flag, report zone signedness (DNSSEC)
- PTHREAD_NULL macro (POSIX-future)
performance:
- optimized memcpy and memset for aarch64
- optimized memcpy for arm now supports big endian
- optimized x86_64 remquol
- improved strerror without linear search
bugs fixed:
- lock-skipping for processes that returned to single-threaded was wrong
- AF_UNSPEC dns lookups mishandled single failure in paired A+AAAA
- res_send and res_query returned wrong value on errors from nameserver
- corrupted sysvipc timestamps on 32-bit archs with old kernels
- incorrect parsing of timezone offsets after overly-long zone name
- clock_adjtime was broken on 32-bit archs (time64)
- pthread_kill as not async-signal-safe
- pthread_cancel was not async-cancel-safe
- large-ulp errors in various math functions in non-default rounding modes
arch-specific bugs fixed:
- arm clock_gettime was broken on some hw due to bad time64 vdso
- m68k sqrtl lacked long double precision
- mips* syscall mechanism regressions on older kernels
- mips* had negated error codes for some syscalls (kernel bug)
- mips* SIGEMT was wrongly called SIGSTKFLT
- sh fesetround didn't work correctly on sh
1.2.2 release notes
major changes:
- child restrictions lifted after fork of multithreaded parent
new features:
- _Fork function (POSIX-future)
- reallocarray function (extension from OpenBSD, now widespread)
- gettid function (kernel tid as supported concept)
- SIGEV_THREAD_ID sigevent API (Linux extension)
- tcgetwinsize and tcsetwinsize functions (POSIX-future)
performance:
- faster software sqrt on archs without native sqrt instruction
compatibility:
- realpath no longer depends on procfs availability & accuracy
- time zone parser now always prefers 64-bit tables if present
- crypt_blowfish now supports $2b$ prefix
- res_query now reports errors via h_errno
- set*id and setrlimit are now safe in vforked/cloned child
- setgroups now applies to all threads
- dlopen debugger notification is improved, should work with lldb
- setrlimit no longer needs __synccall broadcast on linux 2.6.36+
- faccessat with AT_EACCESS no longer needs child process on linux 5.8+
bugs fixed:
- buffer overflow and infinite loop errors in wcsnrtombs (CVE-2020-28928)
- sem_close unmapped still-referenced semaphores
- fork of process with active aio could deadlock or crash paren
- pthread_cond_wait was broken with priority-inheritance mutex
- getgrouplist wrongly failed when nscd reported an empty list
- abort could leak modified SIGABRT disposition to fork or posix_spawn child
- regression with mallocng: malloc_usable_size(0) crashed
- readlink wrongly gave EINVAL on zero length dest buffer
- sqrtl was severely inaccurate (not correctly rounded) on ldquad archs
- assert failure wrongly flushed stdio (possible deadlock)
- MUSL_LOCPATH search was broken with multiple components
- missing newline in herror output
- possible deadlock in pthread_exit with pshared mutex or barrier usage
- pthread_mutexattr_getprotocol didn't read back protocol
- v4l2 ioctl translation for pre-time64 kernels didn't work
arch-specific bugs fixed:
- x86_64 longjmp failed to handle 0 argument reliably
- i386 __set_thread_area fallback for pre-2.6 kernels didn't work
- missing O_LARGEFILE macro value on x86_64, x32, mips64
- unpredictable s390x breakage from failure to preserve call-saved registers
1.2.3 release notes
new features:
- qsort_r function (POSIX-future)
- pthread_getname_np extension function
- hard float on SPE FPU for powerpc-sf
- SEEK_DATA and SEEK_HOLE exposed in unistd.h (Linux extensions)
compatibility:
- free now preserves errno (POSIX-future requirement)
- setjmp is declared explicitly with returns_twice for non-GCC compilers
- macro version of isascii is no longer defined for C++
- dynamic linker now tolerates zero-length LOAD segments
- epoll_[p]wait is now a cancellation point
- pwd/grp functions no longer fail on systems without AF_UNIX support
- POSIX TZ parsing is stricter to allow more names to fallback to files
- NULL is now defined as nullptr when used in C++11 or later
- gettext now accepts null pointer as argument
bugs fixed:
- old regression in wcwidth of Hangul combining (vowel/final) letters
- duplocale used wrong malloc when malloc was replaced (1.2.2 regression)
- fmaf rounded wrong on archs without FE_TOWARDZERO (all softfloat archs)
- popen didn't honor requirement not to leak other popen pipe fds to child
- aligned_alloc and variants crashed on allocation failure
- dl_iterate_phdr reported incorrect module TLS pointers
- mishandling of some inputs in acoshf and expm1f and functions using them
- potentially wrong-sign zero in cproj functions at infinity
- multiple bugs in legacy function cuserid
- minor posix_spawn file actions API conformance issues
- pthread_setname_np fd leak
- out-of-bound read in zoneinfo handling with distant-past times
- out-of-tree builds lacked generated debug cfi for x86 asm
arch-specific bugs fixed:
- powerpc (32-bit) struct shmid_ds layout was wrong for some fields
- time64 struct layout was wrong in sound ioctl fallback (32-bit archs)
1.2.4 release notes
new features:
- large dns record lookups via tcp fallback
- new getaddrinfo EAI_NODATA result to distinguish NODATA/NxDomain
- support for new RELR compressed format for relative relocations
- sysconf keys for querying signal stack size requirements
- real vfork on riscv64
performance:
- mallocng no longer uses MADV_FREE (high performance cost, little gain)
- vdso clock_gettime is supported once again on 32-bit arm
compatibility:
- gethostbyname family now distinguishes NO_DATA from HOST_NOT_FOUND
- res_send now works with caller-provided edns0 queries
- arpa/nameser.h RR types list is now up-to-date
- previously-missing POSIX confstr keys have been added
- mntent interfaces now accept missing fields
- alt signal stack, if any, is now used for internal signals
- the LFS64 macros are no longer exposed without _LARGEFILE64_SOURCE
- memmem (POSIX-future) is now exposed in default feature profile
- pthread_atfork now admits calls from an application-provided malloc
- debugger tracking of shared libraries now works on MIPS PIE binaries
- sendmsg now supports up to SCM_MAX_FD fds in SCM_RIGHTS messages
bugs fixed:
- gethostbyname[2]_r wrongly returned nonzero (error) on negative result
- parallel v4/v6 address queries could fail on query id collisions
- spurious getaddrinfo/AI_ADDRCONFIG failures due to errno clobbering
- dns search domains ending in dot (including lone dot) broke lookups
- ipv6 servers in resolv.conf broke lookups on systems with v6 disabled
- systems with bindv6only failed to query both v4 and v6 nameservers
- res_mkquery mishandled consecutive final dots in name
- res_send could malfunction for very small answer buffer sizes
- resolver dns backend accepted answers with wrong (A vs AAAA) RR type
- getservbyport_r returned junk or ENOENT (vs ERANGE) on buffer size errors
- dns result parsing of malformed responses could process uninitialized data
- freopen didn't reset stream orientation (byte/wide) & encoding rule
- fwprintf didn't print most fields on open_wmemstream FILEs
- wide printf %lc ignored field width
- wide printf erroneously processed %n after encoding errors
- use of wide printf %9$ argument slot overflowed undersized buffer
- swprintf malfunctioned on nul character in output
- strverscmp ordered digit sequences vs nondigits incorrectly
- timer_create/SIGEV_THREAD failure leaked the thread
- semaphores were subject to missed-wake under certain usage patterns
- several possible rare deadlocks with lock handling at thread exit
- several possible rare deadlocks with aio and multithreaded fork
- dynamic linker relro processing was broken on archs w/variable pagesize
- async cancellation could run cancellation handlers in invalid context
- pthread_detach was wrongly a cancellation point in rare race code path
- use-after-close/double-close errors in mq_notify error paths
- mq_notify event thread wrongly ran with signals unmasked
- wcs{,n}cmp, wmemcmp returned wrong results when difference overflowed
- accept4, pipe2, and dup3 handled unknown flags wrong in fallback cases
- CPU_SETSIZE macro had wrong unit
- select fallback for pre-time64 kernels truncated timeout (vs clamping)
arch-specific bugs fixed:
- x32 new socketcalls took fallback path due to pointer sign extension
- x32 wait4 didn't fill rusage structure (time64 regression)
- x32 semtimedop mismatched timespec ABI with kernel (time64 regression)
- sigaction signal mask was bogus on or1k, microblaze, mips, and riscv
- powerpc-sf longjmp asm clobbered value argument
- or1k poll function passed timeout to syscall in wrong form
1.2.5 release notes
new features:
- statx function (linux extension; via syscall and fallback using fstatat)
- clone function is now usable and gives _Fork-like consistency in child
- statvfs now provides f_type result
- preadv2 and pwritev2 (linux extension) syscall wrappers
- riscv64 TLSDESC support
new ports:
- loongarch64
- riscv32
compatibility:
- DNS resolver can now handle answers with long CNAME chains
- string.h no longer provides (C23-incompat) non-prototype decl of basename
- fstatat statx backend now matches stat syscall non-automounting behavior
- mntent interfaces now handle escaped whitespace in paths/options
standards updates:
- printf %lc of nul wchar now produces output
- snprintf and swprintf no longer fail on n > INT_MAX
- ppoll is now exposed in default feature profile
bugs fixed:
- some long DNS answers were wrongly rejected despite new TCP support
- glob could wrongly return GLOB_NOMATCH if aborted before any matches
- multithreaded set*id could malfunction from thread sequencing logic bug
- certain use of threads after fork could deadlock thread-list lock
- posix_spawn child could deadlock in race with async parent death
- mbrtowc return value was wrong if argument n exceeded UINT_MAX
- 80-bit extended acoshl and powl got some corner cases wrong
- syslog incorrectly generated localized timestamps
arch-specific bugs fixed:
- arm (32-bit) TLSDESC malfunctioned due to addends being processed wrong
- riscv64 icache flush operation was non-functional
- sh sigsetjmp failed to properly restore call-saved register r8 on return
- sh dlsym RTLD_NEXT did not identify calling module correctly

View file

@ -38,15 +38,3 @@
#define HWCAP2_SVEBITPERM (1 << 4) #define HWCAP2_SVEBITPERM (1 << 4)
#define HWCAP2_SVESHA3 (1 << 5) #define HWCAP2_SVESHA3 (1 << 5)
#define HWCAP2_SVESM4 (1 << 6) #define HWCAP2_SVESM4 (1 << 6)
#define HWCAP2_FLAGM2 (1 << 7)
#define HWCAP2_FRINT (1 << 8)
#define HWCAP2_SVEI8MM (1 << 9)
#define HWCAP2_SVEF32MM (1 << 10)
#define HWCAP2_SVEF64MM (1 << 11)
#define HWCAP2_SVEBF16 (1 << 12)
#define HWCAP2_I8MM (1 << 13)
#define HWCAP2_BF16 (1 << 14)
#define HWCAP2_DGH (1 << 15)
#define HWCAP2_RNG (1 << 16)
#define HWCAP2_BTI (1 << 17)
#define HWCAP2_MTE (1 << 18)

View file

@ -1,2 +0,0 @@
#define PROT_BTI 0x10
#define PROT_MTE 0x20

View file

@ -0,0 +1,2 @@
#define _POSIX_V6_LP64_OFF64 1
#define _POSIX_V7_LP64_OFF64 1

2
arch/aarch64/bits/reg.h Normal file
View file

@ -0,0 +1,2 @@
#undef __WORDSIZE
#define __WORDSIZE 64

View file

@ -11,7 +11,7 @@ typedef unsigned long greg_t;
typedef unsigned long gregset_t[34]; typedef unsigned long gregset_t[34];
typedef struct { typedef struct {
__uint128_t vregs[32]; long double vregs[32];
unsigned int fpsr; unsigned int fpsr;
unsigned int fpcr; unsigned int fpcr;
} fpregset_t; } fpregset_t;
@ -34,7 +34,7 @@ struct fpsimd_context {
struct _aarch64_ctx head; struct _aarch64_ctx head;
unsigned int fpsr; unsigned int fpsr;
unsigned int fpcr; unsigned int fpcr;
__uint128_t vregs[32]; long double vregs[32];
}; };
struct esr_context { struct esr_context {
struct _aarch64_ctx head; struct _aarch64_ctx head;

View file

@ -6,7 +6,7 @@ struct stat {
uid_t st_uid; uid_t st_uid;
gid_t st_gid; gid_t st_gid;
dev_t st_rdev; dev_t st_rdev;
unsigned long long __pad; unsigned long __pad;
off_t st_size; off_t st_size;
blksize_t st_blksize; blksize_t st_blksize;
int __pad2; int __pad2;

View file

@ -12,18 +12,9 @@ typedef uint32_t uint_fast32_t;
#define UINT_FAST16_MAX UINT32_MAX #define UINT_FAST16_MAX UINT32_MAX
#define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST32_MAX UINT32_MAX
#if __LONG_MAX == 0x7fffffffL
#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
#else
#define INTPTR_MIN INT64_MIN #define INTPTR_MIN INT64_MIN
#define INTPTR_MAX INT64_MAX #define INTPTR_MAX INT64_MAX
#define UINTPTR_MAX UINT64_MAX #define UINTPTR_MAX UINT64_MAX
#define PTRDIFF_MIN INT64_MIN #define PTRDIFF_MIN INT64_MIN
#define PTRDIFF_MAX INT64_MAX #define PTRDIFF_MAX INT64_MAX
#define SIZE_MAX UINT64_MAX #define SIZE_MAX UINT64_MAX
#endif

View file

@ -289,19 +289,4 @@
#define __NR_fspick 433 #define __NR_fspick 433
#define __NR_pidfd_open 434 #define __NR_pidfd_open 434
#define __NR_clone3 435 #define __NR_clone3 435
#define __NR_close_range 436
#define __NR_openat2 437
#define __NR_pidfd_getfd 438
#define __NR_faccessat2 439
#define __NR_process_madvise 440
#define __NR_epoll_pwait2 441
#define __NR_mount_setattr 442
#define __NR_landlock_create_ruleset 444
#define __NR_landlock_add_rule 445
#define __NR_landlock_restrict_self 446
#define __NR_process_mrelease 448
#define __NR_futex_waitv 449
#define __NR_set_mempolicy_home_node 450
#define __NR_cachestat 451
#define __NR_fchmodat2 452

View file

@ -6,7 +6,7 @@ struct user_regs_struct {
}; };
struct user_fpsimd_struct { struct user_fpsimd_struct {
__uint128_t vregs[32]; long double vregs[32];
unsigned int fpsr; unsigned int fpsr;
unsigned int fpcr; unsigned int fpcr;
}; };

View file

@ -1,11 +1,12 @@
static inline uintptr_t __get_tp() static inline struct pthread *__pthread_self()
{ {
uintptr_t tp; char *self;
__asm__ ("mrs %0,tpidr_el0" : "=r"(tp)); __asm__ ("mrs %0,tpidr_el0" : "=r"(self));
return tp; return (void*)(self - sizeof(struct pthread));
} }
#define TLS_ABOVE_TP #define TLS_ABOVE_TP
#define GAP_ABOVE_TP 16 #define GAP_ABOVE_TP 16
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
#define MC_PC pc #define MC_PC pc

2
arch/arm/bits/posix.h Normal file
View file

@ -0,0 +1,2 @@
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V7_ILP32_OFFBIG 1

3
arch/arm/bits/reg.h Normal file
View file

@ -0,0 +1,3 @@
#undef __WORDSIZE
#define __WORDSIZE 32
/* FIXME */

20
arch/arm/bits/stdint.h Normal file
View file

@ -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

View file

@ -389,21 +389,6 @@
#define __NR_fspick 433 #define __NR_fspick 433
#define __NR_pidfd_open 434 #define __NR_pidfd_open 434
#define __NR_clone3 435 #define __NR_clone3 435
#define __NR_close_range 436
#define __NR_openat2 437
#define __NR_pidfd_getfd 438
#define __NR_faccessat2 439
#define __NR_process_madvise 440
#define __NR_epoll_pwait2 441
#define __NR_mount_setattr 442
#define __NR_landlock_create_ruleset 444
#define __NR_landlock_add_rule 445
#define __NR_landlock_restrict_self 446
#define __NR_process_mrelease 448
#define __NR_futex_waitv 449
#define __NR_set_mempolicy_home_node 450
#define __NR_cachestat 451
#define __NR_fchmodat2 452
#define __ARM_NR_breakpoint 0x0f0001 #define __ARM_NR_breakpoint 0x0f0001
#define __ARM_NR_cacheflush 0x0f0002 #define __ARM_NR_cacheflush 0x0f0002

View file

@ -1,11 +1,11 @@
#if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \ #if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
|| __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7 || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
static inline uintptr_t __get_tp() static inline pthread_t __pthread_self()
{ {
uintptr_t tp; char *p;
__asm__ ( "mrc p15,0,%0,c13,c0,3" : "=r"(tp) ); __asm__ ( "mrc p15,0,%0,c13,c0,3" : "=r"(p) );
return tp; return (void *)(p-sizeof(struct pthread));
} }
#else #else
@ -16,17 +16,18 @@ static inline uintptr_t __get_tp()
#define BLX "blx" #define BLX "blx"
#endif #endif
static inline uintptr_t __get_tp() static inline pthread_t __pthread_self()
{ {
extern hidden uintptr_t __a_gettp_ptr; extern hidden uintptr_t __a_gettp_ptr;
register uintptr_t tp __asm__("r0"); register uintptr_t p __asm__("r0");
__asm__ ( BLX " %1" : "=r"(tp) : "r"(__a_gettp_ptr) : "cc", "lr" ); __asm__ ( BLX " %1" : "=r"(p) : "r"(__a_gettp_ptr) : "cc", "lr" );
return tp; return (void *)(p-sizeof(struct pthread));
} }
#endif #endif
#define TLS_ABOVE_TP #define TLS_ABOVE_TP
#define GAP_ABOVE_TP 8 #define GAP_ABOVE_TP 8
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
#define MC_PC arm_pc #define MC_PC arm_pc

View file

@ -26,7 +26,7 @@
#define REL_TPOFF R_ARM_TLS_TPOFF32 #define REL_TPOFF R_ARM_TLS_TPOFF32
#define REL_TLSDESC R_ARM_TLS_DESC #define REL_TLSDESC R_ARM_TLS_DESC
#define TLSDESC_BACKWARDS 1 #define TLSDESC_BACKWARDS
#define CRTJMP(pc,sp) __asm__ __volatile__( \ #define CRTJMP(pc,sp) __asm__ __volatile__( \
"mov sp,%1 ; bx %0" : : "r"(pc), "r"(sp) : "memory" ) "mov sp,%1 ; bx %0" : : "r"(pc), "r"(sp) : "memory" )

View file

@ -98,13 +98,12 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
__asm_syscall(R7_OPERAND, "0"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4), "r"(r5)); __asm_syscall(R7_OPERAND, "0"(r0), "r"(r1), "r"(r2), "r"(r3), "r"(r4), "r"(r5));
} }
#define SYSCALL_FADVISE_6_ARG
#define SYSCALL_IPC_BROKEN_MODE
#define VDSO_USEFUL #define VDSO_USEFUL
#define VDSO_CGT32_SYM "__vdso_clock_gettime" #define VDSO_CGT32_SYM "__vdso_clock_gettime"
#define VDSO_CGT32_VER "LINUX_2.6" #define VDSO_CGT32_VER "LINUX_2.6"
#define VDSO_CGT_SYM "__vdso_clock_gettime64" #define VDSO_CGT_SYM "__vdso_clock_gettime64"
#define VDSO_CGT_VER "LINUX_2.6" #define VDSO_CGT_VER "LINUX_2.6"
#define VDSO_CGT_WORKAROUND 1
#define SYSCALL_FADVISE_6_ARG
#define SYSCALL_IPC_BROKEN_MODE

View file

@ -30,15 +30,9 @@
#define F_SETSIG 10 #define F_SETSIG 10
#define F_GETSIG 11 #define F_GETSIG 11
#if __LONG_MAX == 0x7fffffffL
#define F_GETLK 12 #define F_GETLK 12
#define F_SETLK 13 #define F_SETLK 13
#define F_SETLKW 14 #define F_SETLKW 14
#else
#define F_GETLK 5
#define F_SETLK 6
#define F_SETLKW 7
#endif
#define F_SETOWN_EX 15 #define F_SETOWN_EX 15
#define F_GETOWN_EX 16 #define F_GETOWN_EX 16

2
arch/i386/bits/posix.h Normal file
View file

@ -0,0 +1,2 @@
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V7_ILP32_OFFBIG 1

View file

@ -1,3 +1,5 @@
#undef __WORDSIZE
#define __WORDSIZE 32
#define EBX 0 #define EBX 0
#define ECX 1 #define ECX 1
#define EDX 2 #define EDX 2

20
arch/i386/bits/stdint.h Normal file
View file

@ -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

View file

@ -426,20 +426,4 @@
#define __NR_fspick 433 #define __NR_fspick 433
#define __NR_pidfd_open 434 #define __NR_pidfd_open 434
#define __NR_clone3 435 #define __NR_clone3 435
#define __NR_close_range 436
#define __NR_openat2 437
#define __NR_pidfd_getfd 438
#define __NR_faccessat2 439
#define __NR_process_madvise 440
#define __NR_epoll_pwait2 441
#define __NR_mount_setattr 442
#define __NR_landlock_create_ruleset 444
#define __NR_landlock_add_rule 445
#define __NR_landlock_restrict_self 446
#define __NR_memfd_secret 447
#define __NR_process_mrelease 448
#define __NR_futex_waitv 449
#define __NR_set_mempolicy_home_node 450
#define __NR_cachestat 451
#define __NR_fchmodat2 452

View file

@ -1,8 +1,10 @@
static inline uintptr_t __get_tp() static inline struct pthread *__pthread_self()
{ {
uintptr_t tp; struct pthread *self;
__asm__ ("movl %%gs:0,%0" : "=r" (tp) ); __asm__ ("movl %%gs:0,%0" : "=r" (self) );
return tp; return self;
} }
#define TP_ADJ(p) (p)
#define MC_PC gregs[REG_EIP] #define MC_PC gregs[REG_EIP]

View file

@ -87,3 +87,5 @@ static inline long __syscall6(long n, long a1, long a2, long a3, long a4, long a
#define VDSO_CGT32_VER "LINUX_2.6" #define VDSO_CGT32_VER "LINUX_2.6"
#define VDSO_CGT_SYM "__vdso_clock_gettime64" #define VDSO_CGT_SYM "__vdso_clock_gettime64"
#define VDSO_CGT_VER "LINUX_2.6" #define VDSO_CGT_VER "LINUX_2.6"
#define SYSCALL_USE_SOCKETCALL

View file

@ -1,53 +0,0 @@
#define a_ll a_ll
static inline int a_ll(volatile int *p)
{
int v;
__asm__ __volatile__ (
"ll.w %0, %1"
: "=r"(v)
: "ZC"(*p));
return v;
}
#define a_sc a_sc
static inline int a_sc(volatile int *p, int v)
{
int r;
__asm__ __volatile__ (
"sc.w %0, %1"
: "=r"(r), "=ZC"(*p)
: "0"(v) : "memory");
return r;
}
#define a_ll_p a_ll_p
static inline void *a_ll_p(volatile void *p)
{
void *v;
__asm__ __volatile__ (
"ll.d %0, %1"
: "=r"(v)
: "ZC"(*(void *volatile *)p));
return v;
}
#define a_sc_p a_sc_p
static inline int a_sc_p(volatile void *p, void *v)
{
long r;
__asm__ __volatile__ (
"sc.d %0, %1"
: "=r"(r), "=ZC"(*(void *volatile *)p)
: "0"(v)
: "memory");
return r;
}
#define a_barrier a_barrier
static inline void a_barrier()
{
__asm__ __volatile__ ("dbar 0" : : : "memory");
}
#define a_pre_llsc a_barrier
#define a_post_llsc a_barrier

View file

@ -1,18 +0,0 @@
#define _Addr long
#define _Int64 long
#define _Reg long
#define __BYTE_ORDER 1234
#define __LONG_MAX 0x7fffffffffffffffL
#ifndef __cplusplus
TYPEDEF int wchar_t;
#endif
TYPEDEF float float_t;
TYPEDEF double double_t;
TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
TYPEDEF unsigned nlink_t;
TYPEDEF int blksize_t;

View file

@ -1,20 +0,0 @@
#define FE_INEXACT 0x010000
#define FE_UNDERFLOW 0x020000
#define FE_OVERFLOW 0x040000
#define FE_DIVBYZERO 0x080000
#define FE_INVALID 0x100000
#define FE_ALL_EXCEPT 0x1F0000
#define FE_TONEAREST 0x000
#define FE_TOWARDZERO 0x100
#define FE_UPWARD 0x200
#define FE_DOWNWARD 0x300
typedef unsigned fexcept_t;
typedef struct {
unsigned __cw;
} fenv_t;
#define FE_DFL_ENV ((const fenv_t *) -1)

View file

@ -1,16 +0,0 @@
#define FLT_EVAL_METHOD 0
#define LDBL_TRUE_MIN 6.47517511943802511092443895822764655e-4966L
#define LDBL_MIN 3.36210314311209350626267781732175260e-4932L
#define LDBL_MAX 1.18973149535723176508575932662800702e+4932L
#define LDBL_EPSILON 1.92592994438723585305597794258492732e-34L
#define LDBL_MANT_DIG 113
#define LDBL_MIN_EXP (-16381)
#define LDBL_MAX_EXP 16384
#define LDBL_DIG 33
#define LDBL_MIN_10_EXP (-4931)
#define LDBL_MAX_10_EXP 4932
#define DECIMAL_DIG 36

View file

@ -1 +0,0 @@
typedef unsigned long __jmp_buf[23];

View file

@ -1,101 +0,0 @@
#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 4096
#define SIGSTKSZ 16384
#endif
#if defined(_GNU_SOURCE)
#define LARCH_NGREG 32
#define LARCH_REG_RA 1
#define LARCH_REG_SP 3
#define LARCH_REG_S0 23
#define LARCH_REG_S1 24
#define LARCH_REG_A0 4
#define LARCH_REG_S2 25
#define LARCH_REG_NARGS 8
#endif
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
typedef unsigned long greg_t, gregset_t[32];
struct sigcontext {
unsigned long sc_pc;
unsigned long sc_regs[32];
unsigned sc_flags;
unsigned long sc_extcontext[] __attribute__((__aligned__(16)));
};
#endif
typedef struct {
unsigned long __pc;
unsigned long __gregs[32];
unsigned __flags;
unsigned long __extcontext[] __attribute__((__aligned__(16)));
} 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;
sigset_t uc_sigmask;
long __uc_pad;
mcontext_t uc_mcontext;
} ucontext_t;
#define __uc_flags uc_flags
#define SA_NOCLDSTOP 1
#define SA_NOCLDWAIT 2
#define SA_SIGINFO 4
#define SA_ONSTACK 0x08000000
#define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000
#endif
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT SIGABRT
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL SIGIO
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED SIGSYS
#define _NSIG 65

View file

@ -1,316 +0,0 @@
#define __NR_io_setup 0
#define __NR_io_destroy 1
#define __NR_io_submit 2
#define __NR_io_cancel 3
#define __NR_io_getevents 4
#define __NR_setxattr 5
#define __NR_lsetxattr 6
#define __NR_fsetxattr 7
#define __NR_getxattr 8
#define __NR_lgetxattr 9
#define __NR_fgetxattr 10
#define __NR_listxattr 11
#define __NR_llistxattr 12
#define __NR_flistxattr 13
#define __NR_removexattr 14
#define __NR_lremovexattr 15
#define __NR_fremovexattr 16
#define __NR_getcwd 17
#define __NR_lookup_dcookie 18
#define __NR_eventfd2 19
#define __NR_epoll_create1 20
#define __NR_epoll_ctl 21
#define __NR_epoll_pwait 22
#define __NR_dup 23
#define __NR_dup3 24
#define __NR3264_fcntl 25
#define __NR_inotify_init1 26
#define __NR_inotify_add_watch 27
#define __NR_inotify_rm_watch 28
#define __NR_ioctl 29
#define __NR_ioprio_set 30
#define __NR_ioprio_get 31
#define __NR_flock 32
#define __NR_mknodat 33
#define __NR_mkdirat 34
#define __NR_unlinkat 35
#define __NR_symlinkat 36
#define __NR_linkat 37
#define __NR_umount2 39
#define __NR_mount 40
#define __NR_pivot_root 41
#define __NR_nfsservctl 42
#define __NR3264_statfs 43
#define __NR3264_fstatfs 44
#define __NR3264_truncate 45
#define __NR3264_ftruncate 46
#define __NR_fallocate 47
#define __NR_faccessat 48
#define __NR_chdir 49
#define __NR_fchdir 50
#define __NR_chroot 51
#define __NR_fchmod 52
#define __NR_fchmodat 53
#define __NR_fchownat 54
#define __NR_fchown 55
#define __NR_openat 56
#define __NR_close 57
#define __NR_vhangup 58
#define __NR_pipe2 59
#define __NR_quotactl 60
#define __NR_getdents64 61
#define __NR3264_lseek 62
#define __NR_read 63
#define __NR_write 64
#define __NR_readv 65
#define __NR_writev 66
#define __NR_pread64 67
#define __NR_pwrite64 68
#define __NR_preadv 69
#define __NR_pwritev 70
#define __NR3264_sendfile 71
#define __NR_pselect6 72
#define __NR_ppoll 73
#define __NR_signalfd4 74
#define __NR_vmsplice 75
#define __NR_splice 76
#define __NR_tee 77
#define __NR_readlinkat 78
#define __NR_sync 81
#define __NR_fsync 82
#define __NR_fdatasync 83
#define __NR_sync_file_range 84
#define __NR_timerfd_create 85
#define __NR_timerfd_settime 86
#define __NR_timerfd_gettime 87
#define __NR_utimensat 88
#define __NR_acct 89
#define __NR_capget 90
#define __NR_capset 91
#define __NR_personality 92
#define __NR_exit 93
#define __NR_exit_group 94
#define __NR_waitid 95
#define __NR_set_tid_address 96
#define __NR_unshare 97
#define __NR_futex 98
#define __NR_set_robust_list 99
#define __NR_get_robust_list 100
#define __NR_nanosleep 101
#define __NR_getitimer 102
#define __NR_setitimer 103
#define __NR_kexec_load 104
#define __NR_init_module 105
#define __NR_delete_module 106
#define __NR_timer_create 107
#define __NR_timer_gettime 108
#define __NR_timer_getoverrun 109
#define __NR_timer_settime 110
#define __NR_timer_delete 111
#define __NR_clock_settime 112
#define __NR_clock_gettime 113
#define __NR_clock_getres 114
#define __NR_clock_nanosleep 115
#define __NR_syslog 116
#define __NR_ptrace 117
#define __NR_sched_setparam 118
#define __NR_sched_setscheduler 119
#define __NR_sched_getscheduler 120
#define __NR_sched_getparam 121
#define __NR_sched_setaffinity 122
#define __NR_sched_getaffinity 123
#define __NR_sched_yield 124
#define __NR_sched_get_priority_max 125
#define __NR_sched_get_priority_min 126
#define __NR_sched_rr_get_interval 127
#define __NR_restart_syscall 128
#define __NR_kill 129
#define __NR_tkill 130
#define __NR_tgkill 131
#define __NR_sigaltstack 132
#define __NR_rt_sigsuspend 133
#define __NR_rt_sigaction 134
#define __NR_rt_sigprocmask 135
#define __NR_rt_sigpending 136
#define __NR_rt_sigtimedwait 137
#define __NR_rt_sigqueueinfo 138
#define __NR_rt_sigreturn 139
#define __NR_setpriority 140
#define __NR_getpriority 141
#define __NR_reboot 142
#define __NR_setregid 143
#define __NR_setgid 144
#define __NR_setreuid 145
#define __NR_setuid 146
#define __NR_setresuid 147
#define __NR_getresuid 148
#define __NR_setresgid 149
#define __NR_getresgid 150
#define __NR_setfsuid 151
#define __NR_setfsgid 152
#define __NR_times 153
#define __NR_setpgid 154
#define __NR_getpgid 155
#define __NR_getsid 156
#define __NR_setsid 157
#define __NR_getgroups 158
#define __NR_setgroups 159
#define __NR_uname 160
#define __NR_sethostname 161
#define __NR_setdomainname 162
#define __NR_getrusage 165
#define __NR_umask 166
#define __NR_prctl 167
#define __NR_getcpu 168
#define __NR_gettimeofday 169
#define __NR_settimeofday 170
#define __NR_adjtimex 171
#define __NR_getpid 172
#define __NR_getppid 173
#define __NR_getuid 174
#define __NR_geteuid 175
#define __NR_getgid 176
#define __NR_getegid 177
#define __NR_gettid 178
#define __NR_sysinfo 179
#define __NR_mq_open 180
#define __NR_mq_unlink 181
#define __NR_mq_timedsend 182
#define __NR_mq_timedreceive 183
#define __NR_mq_notify 184
#define __NR_mq_getsetattr 185
#define __NR_msgget 186
#define __NR_msgctl 187
#define __NR_msgrcv 188
#define __NR_msgsnd 189
#define __NR_semget 190
#define __NR_semctl 191
#define __NR_semtimedop 192
#define __NR_semop 193
#define __NR_shmget 194
#define __NR_shmctl 195
#define __NR_shmat 196
#define __NR_shmdt 197
#define __NR_socket 198
#define __NR_socketpair 199
#define __NR_bind 200
#define __NR_listen 201
#define __NR_accept 202
#define __NR_connect 203
#define __NR_getsockname 204
#define __NR_getpeername 205
#define __NR_sendto 206
#define __NR_recvfrom 207
#define __NR_setsockopt 208
#define __NR_getsockopt 209
#define __NR_shutdown 210
#define __NR_sendmsg 211
#define __NR_recvmsg 212
#define __NR_readahead 213
#define __NR_brk 214
#define __NR_munmap 215
#define __NR_mremap 216
#define __NR_add_key 217
#define __NR_request_key 218
#define __NR_keyctl 219
#define __NR_clone 220
#define __NR_execve 221
#define __NR3264_mmap 222
#define __NR3264_fadvise64 223
#define __NR_swapon 224
#define __NR_swapoff 225
#define __NR_mprotect 226
#define __NR_msync 227
#define __NR_mlock 228
#define __NR_munlock 229
#define __NR_mlockall 230
#define __NR_munlockall 231
#define __NR_mincore 232
#define __NR_madvise 233
#define __NR_remap_file_pages 234
#define __NR_mbind 235
#define __NR_get_mempolicy 236
#define __NR_set_mempolicy 237
#define __NR_migrate_pages 238
#define __NR_move_pages 239
#define __NR_rt_tgsigqueueinfo 240
#define __NR_perf_event_open 241
#define __NR_accept4 242
#define __NR_recvmmsg 243
#define __NR_arch_specific_syscall 244
#define __NR_wait4 260
#define __NR_prlimit64 261
#define __NR_fanotify_init 262
#define __NR_fanotify_mark 263
#define __NR_name_to_handle_at 264
#define __NR_open_by_handle_at 265
#define __NR_clock_adjtime 266
#define __NR_syncfs 267
#define __NR_setns 268
#define __NR_sendmmsg 269
#define __NR_process_vm_readv 270
#define __NR_process_vm_writev 271
#define __NR_kcmp 272
#define __NR_finit_module 273
#define __NR_sched_setattr 274
#define __NR_sched_getattr 275
#define __NR_renameat2 276
#define __NR_seccomp 277
#define __NR_getrandom 278
#define __NR_memfd_create 279
#define __NR_bpf 280
#define __NR_execveat 281
#define __NR_userfaultfd 282
#define __NR_membarrier 283
#define __NR_mlock2 284
#define __NR_copy_file_range 285
#define __NR_preadv2 286
#define __NR_pwritev2 287
#define __NR_pkey_mprotect 288
#define __NR_pkey_alloc 289
#define __NR_pkey_free 290
#define __NR_statx 291
#define __NR_io_pgetevents 292
#define __NR_rseq 293
#define __NR_kexec_file_load 294
#define __NR_pidfd_send_signal 424
#define __NR_io_uring_setup 425
#define __NR_io_uring_enter 426
#define __NR_io_uring_register 427
#define __NR_open_tree 428
#define __NR_move_mount 429
#define __NR_fsopen 430
#define __NR_fsconfig 431
#define __NR_fsmount 432
#define __NR_fspick 433
#define __NR_pidfd_open 434
#define __NR_clone3 435
#define __NR_close_range 436
#define __NR_openat2 437
#define __NR_pidfd_getfd 438
#define __NR_faccessat2 439
#define __NR_process_madvise 440
#define __NR_epoll_pwait2 441
#define __NR_mount_setattr 442
#define __NR_quotactl_fd 443
#define __NR_landlock_create_ruleset 444
#define __NR_landlock_add_rule 445
#define __NR_landlock_restrict_self 446
#define __NR_process_mrelease 448
#define __NR_futex_waitv 449
#define __NR_set_mempolicy_home_node 450
#define __NR_cachestat 451
#define __NR_fchmodat2 452
#define __NR_map_shadow_stack 453
#define __NR_futex_wake 454
#define __NR_futex_wait 455
#define __NR_futex_requeue 456
#define __NR_fcntl __NR3264_fcntl
#define __NR_statfs __NR3264_statfs
#define __NR_fstatfs __NR3264_fstatfs
#define __NR_truncate __NR3264_truncate
#define __NR_ftruncate __NR3264_ftruncate
#define __NR_lseek __NR3264_lseek
#define __NR_sendfile __NR3264_sendfile
#define __NR_mmap __NR3264_mmap
#define __NR_fadvise64 __NR3264_fadvise64

View file

@ -1,24 +0,0 @@
#define ELF_NGREG 45
#define ELF_NFPREG 34
struct user_regs_struct {
unsigned long regs[32];
unsigned long orig_a0;
unsigned long csr_era;
unsigned long csr_badv;
unsigned long reserved[10];
};
struct user_fp_struct {
unsigned long fpr[32];
unsigned long fcc;
unsigned int fcsr;
};
typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG];
typedef union {
double d;
float f;
} elf_fpreg_t;
typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];

View file

@ -1,13 +0,0 @@
__asm__(
".text \n"
".global " START "\n"
".type " START ", @function\n"
START ":\n"
" move $fp, $zero\n"
" move $a0, $sp\n"
".weak _DYNAMIC\n"
".hidden _DYNAMIC\n"
" la.local $a1, _DYNAMIC\n"
" bstrins.d $sp, $zero, 3, 0\n"
" b " START "_c\n"
);

View file

@ -1,11 +0,0 @@
static inline uintptr_t __get_tp()
{
register uintptr_t tp __asm__("tp");
__asm__ ("" : "=r" (tp) );
return tp;
}
#define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0
#define DTP_OFFSET 0
#define MC_PC __pc

View file

@ -1,30 +0,0 @@
#ifdef __loongarch_soft_float
#define FP_SUFFIX "-sf"
#elif defined __loongarch_single_float
#define FP_SUFFIX "-sp"
#else
#define FP_SUFFIX ""
#endif
#define LDSO_ARCH "loongarch64" FP_SUFFIX
#define TPOFF_K 0
#define REL_PLT R_LARCH_JUMP_SLOT
#define REL_COPY R_LARCH_COPY
#define REL_DTPMOD R_LARCH_TLS_DTPMOD64
#define REL_DTPOFF R_LARCH_TLS_DTPREL64
#define REL_TPOFF R_LARCH_TLS_TPREL64
#define REL_RELATIVE R_LARCH_RELATIVE
#define REL_SYMBOLIC R_LARCH_64
#define REL_TLSDESC R_LARCH_TLS_DESC64
#define CRTJMP(pc,sp) __asm__ __volatile__( \
"move $sp, %1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" )
#define GETFUNCSYM(fp, sym, got) __asm__ ( \
".hidden " #sym "\n" \
".align 8 \n" \
" la.local $t1, "#sym" \n" \
" move %0, $t1 \n" \
: "=r"(*(fp)) : : "memory" )

View file

@ -1,137 +0,0 @@
#define __SYSCALL_LL_E(x) (x)
#define __SYSCALL_LL_O(x) (x)
#define SYSCALL_CLOBBERLIST \
"$t0", "$t1", "$t2", "$t3", \
"$t4", "$t5", "$t6", "$t7", "$t8", "memory"
static inline long __syscall0(long n)
{
register long a7 __asm__("$a7") = n;
register long a0 __asm__("$a0");
__asm__ __volatile__ (
"syscall 0"
: "=r"(a0)
: "r"(a7)
: SYSCALL_CLOBBERLIST);
return a0;
}
static inline long __syscall1(long n, long a)
{
register long a7 __asm__("$a7") = n;
register long a0 __asm__("$a0") = a;
__asm__ __volatile__ (
"syscall 0"
: "+r"(a0)
: "r"(a7)
: SYSCALL_CLOBBERLIST);
return a0;
}
static inline long __syscall2(long n, long a, long b)
{
register long a7 __asm__("$a7") = n;
register long a0 __asm__("$a0") = a;
register long a1 __asm__("$a1") = b;
__asm__ __volatile__ (
"syscall 0"
: "+r"(a0)
: "r"(a7), "r"(a1)
: SYSCALL_CLOBBERLIST);
return a0;
}
static inline long __syscall3(long n, long a, long b, long c)
{
register long a7 __asm__("$a7") = n;
register long a0 __asm__("$a0") = a;
register long a1 __asm__("$a1") = b;
register long a2 __asm__("$a2") = c;
__asm__ __volatile__ (
"syscall 0"
: "+r"(a0)
: "r"(a7), "r"(a1), "r"(a2)
: SYSCALL_CLOBBERLIST);
return a0;
}
static inline long __syscall4(long n, long a, long b, long c, long d)
{
register long a7 __asm__("$a7") = n;
register long a0 __asm__("$a0") = a;
register long a1 __asm__("$a1") = b;
register long a2 __asm__("$a2") = c;
register long a3 __asm__("$a3") = d;
__asm__ __volatile__ (
"syscall 0"
: "+r"(a0)
: "r"(a7), "r"(a1), "r"(a2), "r"(a3)
: SYSCALL_CLOBBERLIST);
return a0;
}
static inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
register long a7 __asm__("$a7") = n;
register long a0 __asm__("$a0") = a;
register long a1 __asm__("$a1") = b;
register long a2 __asm__("$a2") = c;
register long a3 __asm__("$a3") = d;
register long a4 __asm__("$a4") = e;
__asm__ __volatile__ (
"syscall 0"
: "+r"(a0)
: "r"(a7), "r"(a1), "r"(a2), "r"(a3), "r"(a4)
: SYSCALL_CLOBBERLIST);
return a0;
}
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
register long a7 __asm__("$a7") = n;
register long a0 __asm__("$a0") = a;
register long a1 __asm__("$a1") = b;
register long a2 __asm__("$a2") = c;
register long a3 __asm__("$a3") = d;
register long a4 __asm__("$a4") = e;
register long a5 __asm__("$a5") = f;
__asm__ __volatile__ (
"syscall 0"
: "+r"(a0)
: "r"(a7), "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5)
: SYSCALL_CLOBBERLIST);
return a0;
}
static inline long __syscall7(long n, long a, long b, long c, long d, long e, long f, long g)
{
register long a7 __asm__("$a7") = n;
register long a0 __asm__("$a0") = a;
register long a1 __asm__("$a1") = b;
register long a2 __asm__("$a2") = c;
register long a3 __asm__("$a3") = d;
register long a4 __asm__("$a4") = e;
register long a5 __asm__("$a5") = f;
register long a6 __asm__("$a6") = g;
__asm__ __volatile__ (
"syscall 0"
: "+r"(a0)
: "r"(a7), "r"(a1), "r"(a2), "r"(a3), "r"(a4), "r"(a5), "r"(a6)
: SYSCALL_CLOBBERLIST);
return a0;
}
#define VDSO_USEFUL
#define VDSO_CGT_SYM "__vdso_clock_gettime"
#define VDSO_CGT_VER "LINUX_5.10"
#define IPC_64 0

View file

@ -1,2 +0,0 @@
#define POLLWRNORM POLLOUT
#define POLLWRBAND 256

2
arch/m68k/bits/posix.h Normal file
View file

@ -0,0 +1,2 @@
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V7_ILP32_OFFBIG 1

View file

@ -1,3 +1,5 @@
#undef __WORDSIZE
#define __WORDSIZE 32
#define PT_D1 0 #define PT_D1 0
#define PT_D2 1 #define PT_D2 1
#define PT_D3 2 #define PT_D3 2

20
arch/m68k/bits/stdint.h Normal file
View file

@ -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

View file

@ -405,19 +405,3 @@
#define __NR_fsmount 432 #define __NR_fsmount 432
#define __NR_fspick 433 #define __NR_fspick 433
#define __NR_pidfd_open 434 #define __NR_pidfd_open 434
#define __NR_clone3 435
#define __NR_close_range 436
#define __NR_openat2 437
#define __NR_pidfd_getfd 438
#define __NR_faccessat2 439
#define __NR_process_madvise 440
#define __NR_epoll_pwait2 441
#define __NR_mount_setattr 442
#define __NR_landlock_create_ruleset 444
#define __NR_landlock_add_rule 445
#define __NR_landlock_restrict_self 446
#define __NR_process_mrelease 448
#define __NR_futex_waitv 449
#define __NR_set_mempolicy_home_node 450
#define __NR_cachestat 451
#define __NR_fchmodat2 452

View file

@ -1,12 +1,13 @@
static inline uintptr_t __get_tp() static inline struct pthread *__pthread_self()
{ {
return __syscall(SYS_get_thread_area); uintptr_t tp = __syscall(SYS_get_thread_area);
return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
} }
#define TLS_ABOVE_TP #define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0 #define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000 #define DTP_OFFSET 0x8000
#define MC_PC gregs[R_PC] #define MC_PC gregs[R_PC]

View file

@ -87,4 +87,5 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
return d0; return d0;
} }
#define SYSCALL_USE_SOCKETCALL
#define SYSCALL_IPC_BROKEN_MODE #define SYSCALL_IPC_BROKEN_MODE

View file

@ -0,0 +1,2 @@
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V7_ILP32_OFFBIG 1

View file

@ -0,0 +1,3 @@
#undef __WORDSIZE
#define __WORDSIZE 32
/* FIXME */

View file

@ -46,6 +46,7 @@ typedef struct __ucontext {
#define SA_RESTART 0x10000000 #define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000 #define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000 #define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
#endif #endif

View file

@ -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

View file

@ -427,19 +427,4 @@
#define __NR_fspick 433 #define __NR_fspick 433
#define __NR_pidfd_open 434 #define __NR_pidfd_open 434
#define __NR_clone3 435 #define __NR_clone3 435
#define __NR_close_range 436
#define __NR_openat2 437
#define __NR_pidfd_getfd 438
#define __NR_faccessat2 439
#define __NR_process_madvise 440
#define __NR_epoll_pwait2 441
#define __NR_mount_setattr 442
#define __NR_landlock_create_ruleset 444
#define __NR_landlock_add_rule 445
#define __NR_landlock_restrict_self 446
#define __NR_process_mrelease 448
#define __NR_futex_waitv 449
#define __NR_set_mempolicy_home_node 450
#define __NR_cachestat 451
#define __NR_fchmodat2 452

View file

@ -1,8 +1,10 @@
static inline uintptr_t __get_tp() static inline struct pthread *__pthread_self()
{ {
uintptr_t tp; struct pthread *self;
__asm__ ("ori %0, r21, 0" : "=r" (tp) ); __asm__ ("ori %0, r21, 0" : "=r" (self) );
return tp; return self;
} }
#define TP_ADJ(p) (p)
#define MC_PC regs.pc #define MC_PC regs.pc

View file

@ -95,5 +95,3 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
} }
#define SYSCALL_IPC_BROKEN_MODE #define SYSCALL_IPC_BROKEN_MODE
#undef SYS_socketcall

2
arch/mips/bits/posix.h Normal file
View file

@ -0,0 +1,2 @@
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V7_ILP32_OFFBIG 1

View file

@ -1,3 +1,6 @@
#undef __WORDSIZE
#define __WORDSIZE 32
#define EF_R0 6 #define EF_R0 6
#define EF_R1 7 #define EF_R1 7
#define EF_R2 8 #define EF_R2 8

View file

@ -66,6 +66,7 @@ typedef struct __ucontext {
#define SA_RESTART 0x10000000 #define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000 #define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000 #define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
#undef SIG_BLOCK #undef SIG_BLOCK
#undef SIG_UNBLOCK #undef SIG_UNBLOCK
@ -92,7 +93,7 @@ typedef struct __ucontext {
#define SIGTRAP 5 #define SIGTRAP 5
#define SIGABRT 6 #define SIGABRT 6
#define SIGIOT SIGABRT #define SIGIOT SIGABRT
#define SIGEMT 7 #define SIGSTKFLT 7
#define SIGFPE 8 #define SIGFPE 8
#define SIGKILL 9 #define SIGKILL 9
#define SIGBUS 10 #define SIGBUS 10

20
arch/mips/bits/stdint.h Normal file
View file

@ -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

View file

@ -408,19 +408,4 @@
#define __NR_fspick 4433 #define __NR_fspick 4433
#define __NR_pidfd_open 4434 #define __NR_pidfd_open 4434
#define __NR_clone3 4435 #define __NR_clone3 4435
#define __NR_close_range 4436
#define __NR_openat2 4437
#define __NR_pidfd_getfd 4438
#define __NR_faccessat2 4439
#define __NR_process_madvise 4440
#define __NR_epoll_pwait2 4441
#define __NR_mount_setattr 4442
#define __NR_landlock_create_ruleset 4444
#define __NR_landlock_add_rule 4445
#define __NR_landlock_restrict_self 4446
#define __NR_process_mrelease 4448
#define __NR_futex_waitv 4449
#define __NR_set_mempolicy_home_node 4450
#define __NR_cachestat 4451
#define __NR_fchmodat2 4452

View file

@ -4,7 +4,10 @@ struct k_sigaction {
unsigned flags; unsigned flags;
void (*handler)(int); void (*handler)(int);
unsigned long mask[4]; unsigned long mask[4];
void *unused; /* The following field is past the end of the structure the
* kernel will read or write, and exists only to avoid having
* mips-specific preprocessor conditionals in sigaction.c. */
void (*restorer)();
}; };
hidden void __restore(), __restore_rt(); hidden void __restore(), __restore_rt();

View file

@ -1,18 +1,19 @@
static inline uintptr_t __get_tp() static inline struct pthread *__pthread_self()
{ {
register uintptr_t tp __asm__("$3");
#if __mips_isa_rev < 2 #if __mips_isa_rev < 2
register char *tp __asm__("$3");
__asm__ (".word 0x7c03e83b" : "=r" (tp) ); __asm__ (".word 0x7c03e83b" : "=r" (tp) );
#else #else
char *tp;
__asm__ ("rdhwr %0, $29" : "=r" (tp) ); __asm__ ("rdhwr %0, $29" : "=r" (tp) );
#endif #endif
return tp; return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
} }
#define TLS_ABOVE_TP #define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0 #define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000 #define DTP_OFFSET 0x8000
#define MC_PC pc #define MC_PC pc

View file

@ -29,7 +29,6 @@
#define NEED_MIPS_GOT_RELOCS 1 #define NEED_MIPS_GOT_RELOCS 1
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP #define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT)) #define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
#define CRTJMP(pc,sp) __asm__ __volatile__( \ #define CRTJMP(pc,sp) __asm__ __volatile__( \

View file

@ -18,26 +18,26 @@
static inline long __syscall0(long n) static inline long __syscall0(long n)
{ {
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"addu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+r"(r2), "=r"(r7)
: "ir"(n), "0"(r2) :
: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); : SYSCALL_CLOBBERLIST, "$8", "$9", "$10");
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall1(long n, long a) static inline long __syscall1(long n, long a)
{ {
register long r4 __asm__("$4") = a; register long r4 __asm__("$4") = a;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"addu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4) : "r"(r4)
: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); : SYSCALL_CLOBBERLIST, "$8", "$9", "$10");
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall2(long n, long a, long b) static inline long __syscall2(long n, long a, long b)
@ -45,13 +45,13 @@ static inline long __syscall2(long n, long a, long b)
register long r4 __asm__("$4") = a; register long r4 __asm__("$4") = a;
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"addu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5) : "r"(r4), "r"(r5)
: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); : SYSCALL_CLOBBERLIST, "$8", "$9", "$10");
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall3(long n, long a, long b, long c) static inline long __syscall3(long n, long a, long b, long c)
@ -60,13 +60,13 @@ static inline long __syscall3(long n, long a, long b, long c)
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"addu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); : SYSCALL_CLOBBERLIST, "$8", "$9", "$10");
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall4(long n, long a, long b, long c, long d) static inline long __syscall4(long n, long a, long b, long c, long d)
@ -75,13 +75,13 @@ static inline long __syscall4(long n, long a, long b, long c, long d)
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"addu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "+r"(r7) : "+r"(r2), "+r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); : SYSCALL_CLOBBERLIST, "$8", "$9", "$10");
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall5(long n, long a, long b, long c, long d, long e) static inline long __syscall5(long n, long a, long b, long c, long d, long e)
@ -91,15 +91,15 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e)
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r8 __asm__("$8") = e; register long r8 __asm__("$8") = e;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"subu $sp,$sp,32 ; sw $8,16($sp) ; " "subu $sp,$sp,32 ; sw $8,16($sp) ; "
"addu $2,$0,%3 ; syscall ;" "syscall ;"
"addu $sp,$sp,32" "addu $sp,$sp,32"
: "=&r"(r2), "+r"(r7), "+r"(r8) : "+r"(r2), "+r"(r7), "+r"(r8)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST, "$9", "$10"); : SYSCALL_CLOBBERLIST, "$9", "$10");
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
@ -110,15 +110,15 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r8 __asm__("$8") = e; register long r8 __asm__("$8") = e;
register long r9 __asm__("$9") = f; register long r9 __asm__("$9") = f;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; " "subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; "
"addu $2,$0,%4 ; syscall ;" "syscall ;"
"addu $sp,$sp,32" "addu $sp,$sp,32"
: "=&r"(r2), "+r"(r7), "+r"(r8), "+r"(r9) : "+r"(r2), "+r"(r7), "+r"(r8), "+r"(r9)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST, "$10"); : SYSCALL_CLOBBERLIST, "$10");
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall7(long n, long a, long b, long c, long d, long e, long f, long g) static inline long __syscall7(long n, long a, long b, long c, long d, long e, long f, long g)
@ -130,15 +130,15 @@ static inline long __syscall7(long n, long a, long b, long c, long d, long e, lo
register long r8 __asm__("$8") = e; register long r8 __asm__("$8") = e;
register long r9 __asm__("$9") = f; register long r9 __asm__("$9") = f;
register long r10 __asm__("$10") = g; register long r10 __asm__("$10") = g;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; sw $10,24($sp) ; " "subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; sw $10,24($sp) ; "
"addu $2,$0,%5 ; syscall ;" "syscall ;"
"addu $sp,$sp,32" "addu $sp,$sp,32"
: "=&r"(r2), "+r"(r7), "+r"(r8), "+r"(r9), "+r"(r10) : "+r"(r2), "+r"(r7), "+r"(r8), "+r"(r9), "+r"(r10)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
#define VDSO_USEFUL #define VDSO_USEFUL
@ -149,5 +149,3 @@ static inline long __syscall7(long n, long a, long b, long c, long d, long e, lo
#define SO_SNDTIMEO_OLD 0x1005 #define SO_SNDTIMEO_OLD 0x1005
#define SO_RCVTIMEO_OLD 0x1006 #define SO_RCVTIMEO_OLD 0x1006
#undef SYS_socketcall

View file

@ -13,7 +13,7 @@
#define O_ASYNC 010000 #define O_ASYNC 010000
#define O_DIRECT 0100000 #define O_DIRECT 0100000
#define O_LARGEFILE 020000 #define O_LARGEFILE 0
#define O_NOATIME 01000000 #define O_NOATIME 01000000
#define O_PATH 010000000 #define O_PATH 010000000
#define O_TMPFILE 020200000 #define O_TMPFILE 020200000

2
arch/mips64/bits/posix.h Normal file
View file

@ -0,0 +1,2 @@
#define _POSIX_V6_LP64_OFFBIG 1
#define _POSIX_V7_LP64_OFFBIG 1

View file

@ -1,3 +1,6 @@
#undef __WORDSIZE
#define __WORDSIZE 64
#define EF_R0 0 #define EF_R0 0
#define EF_R1 1 #define EF_R1 1
#define EF_R2 2 #define EF_R2 2

View file

@ -85,6 +85,7 @@ typedef struct __ucontext {
#define SA_RESTART 0x10000000 #define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000 #define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000 #define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
#undef SIG_BLOCK #undef SIG_BLOCK
#undef SIG_UNBLOCK #undef SIG_UNBLOCK
@ -111,7 +112,7 @@ typedef struct __ucontext {
#define SIGTRAP 5 #define SIGTRAP 5
#define SIGABRT 6 #define SIGABRT 6
#define SIGIOT SIGABRT #define SIGIOT SIGABRT
#define SIGEMT 7 #define SIGSTKFLT 7
#define SIGFPE 8 #define SIGFPE 8
#define SIGKILL 9 #define SIGKILL 9
#define SIGBUS 10 #define SIGBUS 10

20
arch/mips64/bits/stdint.h Normal file
View file

@ -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 INT64_MIN
#define INTPTR_MAX INT64_MAX
#define UINTPTR_MAX UINT64_MAX
#define PTRDIFF_MIN INT64_MIN
#define PTRDIFF_MAX INT64_MAX
#define SIZE_MAX UINT64_MAX

View file

@ -338,19 +338,4 @@
#define __NR_fspick 5433 #define __NR_fspick 5433
#define __NR_pidfd_open 5434 #define __NR_pidfd_open 5434
#define __NR_clone3 5435 #define __NR_clone3 5435
#define __NR_close_range 5436
#define __NR_openat2 5437
#define __NR_pidfd_getfd 5438
#define __NR_faccessat2 5439
#define __NR_process_madvise 5440
#define __NR_epoll_pwait2 5441
#define __NR_mount_setattr 5442
#define __NR_landlock_create_ruleset 5444
#define __NR_landlock_add_rule 5445
#define __NR_landlock_restrict_self 5446
#define __NR_process_mrelease 5448
#define __NR_futex_waitv 5449
#define __NR_set_mempolicy_home_node 5450
#define __NR_cachestat 5451
#define __NR_fchmodat2 5452

View file

@ -4,7 +4,7 @@ struct k_sigaction {
unsigned flags; unsigned flags;
void (*handler)(int); void (*handler)(int);
unsigned long mask[2]; unsigned long mask[2];
void *unused; void (*restorer)();
}; };
hidden void __restore(), __restore_rt(); hidden void __restore(), __restore_rt();

View file

@ -1,19 +1,19 @@
static inline uintptr_t __get_tp() static inline struct pthread *__pthread_self()
{ {
#if __mips_isa_rev < 2 #if __mips_isa_rev < 2
register uintptr_t tp __asm__("$3"); register char *tp __asm__("$3");
__asm__ (".word 0x7c03e83b" : "=r" (tp) ); __asm__ (".word 0x7c03e83b" : "=r" (tp) );
#else #else
uintptr_t tp; char *tp;
__asm__ ("rdhwr %0, $29" : "=r" (tp) ); __asm__ ("rdhwr %0, $29" : "=r" (tp) );
#endif #endif
return tp; return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
} }
#define TLS_ABOVE_TP #define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0 #define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000 #define DTP_OFFSET 0x8000
#define MC_PC pc #define MC_PC pc

View file

@ -38,7 +38,6 @@
#define NEED_MIPS_GOT_RELOCS 1 #define NEED_MIPS_GOT_RELOCS 1
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP #define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT)) #define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
#define CRTJMP(pc,sp) __asm__ __volatile__( \ #define CRTJMP(pc,sp) __asm__ __volatile__( \

View file

@ -16,26 +16,26 @@
static inline long __syscall0(long n) static inline long __syscall0(long n)
{ {
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+&r"(r2), "=r"(r7)
: "ir"(n), "0"(r2) :
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall1(long n, long a) static inline long __syscall1(long n, long a)
{ {
register long r4 __asm__("$4") = a; register long r4 __asm__("$4") = a;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+&r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4) : "r"(r4)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall2(long n, long a, long b) static inline long __syscall2(long n, long a, long b)
@ -43,14 +43,14 @@ static inline long __syscall2(long n, long a, long b)
register long r4 __asm__("$4") = a; register long r4 __asm__("$4") = a;
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+&r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5) : "r"(r4), "r"(r5)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall3(long n, long a, long b, long c) static inline long __syscall3(long n, long a, long b, long c)
@ -59,14 +59,14 @@ static inline long __syscall3(long n, long a, long b, long c)
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+&r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall4(long n, long a, long b, long c, long d) static inline long __syscall4(long n, long a, long b, long c, long d)
@ -75,14 +75,14 @@ static inline long __syscall4(long n, long a, long b, long c, long d)
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "+r"(r7) : "+&r"(r2), "+r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall5(long n, long a, long b, long c, long d, long e) static inline long __syscall5(long n, long a, long b, long c, long d, long e)
@ -92,14 +92,14 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e)
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r8 __asm__("$8") = e; register long r8 __asm__("$8") = e;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "+r"(r7) : "+&r"(r2), "+r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6), "r"(r8) : "r"(r4), "r"(r5), "r"(r6), "r"(r8)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
@ -110,14 +110,14 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r8 __asm__("$8") = e; register long r8 __asm__("$8") = e;
register long r9 __asm__("$9") = f; register long r9 __asm__("$9") = f;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "+r"(r7) : "+&r"(r2), "+r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9) : "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
#define VDSO_USEFUL #define VDSO_USEFUL

View file

@ -0,0 +1,2 @@
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V7_ILP32_OFFBIG 1

View file

@ -1,3 +1,6 @@
#undef __WORDSIZE
#define __WORDSIZE 64
#define EF_R0 0 #define EF_R0 0
#define EF_R1 1 #define EF_R1 1
#define EF_R2 2 #define EF_R2 2

View file

@ -85,6 +85,7 @@ typedef struct __ucontext {
#define SA_RESTART 0x10000000 #define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000 #define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000 #define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
#undef SIG_BLOCK #undef SIG_BLOCK
#undef SIG_UNBLOCK #undef SIG_UNBLOCK
@ -111,7 +112,7 @@ typedef struct __ucontext {
#define SIGTRAP 5 #define SIGTRAP 5
#define SIGABRT 6 #define SIGABRT 6
#define SIGIOT SIGABRT #define SIGIOT SIGABRT
#define SIGEMT 7 #define SIGSTKFLT 7
#define SIGFPE 8 #define SIGFPE 8
#define SIGKILL 9 #define SIGKILL 9
#define SIGBUS 10 #define SIGBUS 10

View file

@ -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

View file

@ -362,19 +362,4 @@
#define __NR_fspick 6433 #define __NR_fspick 6433
#define __NR_pidfd_open 6434 #define __NR_pidfd_open 6434
#define __NR_clone3 6435 #define __NR_clone3 6435
#define __NR_close_range 6436
#define __NR_openat2 6437
#define __NR_pidfd_getfd 6438
#define __NR_faccessat2 6439
#define __NR_process_madvise 6440
#define __NR_epoll_pwait2 6441
#define __NR_mount_setattr 6442
#define __NR_landlock_create_ruleset 6444
#define __NR_landlock_add_rule 6445
#define __NR_landlock_restrict_self 6446
#define __NR_process_mrelease 6448
#define __NR_futex_waitv 6449
#define __NR_set_mempolicy_home_node 6450
#define __NR_cachestat 6451
#define __NR_fchmodat2 6452

View file

@ -4,7 +4,7 @@ struct k_sigaction {
unsigned flags; unsigned flags;
void (*handler)(int); void (*handler)(int);
unsigned long mask[4]; unsigned long mask[4];
void *unused; void (*restorer)();
}; };
hidden void __restore(), __restore_rt(); hidden void __restore(), __restore_rt();

View file

@ -1,19 +1,19 @@
static inline uintptr_t __get_tp() static inline struct pthread *__pthread_self()
{ {
#if __mips_isa_rev < 2 #if __mips_isa_rev < 2
register uintptr_t tp __asm__("$3"); register char *tp __asm__("$3");
__asm__ (".word 0x7c03e83b" : "=r" (tp) ); __asm__ (".word 0x7c03e83b" : "=r" (tp) );
#else #else
uintptr_t tp; char *tp;
__asm__ ("rdhwr %0, $29" : "=r" (tp) ); __asm__ ("rdhwr %0, $29" : "=r" (tp) );
#endif #endif
return tp; return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
} }
#define TLS_ABOVE_TP #define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0 #define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000 #define DTP_OFFSET 0x8000
#define MC_PC pc #define MC_PC pc

View file

@ -29,7 +29,6 @@
#define NEED_MIPS_GOT_RELOCS 1 #define NEED_MIPS_GOT_RELOCS 1
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP #define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT)) #define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
#define CRTJMP(pc,sp) __asm__ __volatile__( \ #define CRTJMP(pc,sp) __asm__ __volatile__( \

View file

@ -16,26 +16,26 @@
static inline long __syscall0(long n) static inline long __syscall0(long n)
{ {
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+&r"(r2), "=r"(r7)
: "ir"(n), "0"(r2) :
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall1(long n, long a) static inline long __syscall1(long n, long a)
{ {
register long r4 __asm__("$4") = a; register long r4 __asm__("$4") = a;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+&r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4) : "r"(r4)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall2(long n, long a, long b) static inline long __syscall2(long n, long a, long b)
@ -43,14 +43,13 @@ static inline long __syscall2(long n, long a, long b)
register long r4 __asm__("$4") = a; register long r4 __asm__("$4") = a;
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+&r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5) : "r"(r4), "r"(r5)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall3(long n, long a, long b, long c) static inline long __syscall3(long n, long a, long b, long c)
@ -59,14 +58,13 @@ static inline long __syscall3(long n, long a, long b, long c)
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7"); register long r7 __asm__("$7");
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "=r"(r7) : "+&r"(r2), "=r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall4(long n, long a, long b, long c, long d) static inline long __syscall4(long n, long a, long b, long c, long d)
@ -75,14 +73,13 @@ static inline long __syscall4(long n, long a, long b, long c, long d)
register long r5 __asm__("$5") = b; register long r5 __asm__("$5") = b;
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "+r"(r7) : "+&r"(r2), "+r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6) : "r"(r4), "r"(r5), "r"(r6)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall5(long n, long a, long b, long c, long d, long e) static inline long __syscall5(long n, long a, long b, long c, long d, long e)
@ -92,14 +89,13 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e)
register long r6 __asm__("$6") = c; register long r6 __asm__("$6") = c;
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r8 __asm__("$8") = e; register long r8 __asm__("$8") = e;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "+r"(r7) : "+&r"(r2), "+r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6), "r"(r8) : "r"(r4), "r"(r5), "r"(r6), "r"(r8)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
@ -110,14 +106,13 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
register long r7 __asm__("$7") = d; register long r7 __asm__("$7") = d;
register long r8 __asm__("$8") = e; register long r8 __asm__("$8") = e;
register long r9 __asm__("$9") = f; register long r9 __asm__("$9") = f;
register long r2 __asm__("$2"); register long r2 __asm__("$2") = n;
__asm__ __volatile__ ( __asm__ __volatile__ (
"daddu $2,$0,%2 ; syscall" "syscall"
: "=&r"(r2), "+r"(r7) : "+&r"(r2), "+r"(r7)
: "ir"(n), "0"(r2), "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9) : "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9)
: SYSCALL_CLOBBERLIST); : SYSCALL_CLOBBERLIST);
return r7 && r2>0 ? -r2 : r2; return r7 ? -r2 : r2;
} }
#define VDSO_USEFUL #define VDSO_USEFUL

2
arch/or1k/bits/posix.h Normal file
View file

@ -0,0 +1,2 @@
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V7_ILP32_OFFBIG 1

3
arch/or1k/bits/reg.h Normal file
View file

@ -0,0 +1,3 @@
#undef __WORDSIZE
#define __WORDSIZE 32
/* FIXME */

View file

@ -43,6 +43,7 @@ typedef struct __ucontext {
#define SA_RESTART 0x10000000 #define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000 #define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000 #define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
#endif #endif

20
arch/or1k/bits/stdint.h Normal file
View file

@ -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

View file

@ -311,19 +311,4 @@
#define __NR_fspick 433 #define __NR_fspick 433
#define __NR_pidfd_open 434 #define __NR_pidfd_open 434
#define __NR_clone3 435 #define __NR_clone3 435
#define __NR_close_range 436
#define __NR_openat2 437
#define __NR_pidfd_getfd 438
#define __NR_faccessat2 439
#define __NR_process_madvise 440
#define __NR_epoll_pwait2 441
#define __NR_mount_setattr 442
#define __NR_landlock_create_ruleset 444
#define __NR_landlock_add_rule 445
#define __NR_landlock_restrict_self 446
#define __NR_process_mrelease 448
#define __NR_futex_waitv 449
#define __NR_set_mempolicy_home_node 450
#define __NR_cachestat 451
#define __NR_fchmodat2 452

View file

@ -1,16 +1,18 @@
static inline uintptr_t __get_tp() /* or1k use variant I, but with the twist that tp points to the end of TCB */
static inline struct pthread *__pthread_self()
{ {
#ifdef __clang__ #ifdef __clang__
uintptr_t tp; char *tp;
__asm__ ("l.ori %0, r10, 0" : "=r" (tp) ); __asm__ ("l.ori %0, r10, 0" : "=r" (tp) );
#else #else
register uintptr_t tp __asm__("r10"); register char *tp __asm__("r10");
__asm__ ("" : "=r" (tp) ); __asm__ ("" : "=r" (tp) );
#endif #endif
return tp; return (struct pthread *) (tp - sizeof(struct pthread));
} }
#define TLS_ABOVE_TP #define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0 #define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
#define MC_PC regs.pc #define MC_PC regs.pc

View file

@ -1,4 +1,4 @@
#if defined(_SOFT_FLOAT) || defined(__NO_FPRS__) #ifdef _SOFT_FLOAT
#define FE_ALL_EXCEPT 0 #define FE_ALL_EXCEPT 0
#define FE_TONEAREST 0 #define FE_TONEAREST 0
#else #else

View file

@ -4,6 +4,7 @@
#define MAP_NORESERVE 0x40 #define MAP_NORESERVE 0x40
#undef MAP_LOCKED #undef MAP_LOCKED
#define MAP_LOCKED 0x80 #define MAP_LOCKED 0x80
#undef MAP_SYNC
#undef MCL_CURRENT #undef MCL_CURRENT
#define MCL_CURRENT 0x2000 #define MCL_CURRENT 0x2000

View file

@ -0,0 +1,2 @@
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V7_ILP32_OFFBIG 1

3
arch/powerpc/bits/reg.h Normal file
View file

@ -0,0 +1,3 @@
#undef __WORDSIZE
#define __WORDSIZE 32
/* FIXME */

View file

@ -8,11 +8,11 @@ struct shmid_ds {
unsigned long __shm_dtime_lo; unsigned long __shm_dtime_lo;
unsigned long __shm_ctime_hi; unsigned long __shm_ctime_hi;
unsigned long __shm_ctime_lo; unsigned long __shm_ctime_lo;
unsigned long __pad1;
size_t shm_segsz; size_t shm_segsz;
pid_t shm_cpid; pid_t shm_cpid;
pid_t shm_lpid; pid_t shm_lpid;
unsigned long shm_nattch; unsigned long shm_nattch;
unsigned long __pad1;
unsigned long __pad2; unsigned long __pad2;
time_t shm_atime; time_t shm_atime;
time_t shm_dtime; time_t shm_dtime;

View file

@ -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

View file

@ -415,19 +415,4 @@
#define __NR_fspick 433 #define __NR_fspick 433
#define __NR_pidfd_open 434 #define __NR_pidfd_open 434
#define __NR_clone3 435 #define __NR_clone3 435
#define __NR_close_range 436
#define __NR_openat2 437
#define __NR_pidfd_getfd 438
#define __NR_faccessat2 439
#define __NR_process_madvise 440
#define __NR_epoll_pwait2 441
#define __NR_mount_setattr 442
#define __NR_landlock_create_ruleset 444
#define __NR_landlock_add_rule 445
#define __NR_landlock_restrict_self 446
#define __NR_process_mrelease 448
#define __NR_futex_waitv 449
#define __NR_set_mempolicy_home_node 450
#define __NR_cachestat 451
#define __NR_fchmodat2 452

View file

@ -1,16 +1,18 @@
static inline uintptr_t __get_tp() static inline struct pthread *__pthread_self()
{ {
register uintptr_t tp __asm__("r2"); register char *tp __asm__("r2");
__asm__ ("" : "=r" (tp) ); __asm__ ("" : "=r" (tp) );
return tp; return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
} }
#define TLS_ABOVE_TP #define TLS_ABOVE_TP
#define GAP_ABOVE_TP 0 #define GAP_ABOVE_TP 0
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
#define TP_OFFSET 0x7000
#define DTP_OFFSET 0x8000 #define DTP_OFFSET 0x8000
// the kernel calls the ip "nip", it's the first saved value after the 32 // the kernel calls the ip "nip", it's the first saved value after the 32
// GPRs. // GPRs.
#define MC_PC gregs[32] #define MC_PC gregs[32]
#define CANARY canary_at_end

View file

@ -1,4 +1,4 @@
#if defined(_SOFT_FLOAT) || defined(__NO_FPRS__) #ifdef _SOFT_FLOAT
#define FP_SUFFIX "-sf" #define FP_SUFFIX "-sf"
#else #else
#define FP_SUFFIX "" #define FP_SUFFIX ""

View file

@ -92,9 +92,3 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
#define SO_RCVTIMEO_OLD 18 #define SO_RCVTIMEO_OLD 18
#define SO_SNDTIMEO_OLD 19 #define SO_SNDTIMEO_OLD 19
#define VDSO_USEFUL
#define VDSO_CGT32_SYM "__kernel_clock_gettime"
#define VDSO_CGT32_VER "LINUX_2.6.15"
#define VDSO_CGT_SYM "__kernel_clock_gettime64"
#define VDSO_CGT_VER "LINUX_5.11"

Some files were not shown because too many files have changed in this diff Show more