diff --git a/expected/wasm32-wasip1-threads/predefined-macros.txt b/expected/wasm32-wasip1-threads/predefined-macros.txt index 36e4ec9f8..be58fcf58 100644 --- a/expected/wasm32-wasip1-threads/predefined-macros.txt +++ b/expected/wasm32-wasip1-threads/predefined-macros.txt @@ -619,7 +619,7 @@ #define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff) #define IN6_IS_ADDR_SITELOCAL(a) ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0xc0) #define IN6_IS_ADDR_UNSPECIFIED(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == 0) -#define IN6_IS_ADDR_V4COMPAT(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && ((uint8_t *) (a))[15] > 1) +#define IN6_IS_ADDR_V4COMPAT(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && !IN6_IS_ADDR_UNSPECIFIED(a) && !IN6_IS_ADDR_LOOPBACK(a)) #define IN6_IS_ADDR_V4MAPPED(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint8_t *) (a))[8] == 0 && ((uint8_t *) (a))[9] == 0 && ((uint8_t *) (a))[10] == 0xff && ((uint8_t *) (a))[11] == 0xff) #define INADDRSZ NS_INADDRSZ #define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001) @@ -657,8 +657,8 @@ #define INTMAX_MIN INT64_MIN #define INTPTR_MAX INT32_MAX #define INTPTR_MIN INT32_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT32_MAX +#define INT_FAST16_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST64_MAX INT64_MAX @@ -1521,6 +1521,9 @@ #define REG_NOTBOL 1 #define REG_NOTEOL 2 #define REG_OK 0 +#define RENAME_EXCHANGE (1 << 1) +#define RENAME_NOREPLACE (1 << 0) +#define RENAME_WHITEOUT (1 << 2) #define RE_DUP_MAX 255 #define RMSGD 0x0001 #define RMSGN 0x0002 @@ -2050,7 +2053,7 @@ #define UINTMAX_C(c) c ## ULL #define UINTMAX_MAX UINT64_MAX #define UINTPTR_MAX UINT32_MAX -#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST16_MAX UINT32_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX #define UINT_FAST8_MAX UINT8_MAX @@ -2271,8 +2274,8 @@ #define _POSIX_TRACE_USER_EVENT_MAX 32 #define _POSIX_TTY_NAME_MAX 9 #define _POSIX_TZNAME_MAX 6 -#define _POSIX_V6_ILP32_OFFBIG (1) -#define _POSIX_V7_ILP32_OFFBIG (1) +#define _POSIX_V6_ILP32_OFFBIG 1 +#define _POSIX_V7_ILP32_OFFBIG 1 #define _POSIX_VDISABLE 0 #define _POSIX_VERSION 200809L #define _PTHREAD_H @@ -3105,7 +3108,7 @@ #define __WINT_MAX__ 2147483647 #define __WINT_TYPE__ int #define __WINT_WIDTH__ 32 -#define __WORDSIZE 64 +#define __WORDSIZE 32 #define __alignas_is_defined 1 #define __alignof_is_defined 1 #define __bitop(x,i,o) ((x)[(i)/8] o (1<<(i)%8)) diff --git a/expected/wasm32-wasip1/predefined-macros.txt b/expected/wasm32-wasip1/predefined-macros.txt index f74f35f7e..39fdaaef1 100644 --- a/expected/wasm32-wasip1/predefined-macros.txt +++ b/expected/wasm32-wasip1/predefined-macros.txt @@ -619,7 +619,7 @@ #define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff) #define IN6_IS_ADDR_SITELOCAL(a) ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0xc0) #define IN6_IS_ADDR_UNSPECIFIED(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == 0) -#define IN6_IS_ADDR_V4COMPAT(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && ((uint8_t *) (a))[15] > 1) +#define IN6_IS_ADDR_V4COMPAT(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && !IN6_IS_ADDR_UNSPECIFIED(a) && !IN6_IS_ADDR_LOOPBACK(a)) #define IN6_IS_ADDR_V4MAPPED(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint8_t *) (a))[8] == 0 && ((uint8_t *) (a))[9] == 0 && ((uint8_t *) (a))[10] == 0xff && ((uint8_t *) (a))[11] == 0xff) #define INADDRSZ NS_INADDRSZ #define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001) @@ -657,8 +657,8 @@ #define INTMAX_MIN INT64_MIN #define INTPTR_MAX INT32_MAX #define INTPTR_MIN INT32_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT32_MAX +#define INT_FAST16_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST64_MAX INT64_MAX @@ -1521,6 +1521,9 @@ #define REG_NOTBOL 1 #define REG_NOTEOL 2 #define REG_OK 0 +#define RENAME_EXCHANGE (1 << 1) +#define RENAME_NOREPLACE (1 << 0) +#define RENAME_WHITEOUT (1 << 2) #define RE_DUP_MAX 255 #define RMSGD 0x0001 #define RMSGN 0x0002 @@ -2048,7 +2051,7 @@ #define UINTMAX_C(c) c ## ULL #define UINTMAX_MAX UINT64_MAX #define UINTPTR_MAX UINT32_MAX -#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST16_MAX UINT32_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX #define UINT_FAST8_MAX UINT8_MAX @@ -2269,8 +2272,8 @@ #define _POSIX_TRACE_USER_EVENT_MAX 32 #define _POSIX_TTY_NAME_MAX 9 #define _POSIX_TZNAME_MAX 6 -#define _POSIX_V6_ILP32_OFFBIG (1) -#define _POSIX_V7_ILP32_OFFBIG (1) +#define _POSIX_V6_ILP32_OFFBIG 1 +#define _POSIX_V7_ILP32_OFFBIG 1 #define _POSIX_VDISABLE 0 #define _POSIX_VERSION 200809L #define _PTHREAD_H @@ -3102,7 +3105,7 @@ #define __WINT_MAX__ 2147483647 #define __WINT_TYPE__ int #define __WINT_WIDTH__ 32 -#define __WORDSIZE 64 +#define __WORDSIZE 32 #define __alignas_is_defined 1 #define __alignof_is_defined 1 #define __bitop(x,i,o) ((x)[(i)/8] o (1<<(i)%8)) diff --git a/expected/wasm32-wasip2/defined-symbols.txt b/expected/wasm32-wasip2/defined-symbols.txt index 6c465b9d6..869ad0583 100644 --- a/expected/wasm32-wasip2/defined-symbols.txt +++ b/expected/wasm32-wasip2/defined-symbols.txt @@ -1570,4 +1570,4 @@ y0f y1 y1f yn -ynf +ynf \ No newline at end of file diff --git a/expected/wasm32-wasip2/predefined-macros.txt b/expected/wasm32-wasip2/predefined-macros.txt index a023c0f17..f80ecaa38 100644 --- a/expected/wasm32-wasip2/predefined-macros.txt +++ b/expected/wasm32-wasip2/predefined-macros.txt @@ -710,7 +710,7 @@ #define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff) #define IN6_IS_ADDR_SITELOCAL(a) ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0xc0) #define IN6_IS_ADDR_UNSPECIFIED(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == 0) -#define IN6_IS_ADDR_V4COMPAT(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && ((uint8_t *) (a))[15] > 1) +#define IN6_IS_ADDR_V4COMPAT(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && !IN6_IS_ADDR_UNSPECIFIED(a) && !IN6_IS_ADDR_LOOPBACK(a)) #define IN6_IS_ADDR_V4MAPPED(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint8_t *) (a))[8] == 0 && ((uint8_t *) (a))[9] == 0 && ((uint8_t *) (a))[10] == 0xff && ((uint8_t *) (a))[11] == 0xff) #define INADDRSZ NS_INADDRSZ #define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001) @@ -748,8 +748,8 @@ #define INTMAX_MIN INT64_MIN #define INTPTR_MAX INT32_MAX #define INTPTR_MIN INT32_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT32_MAX +#define INT_FAST16_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST64_MAX INT64_MAX @@ -1652,6 +1652,9 @@ #define REG_NOTBOL 1 #define REG_NOTEOL 2 #define REG_OK 0 +#define RENAME_EXCHANGE (1 << 1) +#define RENAME_NOREPLACE (1 << 0) +#define RENAME_WHITEOUT (1 << 2) #define RE_DUP_MAX 255 #define RMSGD 0x0001 #define RMSGN 0x0002 @@ -2198,7 +2201,7 @@ #define UINTMAX_C(c) c ## ULL #define UINTMAX_MAX UINT64_MAX #define UINTPTR_MAX UINT32_MAX -#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST16_MAX UINT32_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX #define UINT_FAST8_MAX UINT8_MAX @@ -2420,8 +2423,8 @@ #define _POSIX_TRACE_USER_EVENT_MAX 32 #define _POSIX_TTY_NAME_MAX 9 #define _POSIX_TZNAME_MAX 6 -#define _POSIX_V6_ILP32_OFFBIG (1) -#define _POSIX_V7_ILP32_OFFBIG (1) +#define _POSIX_V6_ILP32_OFFBIG 1 +#define _POSIX_V7_ILP32_OFFBIG 1 #define _POSIX_VDISABLE 0 #define _POSIX_VERSION 200809L #define _PTHREAD_H @@ -3100,7 +3103,7 @@ #define __WINT_MAX__ 2147483647 #define __WINT_TYPE__ int #define __WINT_WIDTH__ 32 -#define __WORDSIZE 64 +#define __WORDSIZE 32 #define __alignas_is_defined 1 #define __alignof_is_defined 1 #define __bitop(x,i,o) ((x)[(i)/8] o (1<<(i)%8)) diff --git a/expected/wasm32-wasip3/defined-symbols.txt b/expected/wasm32-wasip3/defined-symbols.txt index 71f64fde5..c10bf23f2 100644 --- a/expected/wasm32-wasip3/defined-symbols.txt +++ b/expected/wasm32-wasip3/defined-symbols.txt @@ -1603,4 +1603,4 @@ y0f y1 y1f yn -ynf +ynf \ No newline at end of file diff --git a/expected/wasm32-wasip3/predefined-macros.txt b/expected/wasm32-wasip3/predefined-macros.txt index d6375ce28..f5ec3bd20 100644 --- a/expected/wasm32-wasip3/predefined-macros.txt +++ b/expected/wasm32-wasip3/predefined-macros.txt @@ -710,7 +710,7 @@ #define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff) #define IN6_IS_ADDR_SITELOCAL(a) ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0xc0) #define IN6_IS_ADDR_UNSPECIFIED(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == 0) -#define IN6_IS_ADDR_V4COMPAT(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && ((uint8_t *) (a))[15] > 1) +#define IN6_IS_ADDR_V4COMPAT(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint32_t *) (a))[2] == 0 && !IN6_IS_ADDR_UNSPECIFIED(a) && !IN6_IS_ADDR_LOOPBACK(a)) #define IN6_IS_ADDR_V4MAPPED(a) (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && ((uint8_t *) (a))[8] == 0 && ((uint8_t *) (a))[9] == 0 && ((uint8_t *) (a))[10] == 0xff && ((uint8_t *) (a))[11] == 0xff) #define INADDRSZ NS_INADDRSZ #define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001) @@ -748,8 +748,8 @@ #define INTMAX_MIN INT64_MIN #define INTPTR_MAX INT32_MAX #define INTPTR_MIN INT32_MIN -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT32_MAX +#define INT_FAST16_MIN INT32_MIN #define INT_FAST32_MAX INT32_MAX #define INT_FAST32_MIN INT32_MIN #define INT_FAST64_MAX INT64_MAX @@ -1631,6 +1631,9 @@ #define REG_NOTBOL 1 #define REG_NOTEOL 2 #define REG_OK 0 +#define RENAME_EXCHANGE (1 << 1) +#define RENAME_NOREPLACE (1 << 0) +#define RENAME_WHITEOUT (1 << 2) #define RE_DUP_MAX 255 #define RMSGD 0x0001 #define RMSGN 0x0002 @@ -2193,7 +2196,7 @@ #define UINTMAX_C(c) c ## ULL #define UINTMAX_MAX UINT64_MAX #define UINTPTR_MAX UINT32_MAX -#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST16_MAX UINT32_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX #define UINT_FAST8_MAX UINT8_MAX @@ -2426,8 +2429,8 @@ #define _POSIX_TRACE_USER_EVENT_MAX 32 #define _POSIX_TTY_NAME_MAX 9 #define _POSIX_TZNAME_MAX 6 -#define _POSIX_V6_ILP32_OFFBIG (1) -#define _POSIX_V7_ILP32_OFFBIG (1) +#define _POSIX_V6_ILP32_OFFBIG 1 +#define _POSIX_V7_ILP32_OFFBIG 1 #define _POSIX_VDISABLE 0 #define _POSIX_VERSION 200809L #define _PTHREAD_H @@ -3106,7 +3109,7 @@ #define __WINT_MAX__ 2147483647 #define __WINT_TYPE__ int #define __WINT_WIDTH__ 32 -#define __WORDSIZE 64 +#define __WORDSIZE 32 #define __alignas_is_defined 1 #define __alignof_is_defined 1 #define __bitop(x,i,o) ((x)[(i)/8] o (1<<(i)%8)) diff --git a/libc-top-half/CMakeLists.txt b/libc-top-half/CMakeLists.txt index 716a6ff51..bc07d1ca6 100644 --- a/libc-top-half/CMakeLists.txt +++ b/libc-top-half/CMakeLists.txt @@ -282,6 +282,7 @@ set(top_half_sources musl/src/time/__secs_to_tm.c musl/src/time/__tm_to_secs.c musl/src/time/__tz.c + musl/src/time/__utc.c musl/src/time/__year_to_secs.c musl/src/time/asctime.c musl/src/time/asctime_r.c diff --git a/libc-top-half/README.md b/libc-top-half/README.md index c4b81b83d..6ca18b65b 100644 --- a/libc-top-half/README.md +++ b/libc-top-half/README.md @@ -23,3 +23,18 @@ Some major known missing areas include: - non-builtin locales - TIOCGWINSZ (because cloudabi lacks it; affects isatty, line buffering for stdout) - O\_CLOEXEC, O\_NOCTTY (because cloudabi lacks them) + +## Updating Musl + +The `libc-top-half/musl` directory is a `git subtree` for the upstream musl +repository. Updating it can be done with: + +``` +git subtree pull \ + --prefix libc-top-half/musl \ + https://git.musl-libc.org/git/musl v1.2.6 \ + --squash +``` + +Resolve all conflicts and such that come about from the merge. Track deleted and +updated files and update `libc-top-half/CMakeLists.txt` as appropriate. diff --git a/libc-top-half/musl/COPYRIGHT b/libc-top-half/musl/COPYRIGHT index c1628e9ac..2f15edc7a 100644 --- a/libc-top-half/musl/COPYRIGHT +++ b/libc-top-half/musl/COPYRIGHT @@ -74,6 +74,7 @@ Kylie McClain Leah Neukirchen Luca Barbato Luka Perkov +Lynn Ochs M Farkas-Dyck (Strake) Mahesh Bodapati Markus Wichmann @@ -103,7 +104,6 @@ Stefan O'Rear Szabolcs Nagy Timo Teräs Trutz Behn -Valentin Ochs Will Dietz William Haddon William Pitcock @@ -143,7 +143,7 @@ domain. The code also comes with a fallback permissive license for use in jurisdictions that may not recognize the public domain. The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 -Valentin Ochs and is licensed under an MIT-style license. +Lynn Ochs and is licensed under an MIT-style license. The x86_64 port was written by Nicholas J. Kain and is licensed under the standard MIT terms. diff --git a/libc-top-half/musl/Makefile b/libc-top-half/musl/Makefile index e8cc44367..3ad88b359 100644 --- a/libc-top-half/musl/Makefile +++ b/libc-top-half/musl/Makefile @@ -109,7 +109,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/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 diff --git a/libc-top-half/musl/VERSION b/libc-top-half/musl/VERSION index c813fe116..3c43790f5 100644 --- a/libc-top-half/musl/VERSION +++ b/libc-top-half/musl/VERSION @@ -1 +1 @@ -1.2.5 +1.2.6 diff --git a/libc-top-half/musl/WHATSNEW b/libc-top-half/musl/WHATSNEW index 7bd907280..bb2cd9bd8 100644 --- a/libc-top-half/musl/WHATSNEW +++ b/libc-top-half/musl/WHATSNEW @@ -2438,3 +2438,56 @@ arch-specific bugs fixed: - 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 + + + +1.2.6 release notes + +new features: +- posix_getdents interface (new in POSIX-2024) +- renameat2 interface (linux extension) +- iconv support for CP858 +- vdso clock_gettime for riscv{32,64}, powerpc{,64}, and s390x +- loongarch64 TLSDESC support +- exposed __getauxval for compiler runtime use detecting cpu features + +compatibility: +- initgroups no longer artificially limits number of supplementary groups +- getusershell now skips blank lines and comments +- exit is now explicitly thread-safe (possible future requirement) +- atexit now fails rather than deadlocking if called from late dtor +- strerror now has error strings for EUCLEAN and ENAVAIL +- isatty no longer collapses errors to ENOTTY +- sched.h namespace pollution with _GNU_SOURCE is reduced +- hasmntopt now matches only whole options, not arbitrary substrings +- shadow.h no longer declares an unimplemented sgetspent interface +- vdso with missing sysv hash table (only gnu hash) is now supported + +conformance: +- pwrite now handles O_APPEND correctly, reports error if it can't +- mbnrtowcs now conforms to new POSIX-2024 requirement for partial character +- iconv GBK now properly includes euro symbol +- strptime now accepts conversion specifiers added in POSIX-2024 +- inet_ntop IPv6 "zero compression" now conforms to RFC 5952 + +bugs fixed: +- iconv euc-kr decoder could do oob writes on invalid inputs (CVE-2025-26519) +- iconv shift_jis decoder could produce wrong outputs for some invalid inputs +- printf did not honor hex float precision correctly in some cases +- lost or delayed wakes in sem_post under race condition +- termios input speed handling was wrong +- strcasestr failed to match zero-length needle +- fma handled corner case with negative zero wrongly +- syslog LOG_MAKEPRI macro was incorrect +- timer_create is no longer affected by known pthread_barrier bugs +- sysconf(_SC_MINSIGSTKSZ) computed min size incorrectly +- statx emulation left some fields uninitialized +- mntent wrongly included final newline in parsed field output +- SIGEV_THREAD timers could abort process if SIGTIMER became unblocked +- bind_textdomain_codeset returned wrong value + +arch-specific bugs fixed: +- early dynamic linker handled page size wrong on dynamic pagesize archs +- arm and aarch64 crti/n files had wrong alignment +- m68k POLLWRNORM and POLLWRBAND values were incorrect +- x32 mq ABI was mismatched diff --git a/libc-top-half/musl/arch/aarch64/bits/posix.h b/libc-top-half/musl/arch/aarch64/bits/posix.h deleted file mode 100644 index c37b94c14..000000000 --- a/libc-top-half/musl/arch/aarch64/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_LP64_OFF64 1 -#define _POSIX_V7_LP64_OFF64 1 diff --git a/libc-top-half/musl/arch/aarch64/bits/reg.h b/libc-top-half/musl/arch/aarch64/bits/reg.h deleted file mode 100644 index 2633f39d7..000000000 --- a/libc-top-half/musl/arch/aarch64/bits/reg.h +++ /dev/null @@ -1,2 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 diff --git a/libc-top-half/musl/arch/aarch64/bits/stat.h b/libc-top-half/musl/arch/aarch64/bits/stat.h deleted file mode 100644 index b7f4221be..000000000 --- a/libc-top-half/musl/arch/aarch64/bits/stat.h +++ /dev/null @@ -1,18 +0,0 @@ -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; - unsigned long __pad; - off_t st_size; - blksize_t st_blksize; - int __pad2; - blkcnt_t st_blocks; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - unsigned __unused[2]; -}; diff --git a/libc-top-half/musl/arch/aarch64/bits/stdint.h b/libc-top-half/musl/arch/aarch64/bits/stdint.h deleted file mode 100644 index 1bb147f24..000000000 --- a/libc-top-half/musl/arch/aarch64/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -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 diff --git a/libc-top-half/musl/arch/aarch64/bits/syscall.h.in b/libc-top-half/musl/arch/aarch64/bits/syscall.h.in index ea5a152a2..bb158f362 100644 --- a/libc-top-half/musl/arch/aarch64/bits/syscall.h.in +++ b/libc-top-half/musl/arch/aarch64/bits/syscall.h.in @@ -296,12 +296,32 @@ #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_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 +#define __NR_map_shadow_stack 453 +#define __NR_futex_wake 454 +#define __NR_futex_wait 455 +#define __NR_futex_requeue 456 +#define __NR_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/arm/bits/posix.h b/libc-top-half/musl/arch/arm/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/arm/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/arm/bits/reg.h b/libc-top-half/musl/arch/arm/bits/reg.h deleted file mode 100644 index 0c7bffca0..000000000 --- a/libc-top-half/musl/arch/arm/bits/reg.h +++ /dev/null @@ -1,3 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 -/* FIXME */ diff --git a/libc-top-half/musl/arch/arm/bits/syscall.h.in b/libc-top-half/musl/arch/arm/bits/syscall.h.in index 157b304d5..fb5fa9754 100644 --- a/libc-top-half/musl/arch/arm/bits/syscall.h.in +++ b/libc-top-half/musl/arch/arm/bits/syscall.h.in @@ -396,6 +396,7 @@ #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 @@ -404,6 +405,24 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 #define __ARM_NR_breakpoint 0x0f0001 #define __ARM_NR_cacheflush 0x0f0002 diff --git a/libc-top-half/musl/arch/generic/bits/reg.h b/libc-top-half/musl/arch/generic/bits/reg.h new file mode 100644 index 000000000..e69de29bb diff --git a/libc-top-half/musl/arch/riscv32/bits/stat.h b/libc-top-half/musl/arch/generic/bits/stat.h similarity index 73% rename from libc-top-half/musl/arch/riscv32/bits/stat.h rename to libc-top-half/musl/arch/generic/bits/stat.h index f6d9e8640..1f87fbf39 100644 --- a/libc-top-half/musl/arch/riscv32/bits/stat.h +++ b/libc-top-half/musl/arch/generic/bits/stat.h @@ -1,3 +1,4 @@ +#ifdef __wasilibc_unmodified_upstream /* Use alternate WASI stat definition */ struct stat { dev_t st_dev; ino_t st_ino; @@ -16,3 +17,6 @@ struct stat { struct timespec st_ctim; unsigned __unused[2]; }; +#else +#include <__struct_stat.h> +#endif diff --git a/libc-top-half/musl/arch/arm/bits/stdint.h b/libc-top-half/musl/arch/generic/bits/stdint.h similarity index 68% rename from libc-top-half/musl/arch/arm/bits/stdint.h rename to libc-top-half/musl/arch/generic/bits/stdint.h index d1b271219..864891874 100644 --- a/libc-top-half/musl/arch/arm/bits/stdint.h +++ b/libc-top-half/musl/arch/generic/bits/stdint.h @@ -12,9 +12,18 @@ typedef uint32_t uint_fast32_t; #define UINT_FAST16_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_MAX INT64_MAX +#define UINTPTR_MAX UINT64_MAX +#define PTRDIFF_MIN INT64_MIN +#define PTRDIFF_MAX INT64_MAX +#define SIZE_MAX UINT64_MAX +#endif diff --git a/libc-top-half/musl/arch/i386/bits/posix.h b/libc-top-half/musl/arch/i386/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/i386/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/i386/bits/reg.h b/libc-top-half/musl/arch/i386/bits/reg.h index 8bc2582d0..7dfe82502 100644 --- a/libc-top-half/musl/arch/i386/bits/reg.h +++ b/libc-top-half/musl/arch/i386/bits/reg.h @@ -1,5 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 #define EBX 0 #define ECX 1 #define EDX 2 diff --git a/libc-top-half/musl/arch/i386/bits/stdint.h b/libc-top-half/musl/arch/i386/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/i386/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/i386/bits/syscall.h.in b/libc-top-half/musl/arch/i386/bits/syscall.h.in index 55e91cc43..30e38405e 100644 --- a/libc-top-half/musl/arch/i386/bits/syscall.h.in +++ b/libc-top-half/musl/arch/i386/bits/syscall.h.in @@ -433,6 +433,7 @@ #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 @@ -442,4 +443,22 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/i386/crt_arch.h b/libc-top-half/musl/arch/i386/crt_arch.h index 43c8477a8..1a80fce35 100644 --- a/libc-top-half/musl/arch/i386/crt_arch.h +++ b/libc-top-half/musl/arch/i386/crt_arch.h @@ -3,6 +3,7 @@ __asm__( ".weak _DYNAMIC \n" ".hidden _DYNAMIC \n" ".global " START "\n" +".type " START ",%function \n" START ":\n" " xor %ebp,%ebp \n" " mov %esp,%eax \n" diff --git a/libc-top-half/musl/arch/loongarch64/bits/hwcap.h b/libc-top-half/musl/arch/loongarch64/bits/hwcap.h new file mode 100644 index 000000000..b8184f695 --- /dev/null +++ b/libc-top-half/musl/arch/loongarch64/bits/hwcap.h @@ -0,0 +1,14 @@ +#define HWCAP_LOONGARCH_CPUCFG (1 << 0) +#define HWCAP_LOONGARCH_LAM (1 << 1) +#define HWCAP_LOONGARCH_UAL (1 << 2) +#define HWCAP_LOONGARCH_FPU (1 << 3) +#define HWCAP_LOONGARCH_LSX (1 << 4) +#define HWCAP_LOONGARCH_LASX (1 << 5) +#define HWCAP_LOONGARCH_CRC32 (1 << 6) +#define HWCAP_LOONGARCH_COMPLEX (1 << 7) +#define HWCAP_LOONGARCH_CRYPTO (1 << 8) +#define HWCAP_LOONGARCH_LVZ (1 << 9) +#define HWCAP_LOONGARCH_LBT_X86 (1 << 10) +#define HWCAP_LOONGARCH_LBT_ARM (1 << 11) +#define HWCAP_LOONGARCH_LBT_MIPS (1 << 12) +#define HWCAP_LOONGARCH_PTW (1 << 13) diff --git a/libc-top-half/musl/arch/loongarch64/bits/posix.h b/libc-top-half/musl/arch/loongarch64/bits/posix.h deleted file mode 100644 index 8068ce98d..000000000 --- a/libc-top-half/musl/arch/loongarch64/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_LP64_OFF64 1 -#define _POSIX_V7_LP64_OFF64 1 diff --git a/libc-top-half/musl/arch/loongarch64/bits/reg.h b/libc-top-half/musl/arch/loongarch64/bits/reg.h deleted file mode 100644 index 2633f39d7..000000000 --- a/libc-top-half/musl/arch/loongarch64/bits/reg.h +++ /dev/null @@ -1,2 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 diff --git a/libc-top-half/musl/arch/loongarch64/bits/signal.h b/libc-top-half/musl/arch/loongarch64/bits/signal.h index 5a9ed8c91..70ce94027 100644 --- a/libc-top-half/musl/arch/loongarch64/bits/signal.h +++ b/libc-top-half/musl/arch/loongarch64/bits/signal.h @@ -18,6 +18,10 @@ #endif #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define SC_USED_FP (1U << 0) +#define SC_ADDRERR_RD (1U << 30) +#define SC_ADDRERR_WR (1U << 31) + typedef unsigned long greg_t, gregset_t[32]; struct sigcontext { @@ -26,6 +30,45 @@ struct sigcontext { unsigned sc_flags; unsigned long sc_extcontext[] __attribute__((__aligned__(16))); }; + +#define CONTEXT_INFO_ALIGN 16 +struct sctx_info { + unsigned magic; + unsigned size; + unsigned long padding; +}; + +#define FPU_CTX_MAGIC 0x46505501 +#define FPU_CTX_ALIGN 8 +struct fpu_context { + unsigned long regs[32]; + unsigned long fcc; + unsigned fcsr; +}; + +#define LSX_CTX_MAGIC 0x53580001 +#define LSX_CTX_ALIGN 16 +struct lsx_context { + unsigned long regs[2*32]; + unsigned long fcc; + unsigned fcsr; +}; + +#define LASX_CTX_MAGIC 0x41535801 +#define LASX_CTX_ALIGN 32 +struct lasx_context { + unsigned long regs[4*32]; + unsigned long fcc; + unsigned fcsr; +}; + +#define LBT_CTX_MAGIC 0x42540001 +#define LBT_CTX_ALIGN 8 +struct lbt_context { + unsigned long regs[4]; + unsigned eflags; + unsigned ftop; +}; #endif typedef struct { diff --git a/libc-top-half/musl/arch/loongarch64/bits/stat.h b/libc-top-half/musl/arch/loongarch64/bits/stat.h deleted file mode 100644 index b7f4221be..000000000 --- a/libc-top-half/musl/arch/loongarch64/bits/stat.h +++ /dev/null @@ -1,18 +0,0 @@ -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; - unsigned long __pad; - off_t st_size; - blksize_t st_blksize; - int __pad2; - blkcnt_t st_blocks; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - unsigned __unused[2]; -}; diff --git a/libc-top-half/musl/arch/loongarch64/bits/stdint.h b/libc-top-half/musl/arch/loongarch64/bits/stdint.h deleted file mode 100644 index 1bb147f24..000000000 --- a/libc-top-half/musl/arch/loongarch64/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -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 diff --git a/libc-top-half/musl/arch/loongarch64/bits/syscall.h.in b/libc-top-half/musl/arch/loongarch64/bits/syscall.h.in index 2afb4ea16..66c0d7b94 100644 --- a/libc-top-half/musl/arch/loongarch64/bits/syscall.h.in +++ b/libc-top-half/musl/arch/loongarch64/bits/syscall.h.in @@ -305,6 +305,20 @@ #define __NR_futex_wake 454 #define __NR_futex_wait 455 #define __NR_futex_requeue 456 +#define __NR_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 #define __NR_fcntl __NR3264_fcntl #define __NR_statfs __NR3264_statfs #define __NR_fstatfs __NR3264_fstatfs diff --git a/libc-top-half/musl/arch/loongarch64/bits/user.h b/libc-top-half/musl/arch/loongarch64/bits/user.h index fd9b7b22e..e4aee0d3e 100644 --- a/libc-top-half/musl/arch/loongarch64/bits/user.h +++ b/libc-top-half/musl/arch/loongarch64/bits/user.h @@ -22,3 +22,17 @@ typedef union { float f; } elf_fpreg_t; typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; + +typedef union +{ + __attribute__((__aligned__(16))) + double d[2]; + float f[4]; +} elf_lsxregset_t[32]; + +typedef union +{ + __attribute__((__aligned__(32))) + double d[4]; + float f[8]; +} elf_lasxregset_t[32]; diff --git a/libc-top-half/musl/arch/loongarch64/reloc.h b/libc-top-half/musl/arch/loongarch64/reloc.h index 61eaca9e3..a4db6a9c5 100644 --- a/libc-top-half/musl/arch/loongarch64/reloc.h +++ b/libc-top-half/musl/arch/loongarch64/reloc.h @@ -17,6 +17,7 @@ #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" ) diff --git a/libc-top-half/musl/arch/m68k/bits/poll.h b/libc-top-half/musl/arch/m68k/bits/poll.h new file mode 100644 index 000000000..00063f418 --- /dev/null +++ b/libc-top-half/musl/arch/m68k/bits/poll.h @@ -0,0 +1,2 @@ +#define POLLWRNORM POLLOUT +#define POLLWRBAND 256 diff --git a/libc-top-half/musl/arch/m68k/bits/posix.h b/libc-top-half/musl/arch/m68k/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/m68k/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/m68k/bits/reg.h b/libc-top-half/musl/arch/m68k/bits/reg.h index 99201f709..fedc4f9fe 100644 --- a/libc-top-half/musl/arch/m68k/bits/reg.h +++ b/libc-top-half/musl/arch/m68k/bits/reg.h @@ -1,5 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 #define PT_D1 0 #define PT_D2 1 #define PT_D3 2 diff --git a/libc-top-half/musl/arch/m68k/bits/stdint.h b/libc-top-half/musl/arch/m68k/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/m68k/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/m68k/bits/syscall.h.in b/libc-top-half/musl/arch/m68k/bits/syscall.h.in index 5cd84602a..548fd02d8 100644 --- a/libc-top-half/musl/arch/m68k/bits/syscall.h.in +++ b/libc-top-half/musl/arch/m68k/bits/syscall.h.in @@ -413,6 +413,7 @@ #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 @@ -421,3 +422,21 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/microblaze/bits/posix.h b/libc-top-half/musl/arch/microblaze/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/microblaze/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/microblaze/bits/reg.h b/libc-top-half/musl/arch/microblaze/bits/reg.h deleted file mode 100644 index 0c7bffca0..000000000 --- a/libc-top-half/musl/arch/microblaze/bits/reg.h +++ /dev/null @@ -1,3 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 -/* FIXME */ diff --git a/libc-top-half/musl/arch/microblaze/bits/stdint.h b/libc-top-half/musl/arch/microblaze/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/microblaze/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/microblaze/bits/syscall.h.in b/libc-top-half/musl/arch/microblaze/bits/syscall.h.in index 40860e6d3..e98944a95 100644 --- a/libc-top-half/musl/arch/microblaze/bits/syscall.h.in +++ b/libc-top-half/musl/arch/microblaze/bits/syscall.h.in @@ -434,6 +434,7 @@ #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 @@ -442,4 +443,22 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/mips/bits/posix.h b/libc-top-half/musl/arch/mips/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/mips/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/mips/bits/reg.h b/libc-top-half/musl/arch/mips/bits/reg.h index 0c3709877..2611b632c 100644 --- a/libc-top-half/musl/arch/mips/bits/reg.h +++ b/libc-top-half/musl/arch/mips/bits/reg.h @@ -1,6 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 - #define EF_R0 6 #define EF_R1 7 #define EF_R2 8 diff --git a/libc-top-half/musl/arch/mips/bits/stdint.h b/libc-top-half/musl/arch/mips/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/mips/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/mips/bits/syscall.h.in b/libc-top-half/musl/arch/mips/bits/syscall.h.in index 55e35742a..4048ae887 100644 --- a/libc-top-half/musl/arch/mips/bits/syscall.h.in +++ b/libc-top-half/musl/arch/mips/bits/syscall.h.in @@ -415,6 +415,7 @@ #define __NR_process_madvise 4440 #define __NR_epoll_pwait2 4441 #define __NR_mount_setattr 4442 +#define __NR_quotactl_fd 4443 #define __NR_landlock_create_ruleset 4444 #define __NR_landlock_add_rule 4445 #define __NR_landlock_restrict_self 4446 @@ -423,4 +424,22 @@ #define __NR_set_mempolicy_home_node 4450 #define __NR_cachestat 4451 #define __NR_fchmodat2 4452 +#define __NR_map_shadow_stack 4453 +#define __NR_futex_wake 4454 +#define __NR_futex_wait 4455 +#define __NR_futex_requeue 4456 +#define __NR_statmount 4457 +#define __NR_listmount 4458 +#define __NR_lsm_get_self_attr 4459 +#define __NR_lsm_set_self_attr 4460 +#define __NR_lsm_list_modules 4461 +#define __NR_mseal 4462 +#define __NR_setxattrat 4463 +#define __NR_getxattrat 4464 +#define __NR_listxattrat 4465 +#define __NR_removexattrat 4466 +#define __NR_open_tree_attr 4467 +#define __NR_file_getattr 4468 +#define __NR_file_setattr 4469 +#define __NR_listns 4470 diff --git a/libc-top-half/musl/arch/mips64/bits/posix.h b/libc-top-half/musl/arch/mips64/bits/posix.h deleted file mode 100644 index acf429449..000000000 --- a/libc-top-half/musl/arch/mips64/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_LP64_OFFBIG 1 -#define _POSIX_V7_LP64_OFFBIG 1 diff --git a/libc-top-half/musl/arch/mips64/bits/reg.h b/libc-top-half/musl/arch/mips64/bits/reg.h index a3f63accf..16178dd3f 100644 --- a/libc-top-half/musl/arch/mips64/bits/reg.h +++ b/libc-top-half/musl/arch/mips64/bits/reg.h @@ -1,6 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 - #define EF_R0 0 #define EF_R1 1 #define EF_R2 2 diff --git a/libc-top-half/musl/arch/mips64/bits/stdint.h b/libc-top-half/musl/arch/mips64/bits/stdint.h deleted file mode 100644 index 1bb147f24..000000000 --- a/libc-top-half/musl/arch/mips64/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -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 diff --git a/libc-top-half/musl/arch/mips64/bits/syscall.h.in b/libc-top-half/musl/arch/mips64/bits/syscall.h.in index 50cec45a4..1d80ebe69 100644 --- a/libc-top-half/musl/arch/mips64/bits/syscall.h.in +++ b/libc-top-half/musl/arch/mips64/bits/syscall.h.in @@ -345,6 +345,7 @@ #define __NR_process_madvise 5440 #define __NR_epoll_pwait2 5441 #define __NR_mount_setattr 5442 +#define __NR_quotactl_fd 5443 #define __NR_landlock_create_ruleset 5444 #define __NR_landlock_add_rule 5445 #define __NR_landlock_restrict_self 5446 @@ -353,4 +354,22 @@ #define __NR_set_mempolicy_home_node 5450 #define __NR_cachestat 5451 #define __NR_fchmodat2 5452 +#define __NR_map_shadow_stack 5453 +#define __NR_futex_wake 5454 +#define __NR_futex_wait 5455 +#define __NR_futex_requeue 5456 +#define __NR_statmount 5457 +#define __NR_listmount 5458 +#define __NR_lsm_get_self_attr 5459 +#define __NR_lsm_set_self_attr 5460 +#define __NR_lsm_list_modules 5461 +#define __NR_mseal 5462 +#define __NR_setxattrat 5463 +#define __NR_getxattrat 5464 +#define __NR_listxattrat 5465 +#define __NR_removexattrat 5466 +#define __NR_open_tree_attr 5467 +#define __NR_file_getattr 5468 +#define __NR_file_setattr 5469 +#define __NR_listns 5470 diff --git a/libc-top-half/musl/arch/mipsn32/bits/posix.h b/libc-top-half/musl/arch/mipsn32/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/mipsn32/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/mipsn32/bits/reg.h b/libc-top-half/musl/arch/mipsn32/bits/reg.h index a3f63accf..16178dd3f 100644 --- a/libc-top-half/musl/arch/mipsn32/bits/reg.h +++ b/libc-top-half/musl/arch/mipsn32/bits/reg.h @@ -1,6 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 - #define EF_R0 0 #define EF_R1 1 #define EF_R2 2 diff --git a/libc-top-half/musl/arch/mipsn32/bits/stdint.h b/libc-top-half/musl/arch/mipsn32/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/mipsn32/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/mipsn32/bits/syscall.h.in b/libc-top-half/musl/arch/mipsn32/bits/syscall.h.in index 9a4bd3011..34b2f3953 100644 --- a/libc-top-half/musl/arch/mipsn32/bits/syscall.h.in +++ b/libc-top-half/musl/arch/mipsn32/bits/syscall.h.in @@ -369,6 +369,7 @@ #define __NR_process_madvise 6440 #define __NR_epoll_pwait2 6441 #define __NR_mount_setattr 6442 +#define __NR_quotactl_fd 6443 #define __NR_landlock_create_ruleset 6444 #define __NR_landlock_add_rule 6445 #define __NR_landlock_restrict_self 6446 @@ -377,4 +378,22 @@ #define __NR_set_mempolicy_home_node 6450 #define __NR_cachestat 6451 #define __NR_fchmodat2 6452 +#define __NR_map_shadow_stack 6453 +#define __NR_futex_wake 6454 +#define __NR_futex_wait 6455 +#define __NR_futex_requeue 6456 +#define __NR_statmount 6457 +#define __NR_listmount 6458 +#define __NR_lsm_get_self_attr 6459 +#define __NR_lsm_set_self_attr 6460 +#define __NR_lsm_list_modules 6461 +#define __NR_mseal 6462 +#define __NR_setxattrat 6463 +#define __NR_getxattrat 6464 +#define __NR_listxattrat 6465 +#define __NR_removexattrat 6466 +#define __NR_open_tree_attr 6467 +#define __NR_file_getattr 6468 +#define __NR_file_setattr 6469 +#define __NR_listns 6470 diff --git a/libc-top-half/musl/arch/or1k/bits/posix.h b/libc-top-half/musl/arch/or1k/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/or1k/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/or1k/bits/reg.h b/libc-top-half/musl/arch/or1k/bits/reg.h deleted file mode 100644 index 0c7bffca0..000000000 --- a/libc-top-half/musl/arch/or1k/bits/reg.h +++ /dev/null @@ -1,3 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 -/* FIXME */ diff --git a/libc-top-half/musl/arch/or1k/bits/stdint.h b/libc-top-half/musl/arch/or1k/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/or1k/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/or1k/bits/syscall.h.in b/libc-top-half/musl/arch/or1k/bits/syscall.h.in index 00812bf80..93c7fd2e8 100644 --- a/libc-top-half/musl/arch/or1k/bits/syscall.h.in +++ b/libc-top-half/musl/arch/or1k/bits/syscall.h.in @@ -318,6 +318,7 @@ #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 @@ -326,4 +327,22 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/powerpc/bits/hwcap.h b/libc-top-half/musl/arch/powerpc/bits/hwcap.h index 803de9b5b..129816230 100644 --- a/libc-top-half/musl/arch/powerpc/bits/hwcap.h +++ b/libc-top-half/musl/arch/powerpc/bits/hwcap.h @@ -41,3 +41,5 @@ #define PPC_FEATURE2_DARN 0x00200000 #define PPC_FEATURE2_SCV 0x00100000 #define PPC_FEATURE2_HTM_NO_SUSPEND 0x00080000 +#define PPC_FEATURE2_ARCH_3_1 0x00040000 +#define PPC_FEATURE2_MMA 0x00020000 diff --git a/libc-top-half/musl/arch/powerpc/bits/posix.h b/libc-top-half/musl/arch/powerpc/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/powerpc/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/powerpc/bits/reg.h b/libc-top-half/musl/arch/powerpc/bits/reg.h deleted file mode 100644 index 0c7bffca0..000000000 --- a/libc-top-half/musl/arch/powerpc/bits/reg.h +++ /dev/null @@ -1,3 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 -/* FIXME */ diff --git a/libc-top-half/musl/arch/powerpc/bits/stdint.h b/libc-top-half/musl/arch/powerpc/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/powerpc/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/powerpc/bits/syscall.h.in b/libc-top-half/musl/arch/powerpc/bits/syscall.h.in index ea95f3ed1..5e633e4a9 100644 --- a/libc-top-half/musl/arch/powerpc/bits/syscall.h.in +++ b/libc-top-half/musl/arch/powerpc/bits/syscall.h.in @@ -422,6 +422,7 @@ #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 @@ -430,4 +431,22 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/powerpc/syscall_arch.h b/libc-top-half/musl/arch/powerpc/syscall_arch.h index ede97c1c0..fe893af4e 100644 --- a/libc-top-half/musl/arch/powerpc/syscall_arch.h +++ b/libc-top-half/musl/arch/powerpc/syscall_arch.h @@ -9,7 +9,7 @@ static inline long __syscall0(long n) register long r3 __asm__("r3"); __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "=r"(r3) - :: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -19,7 +19,7 @@ static inline long __syscall1(long n, long a) register long r3 __asm__("r3") = a; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3) - :: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -30,7 +30,7 @@ static inline long __syscall2(long n, long a, long b) register long r4 __asm__("r4") = b; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4) - :: "memory", "cr0", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -42,7 +42,7 @@ static inline long __syscall3(long n, long a, long b, long c) register long r5 __asm__("r5") = c; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4), "+r"(r5) - :: "memory", "cr0", "r6", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -55,7 +55,7 @@ static inline long __syscall4(long n, long a, long b, long c, long d) register long r6 __asm__("r6") = d; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4), "+r"(r5), "+r"(r6) - :: "memory", "cr0", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -69,7 +69,7 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e) register long r7 __asm__("r7") = e; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4), "+r"(r5), "+r"(r6), "+r"(r7) - :: "memory", "cr0", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -84,7 +84,7 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo register long r8 __asm__("r8") = f; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4), "+r"(r5), "+r"(r6), "+r"(r7), "+r"(r8) - :: "memory", "cr0", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -92,3 +92,9 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo #define SO_RCVTIMEO_OLD 18 #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" diff --git a/libc-top-half/musl/arch/powerpc64/bits/hwcap.h b/libc-top-half/musl/arch/powerpc64/bits/hwcap.h index 803de9b5b..129816230 100644 --- a/libc-top-half/musl/arch/powerpc64/bits/hwcap.h +++ b/libc-top-half/musl/arch/powerpc64/bits/hwcap.h @@ -41,3 +41,5 @@ #define PPC_FEATURE2_DARN 0x00200000 #define PPC_FEATURE2_SCV 0x00100000 #define PPC_FEATURE2_HTM_NO_SUSPEND 0x00080000 +#define PPC_FEATURE2_ARCH_3_1 0x00040000 +#define PPC_FEATURE2_MMA 0x00020000 diff --git a/libc-top-half/musl/arch/powerpc64/bits/posix.h b/libc-top-half/musl/arch/powerpc64/bits/posix.h deleted file mode 100644 index c37b94c14..000000000 --- a/libc-top-half/musl/arch/powerpc64/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_LP64_OFF64 1 -#define _POSIX_V7_LP64_OFF64 1 diff --git a/libc-top-half/musl/arch/powerpc64/bits/reg.h b/libc-top-half/musl/arch/powerpc64/bits/reg.h deleted file mode 100644 index 49382c8f7..000000000 --- a/libc-top-half/musl/arch/powerpc64/bits/reg.h +++ /dev/null @@ -1,3 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 -/* FIXME */ diff --git a/libc-top-half/musl/arch/powerpc64/bits/stdint.h b/libc-top-half/musl/arch/powerpc64/bits/stdint.h deleted file mode 100644 index 1bb147f24..000000000 --- a/libc-top-half/musl/arch/powerpc64/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -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 diff --git a/libc-top-half/musl/arch/powerpc64/bits/syscall.h.in b/libc-top-half/musl/arch/powerpc64/bits/syscall.h.in index 435510796..033082d7a 100644 --- a/libc-top-half/musl/arch/powerpc64/bits/syscall.h.in +++ b/libc-top-half/musl/arch/powerpc64/bits/syscall.h.in @@ -394,6 +394,7 @@ #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 @@ -402,4 +403,22 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/powerpc64/syscall_arch.h b/libc-top-half/musl/arch/powerpc64/syscall_arch.h index 76b4e335c..4c5d3ae94 100644 --- a/libc-top-half/musl/arch/powerpc64/syscall_arch.h +++ b/libc-top-half/musl/arch/powerpc64/syscall_arch.h @@ -7,7 +7,7 @@ static inline long __syscall0(long n) register long r3 __asm__("r3"); __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "=r"(r3) - :: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -17,7 +17,7 @@ static inline long __syscall1(long n, long a) register long r3 __asm__("r3") = a; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3) - :: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -28,7 +28,7 @@ static inline long __syscall2(long n, long a, long b) register long r4 __asm__("r4") = b; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4) - :: "memory", "cr0", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -40,7 +40,7 @@ static inline long __syscall3(long n, long a, long b, long c) register long r5 __asm__("r5") = c; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4), "+r"(r5) - :: "memory", "cr0", "r6", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -53,7 +53,7 @@ static inline long __syscall4(long n, long a, long b, long c, long d) register long r6 __asm__("r6") = d; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4), "+r"(r5), "+r"(r6) - :: "memory", "cr0", "r7", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r7", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -67,7 +67,7 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e) register long r7 __asm__("r7") = e; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4), "+r"(r5), "+r"(r6), "+r"(r7) - :: "memory", "cr0", "r8", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r8", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } @@ -82,9 +82,13 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo register long r8 __asm__("r8") = f; __asm__ __volatile__("sc ; bns+ 1f ; neg %1, %1 ; 1:" : "+r"(r0), "+r"(r3), "+r"(r4), "+r"(r5), "+r"(r6), "+r"(r7), "+r"(r8) - :: "memory", "cr0", "r9", "r10", "r11", "r12"); + :: "memory", "cr0", "r9", "r10", "r11", "r12", "ctr", "xer"); return r3; } #define SO_RCVTIMEO_OLD 18 #define SO_SNDTIMEO_OLD 19 + +#define VDSO_USEFUL +#define VDSO_CGT_SYM "__kernel_clock_gettime" +#define VDSO_CGT_VER "LINUX_2.6.15" diff --git a/libc-top-half/musl/arch/riscv32/bits/posix.h b/libc-top-half/musl/arch/riscv32/bits/posix.h deleted file mode 100644 index 8897d37d7..000000000 --- a/libc-top-half/musl/arch/riscv32/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/riscv32/bits/reg.h b/libc-top-half/musl/arch/riscv32/bits/reg.h deleted file mode 100644 index 0192a2931..000000000 --- a/libc-top-half/musl/arch/riscv32/bits/reg.h +++ /dev/null @@ -1,2 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 diff --git a/libc-top-half/musl/arch/riscv32/bits/signal.h b/libc-top-half/musl/arch/riscv32/bits/signal.h index 271e7da6b..50b66ec9e 100644 --- a/libc-top-half/musl/arch/riscv32/bits/signal.h +++ b/libc-top-half/musl/arch/riscv32/bits/signal.h @@ -19,7 +19,7 @@ struct __riscv_mc_d_ext_state { }; struct __riscv_mc_q_ext_state { - unsigned long long __f[64] __attribute__((aligned(16))); + unsigned long long __f[64] __attribute__((__aligned__(16))); unsigned int __fcsr; unsigned int __reserved[3]; }; diff --git a/libc-top-half/musl/arch/riscv32/bits/stdint.h b/libc-top-half/musl/arch/riscv32/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/riscv32/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/riscv32/bits/syscall.h.in b/libc-top-half/musl/arch/riscv32/bits/syscall.h.in index 9228d8408..dcd0e9f72 100644 --- a/libc-top-half/musl/arch/riscv32/bits/syscall.h.in +++ b/libc-top-half/musl/arch/riscv32/bits/syscall.h.in @@ -289,12 +289,32 @@ #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 +#define __NR_map_shadow_stack 453 #define __NR_futex __NR_futex_time64 +#define __NR_futex_wake 454 +#define __NR_futex_wait 455 +#define __NR_futex_requeue 456 +#define __NR_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 #define __NR_sysriscv __NR_arch_specific_syscall #define __NR_riscv_flush_icache (__NR_sysriscv + 15) +#define __NR_riscv_hwprobe (__NR_sysriscv + 14) diff --git a/libc-top-half/musl/arch/riscv32/syscall_arch.h b/libc-top-half/musl/arch/riscv32/syscall_arch.h index c507f15f2..70d2773fb 100644 --- a/libc-top-half/musl/arch/riscv32/syscall_arch.h +++ b/libc-top-half/musl/arch/riscv32/syscall_arch.h @@ -73,8 +73,7 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo } #define VDSO_USEFUL -/* We don't have a clock_gettime function. #define VDSO_CGT_SYM "__vdso_clock_gettime" -#define VDSO_CGT_VER "LINUX_2.6" */ +#define VDSO_CGT_VER "LINUX_4.15" #define IPC_64 0 diff --git a/libc-top-half/musl/arch/riscv64/bits/posix.h b/libc-top-half/musl/arch/riscv64/bits/posix.h deleted file mode 100644 index 8068ce98d..000000000 --- a/libc-top-half/musl/arch/riscv64/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_LP64_OFF64 1 -#define _POSIX_V7_LP64_OFF64 1 diff --git a/libc-top-half/musl/arch/riscv64/bits/reg.h b/libc-top-half/musl/arch/riscv64/bits/reg.h deleted file mode 100644 index 2633f39d7..000000000 --- a/libc-top-half/musl/arch/riscv64/bits/reg.h +++ /dev/null @@ -1,2 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 diff --git a/libc-top-half/musl/arch/riscv64/bits/signal.h b/libc-top-half/musl/arch/riscv64/bits/signal.h index 6a53feb7d..56f8fe171 100644 --- a/libc-top-half/musl/arch/riscv64/bits/signal.h +++ b/libc-top-half/musl/arch/riscv64/bits/signal.h @@ -19,7 +19,7 @@ struct __riscv_mc_d_ext_state { }; struct __riscv_mc_q_ext_state { - unsigned long long __f[64] __attribute__((aligned(16))); + unsigned long long __f[64] __attribute__((__aligned__(16))); unsigned int __fcsr; unsigned int __reserved[3]; }; diff --git a/libc-top-half/musl/arch/riscv64/bits/stat.h b/libc-top-half/musl/arch/riscv64/bits/stat.h deleted file mode 100644 index b7f4221be..000000000 --- a/libc-top-half/musl/arch/riscv64/bits/stat.h +++ /dev/null @@ -1,18 +0,0 @@ -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; - unsigned long __pad; - off_t st_size; - blksize_t st_blksize; - int __pad2; - blkcnt_t st_blocks; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - unsigned __unused[2]; -}; diff --git a/libc-top-half/musl/arch/riscv64/bits/stdint.h b/libc-top-half/musl/arch/riscv64/bits/stdint.h deleted file mode 100644 index 1bb147f24..000000000 --- a/libc-top-half/musl/arch/riscv64/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -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 diff --git a/libc-top-half/musl/arch/riscv64/bits/syscall.h.in b/libc-top-half/musl/arch/riscv64/bits/syscall.h.in index e362bd0ec..e196a11ee 100644 --- a/libc-top-half/musl/arch/riscv64/bits/syscall.h.in +++ b/libc-top-half/musl/arch/riscv64/bits/syscall.h.in @@ -296,14 +296,35 @@ #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_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 +#define __NR_map_shadow_stack 453 +#define __NR_futex_wake 454 +#define __NR_futex_wait 455 +#define __NR_futex_requeue 456 +#define __NR_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 #define __NR_sysriscv __NR_arch_specific_syscall #define __NR_riscv_flush_icache (__NR_sysriscv + 15) +#define __NR_riscv_hwprobe (__NR_sysriscv + 14) diff --git a/libc-top-half/musl/arch/riscv64/syscall_arch.h b/libc-top-half/musl/arch/riscv64/syscall_arch.h index 7fd042cd4..81993fc89 100644 --- a/libc-top-half/musl/arch/riscv64/syscall_arch.h +++ b/libc-top-half/musl/arch/riscv64/syscall_arch.h @@ -71,8 +71,7 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo } #define VDSO_USEFUL -/* We don't have a clock_gettime function. #define VDSO_CGT_SYM "__vdso_clock_gettime" -#define VDSO_CGT_VER "LINUX_2.6" */ +#define VDSO_CGT_VER "LINUX_4.15" #define IPC_64 0 diff --git a/libc-top-half/musl/arch/s390x/bits/posix.h b/libc-top-half/musl/arch/s390x/bits/posix.h deleted file mode 100644 index c37b94c14..000000000 --- a/libc-top-half/musl/arch/s390x/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_LP64_OFF64 1 -#define _POSIX_V7_LP64_OFF64 1 diff --git a/libc-top-half/musl/arch/s390x/bits/reg.h b/libc-top-half/musl/arch/s390x/bits/reg.h deleted file mode 100644 index 2633f39d7..000000000 --- a/libc-top-half/musl/arch/s390x/bits/reg.h +++ /dev/null @@ -1,2 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 diff --git a/libc-top-half/musl/arch/s390x/bits/stdint.h b/libc-top-half/musl/arch/s390x/bits/stdint.h deleted file mode 100644 index 1bb147f24..000000000 --- a/libc-top-half/musl/arch/s390x/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -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 diff --git a/libc-top-half/musl/arch/s390x/bits/syscall.h.in b/libc-top-half/musl/arch/s390x/bits/syscall.h.in index e60711a6e..da9be41ac 100644 --- a/libc-top-half/musl/arch/s390x/bits/syscall.h.in +++ b/libc-top-half/musl/arch/s390x/bits/syscall.h.in @@ -359,6 +359,7 @@ #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 @@ -368,4 +369,22 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/s390x/bits/user.h b/libc-top-half/musl/arch/s390x/bits/user.h index ff3f04838..47f94f208 100644 --- a/libc-top-half/musl/arch/s390x/bits/user.h +++ b/libc-top-half/musl/arch/s390x/bits/user.h @@ -1,6 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 - typedef union { double d; float f; diff --git a/libc-top-half/musl/arch/s390x/reloc.h b/libc-top-half/musl/arch/s390x/reloc.h index 6e5c1fb87..38de9d9b0 100644 --- a/libc-top-half/musl/arch/s390x/reloc.h +++ b/libc-top-half/musl/arch/s390x/reloc.h @@ -10,4 +10,4 @@ #define REL_TPOFF R_390_TLS_TPOFF #define CRTJMP(pc,sp) __asm__ __volatile__( \ - "lgr %%r15,%1; br %0" : : "r"(pc), "r"(sp) : "memory" ) + "lgr %%r15,%1; br %0" : : "a"(pc), "r"(sp) : "memory" ) diff --git a/libc-top-half/musl/arch/s390x/syscall_arch.h b/libc-top-half/musl/arch/s390x/syscall_arch.h index 83cc9a27c..d1cfd2e84 100644 --- a/libc-top-half/musl/arch/s390x/syscall_arch.h +++ b/libc-top-half/musl/arch/s390x/syscall_arch.h @@ -72,3 +72,7 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo register long r7 __asm__("r7") = f; __asm_syscall("+r"(r2), "r"(r1), "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7)); } + +#define VDSO_USEFUL +#define VDSO_CGT_SYM "__kernel_clock_gettime" +#define VDSO_CGT_VER "LINUX_2.6.29" diff --git a/libc-top-half/musl/arch/sh/bits/posix.h b/libc-top-half/musl/arch/sh/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/sh/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/sh/bits/stdint.h b/libc-top-half/musl/arch/sh/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/sh/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/sh/bits/syscall.h.in b/libc-top-half/musl/arch/sh/bits/syscall.h.in index 915a79cd5..5613ebf4e 100644 --- a/libc-top-half/musl/arch/sh/bits/syscall.h.in +++ b/libc-top-half/musl/arch/sh/bits/syscall.h.in @@ -357,6 +357,7 @@ #define __NR_pkey_alloc 385 #define __NR_pkey_free 386 #define __NR_rseq 387 +#define __NR_sync_file_range2 388 #define __NR_semget 393 #define __NR_semctl 394 #define __NR_shmget 395 @@ -406,6 +407,7 @@ #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 @@ -414,4 +416,22 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/sh/bits/user.h b/libc-top-half/musl/arch/sh/bits/user.h index 07fe843b6..b6ba16edd 100644 --- a/libc-top-half/musl/arch/sh/bits/user.h +++ b/libc-top-half/musl/arch/sh/bits/user.h @@ -1,6 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 - #define REG_REG0 0 #define REG_REG15 15 #define REG_PC 16 diff --git a/libc-top-half/musl/arch/wasm32/bits/reg.h b/libc-top-half/musl/arch/wasm32/bits/reg.h deleted file mode 100644 index 2633f39d7..000000000 --- a/libc-top-half/musl/arch/wasm32/bits/reg.h +++ /dev/null @@ -1,2 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 diff --git a/libc-top-half/musl/arch/wasm32/bits/stat.h b/libc-top-half/musl/arch/wasm32/bits/stat.h deleted file mode 100644 index 67a0e726a..000000000 --- a/libc-top-half/musl/arch/wasm32/bits/stat.h +++ /dev/null @@ -1 +0,0 @@ -#include <__struct_stat.h> diff --git a/libc-top-half/musl/arch/wasm32/bits/stdint.h b/libc-top-half/musl/arch/wasm32/bits/stdint.h deleted file mode 100644 index 6e7c7705b..000000000 --- a/libc-top-half/musl/arch/wasm32/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int16_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint16_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT16_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT16_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT16_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/x32/bits/posix.h b/libc-top-half/musl/arch/x32/bits/posix.h deleted file mode 100644 index 30a38714f..000000000 --- a/libc-top-half/musl/arch/x32/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_ILP32_OFFBIG 1 -#define _POSIX_V7_ILP32_OFFBIG 1 diff --git a/libc-top-half/musl/arch/x32/bits/reg.h b/libc-top-half/musl/arch/x32/bits/reg.h index 5faaef1ae..6e54abcf9 100644 --- a/libc-top-half/musl/arch/x32/bits/reg.h +++ b/libc-top-half/musl/arch/x32/bits/reg.h @@ -1,5 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 #define R15 0 #define R14 1 #define R13 2 diff --git a/libc-top-half/musl/arch/x32/bits/stdint.h b/libc-top-half/musl/arch/x32/bits/stdint.h deleted file mode 100644 index d1b271219..000000000 --- a/libc-top-half/musl/arch/x32/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -typedef int32_t int_fast16_t; -typedef int32_t int_fast32_t; -typedef uint32_t uint_fast16_t; -typedef uint32_t uint_fast32_t; - -#define INT_FAST16_MIN INT32_MIN -#define INT_FAST32_MIN INT32_MIN - -#define INT_FAST16_MAX INT32_MAX -#define INT_FAST32_MAX INT32_MAX - -#define UINT_FAST16_MAX UINT32_MAX -#define UINT_FAST32_MAX UINT32_MAX - -#define INTPTR_MIN INT32_MIN -#define INTPTR_MAX INT32_MAX -#define UINTPTR_MAX UINT32_MAX -#define PTRDIFF_MIN INT32_MIN -#define PTRDIFF_MAX INT32_MAX -#define SIZE_MAX UINT32_MAX diff --git a/libc-top-half/musl/arch/x32/bits/syscall.h.in b/libc-top-half/musl/arch/x32/bits/syscall.h.in index 1d065eeaf..7912034be 100644 --- a/libc-top-half/musl/arch/x32/bits/syscall.h.in +++ b/libc-top-half/musl/arch/x32/bits/syscall.h.in @@ -286,6 +286,8 @@ #define __NR_statx (0x40000000 + 332) #define __NR_io_pgetevents (0x40000000 + 333) #define __NR_rseq (0x40000000 + 334) +#define __NR_uretprobe (0x40000000 + 335) +#define __NR_uprobe (0x40000000 + 336) #define __NR_pidfd_send_signal (0x40000000 + 424) #define __NR_io_uring_setup (0x40000000 + 425) #define __NR_io_uring_enter (0x40000000 + 426) @@ -305,6 +307,7 @@ #define __NR_process_madvise (0x40000000 + 440) #define __NR_epoll_pwait2 (0x40000000 + 441) #define __NR_mount_setattr (0x40000000 + 442) +#define __NR_quotactl_fd (0x40000000 + 443) #define __NR_landlock_create_ruleset (0x40000000 + 444) #define __NR_landlock_add_rule (0x40000000 + 445) #define __NR_landlock_restrict_self (0x40000000 + 446) @@ -314,6 +317,24 @@ #define __NR_set_mempolicy_home_node (0x40000000 + 450) #define __NR_cachestat (0x40000000 + 451) #define __NR_fchmodat2 (0x40000000 + 452) +#define __NR_map_shadow_stack (0x40000000 + 453) +#define __NR_futex_wake (0x40000000 + 454) +#define __NR_futex_wait (0x40000000 + 455) +#define __NR_futex_requeue (0x40000000 + 456) +#define __NR_statmount (0x40000000 + 457) +#define __NR_listmount (0x40000000 + 458) +#define __NR_lsm_get_self_attr (0x40000000 + 459) +#define __NR_lsm_set_self_attr (0x40000000 + 460) +#define __NR_lsm_list_modules (0x40000000 + 461) +#define __NR_mseal (0x40000000 + 462) +#define __NR_setxattrat (0x40000000 + 463) +#define __NR_getxattrat (0x40000000 + 464) +#define __NR_listxattrat (0x40000000 + 465) +#define __NR_removexattrat (0x40000000 + 466) +#define __NR_open_tree_attr (0x40000000 + 467) +#define __NR_file_getattr (0x40000000 + 468) +#define __NR_file_setattr (0x40000000 + 469) +#define __NR_listns (0x40000000 + 470) #define __NR_rt_sigaction (0x40000000 + 512) diff --git a/libc-top-half/musl/arch/x32/bits/user.h b/libc-top-half/musl/arch/x32/bits/user.h index eac82a14b..b328edf95 100644 --- a/libc-top-half/musl/arch/x32/bits/user.h +++ b/libc-top-half/musl/arch/x32/bits/user.h @@ -1,6 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 - typedef struct user_fpregs_struct { uint16_t cwd, swd, ftw, fop; uint64_t rip, rdp; diff --git a/libc-top-half/musl/arch/x32/crt_arch.h b/libc-top-half/musl/arch/x32/crt_arch.h index 3eec61bdc..b1c9c4761 100644 --- a/libc-top-half/musl/arch/x32/crt_arch.h +++ b/libc-top-half/musl/arch/x32/crt_arch.h @@ -1,6 +1,7 @@ __asm__( ".text \n" ".global " START " \n" +".type " START ",%function \n" START ": \n" " xor %rbp,%rbp \n" " mov %rsp,%rdi \n" diff --git a/libc-top-half/musl/arch/x86_64/bits/posix.h b/libc-top-half/musl/arch/x86_64/bits/posix.h deleted file mode 100644 index c37b94c14..000000000 --- a/libc-top-half/musl/arch/x86_64/bits/posix.h +++ /dev/null @@ -1,2 +0,0 @@ -#define _POSIX_V6_LP64_OFF64 1 -#define _POSIX_V7_LP64_OFF64 1 diff --git a/libc-top-half/musl/arch/x86_64/bits/reg.h b/libc-top-half/musl/arch/x86_64/bits/reg.h index a4df04ced..6e54abcf9 100644 --- a/libc-top-half/musl/arch/x86_64/bits/reg.h +++ b/libc-top-half/musl/arch/x86_64/bits/reg.h @@ -1,5 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 #define R15 0 #define R14 1 #define R13 2 diff --git a/libc-top-half/musl/arch/x86_64/bits/stdint.h b/libc-top-half/musl/arch/x86_64/bits/stdint.h deleted file mode 100644 index 1bb147f24..000000000 --- a/libc-top-half/musl/arch/x86_64/bits/stdint.h +++ /dev/null @@ -1,20 +0,0 @@ -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 diff --git a/libc-top-half/musl/arch/x86_64/bits/syscall.h.in b/libc-top-half/musl/arch/x86_64/bits/syscall.h.in index 6543bbba7..66d150dd7 100644 --- a/libc-top-half/musl/arch/x86_64/bits/syscall.h.in +++ b/libc-top-half/musl/arch/x86_64/bits/syscall.h.in @@ -333,6 +333,8 @@ #define __NR_statx 332 #define __NR_io_pgetevents 333 #define __NR_rseq 334 +#define __NR_uretprobe 335 +#define __NR_uprobe 336 #define __NR_pidfd_send_signal 424 #define __NR_io_uring_setup 425 #define __NR_io_uring_enter 426 @@ -352,6 +354,7 @@ #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 @@ -361,4 +364,22 @@ #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_statmount 457 +#define __NR_listmount 458 +#define __NR_lsm_get_self_attr 459 +#define __NR_lsm_set_self_attr 460 +#define __NR_lsm_list_modules 461 +#define __NR_mseal 462 +#define __NR_setxattrat 463 +#define __NR_getxattrat 464 +#define __NR_listxattrat 465 +#define __NR_removexattrat 466 +#define __NR_open_tree_attr 467 +#define __NR_file_getattr 468 +#define __NR_file_setattr 469 +#define __NR_listns 470 diff --git a/libc-top-half/musl/arch/x86_64/bits/user.h b/libc-top-half/musl/arch/x86_64/bits/user.h index 4073cc06f..b328edf95 100644 --- a/libc-top-half/musl/arch/x86_64/bits/user.h +++ b/libc-top-half/musl/arch/x86_64/bits/user.h @@ -1,6 +1,3 @@ -#undef __WORDSIZE -#define __WORDSIZE 64 - typedef struct user_fpregs_struct { uint16_t cwd, swd, ftw, fop; uint64_t rip, rdp; diff --git a/libc-top-half/musl/arch/x86_64/crt_arch.h b/libc-top-half/musl/arch/x86_64/crt_arch.h index 3eec61bdc..b1c9c4761 100644 --- a/libc-top-half/musl/arch/x86_64/crt_arch.h +++ b/libc-top-half/musl/arch/x86_64/crt_arch.h @@ -1,6 +1,7 @@ __asm__( ".text \n" ".global " START " \n" +".type " START ",%function \n" START ": \n" " xor %rbp,%rbp \n" " mov %rsp,%rdi \n" diff --git a/libc-top-half/musl/crt/aarch64/crti.s b/libc-top-half/musl/crt/aarch64/crti.s index 775df0ac0..3776fa64b 100644 --- a/libc-top-half/musl/crt/aarch64/crti.s +++ b/libc-top-half/musl/crt/aarch64/crti.s @@ -1,6 +1,7 @@ .section .init .global _init .type _init,%function +.align 2 _init: stp x29,x30,[sp,-16]! mov x29,sp @@ -8,6 +9,7 @@ _init: .section .fini .global _fini .type _fini,%function +.align 2 _fini: stp x29,x30,[sp,-16]! mov x29,sp diff --git a/libc-top-half/musl/crt/arm/crti.s b/libc-top-half/musl/crt/arm/crti.s index 18dc1e419..cccda3eae 100644 --- a/libc-top-half/musl/crt/arm/crti.s +++ b/libc-top-half/musl/crt/arm/crti.s @@ -3,11 +3,13 @@ .section .init .global _init .type _init,%function +.align 2 _init: push {r0,lr} .section .fini .global _fini .type _fini,%function +.align 2 _fini: push {r0,lr} diff --git a/libc-top-half/musl/crt/crt1.c b/libc-top-half/musl/crt/crt1.c index 8fe8ab5d8..10601215e 100644 --- a/libc-top-half/musl/crt/crt1.c +++ b/libc-top-half/musl/crt/crt1.c @@ -11,7 +11,7 @@ weak void _fini(); int __libc_start_main(int (*)(), int, char **, void (*)(), void(*)(), void(*)()); -void _start_c(long *p) +hidden void _start_c(long *p) { int argc = p[0]; char **argv = (void *)(p+1); diff --git a/libc-top-half/musl/crt/mips/crtn.s b/libc-top-half/musl/crt/mips/crtn.s index 506a04b78..92eb3d0ef 100644 --- a/libc-top-half/musl/crt/mips/crtn.s +++ b/libc-top-half/musl/crt/mips/crtn.s @@ -3,11 +3,11 @@ .section .init lw $gp,24($sp) lw $ra,28($sp) - j $ra + jr $ra addu $sp,$sp,32 .section .fini lw $gp,24($sp) lw $ra,28($sp) - j $ra + jr $ra addu $sp,$sp,32 diff --git a/libc-top-half/musl/crt/mips64/crtn.s b/libc-top-half/musl/crt/mips64/crtn.s index f3930b240..8f090ed39 100644 --- a/libc-top-half/musl/crt/mips64/crtn.s +++ b/libc-top-half/musl/crt/mips64/crtn.s @@ -3,11 +3,11 @@ .section .init ld $gp,16($sp) ld $ra,24($sp) - j $ra + jr $ra daddu $sp,$sp,32 .section .fini ld $gp,16($sp) ld $ra,24($sp) - j $ra + jr $ra daddu $sp,$sp,32 diff --git a/libc-top-half/musl/crt/mipsn32/crtn.s b/libc-top-half/musl/crt/mipsn32/crtn.s index dccd7e890..0679eac3d 100644 --- a/libc-top-half/musl/crt/mipsn32/crtn.s +++ b/libc-top-half/musl/crt/mipsn32/crtn.s @@ -2,11 +2,11 @@ .section .init ld $gp, 16($sp) ld $ra, 24($sp) - j $ra + jr $ra addu $sp, $sp, 32 .section .fini ld $gp, 16($sp) ld $ra, 24($sp) - j $ra + jr $ra addu $sp, $sp, 32 diff --git a/libc-top-half/musl/include/dirent.h b/libc-top-half/musl/include/dirent.h index 52a3b16a4..1410e97a1 100644 --- a/libc-top-half/musl/include/dirent.h +++ b/libc-top-half/musl/include/dirent.h @@ -13,14 +13,23 @@ extern "C" { #define __NEED_ino_t #define __NEED_off_t -#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) #define __NEED_size_t -#endif +#define __NEED_ssize_t #include #include +typedef unsigned short reclen_t; + +struct posix_dent { + ino_t d_ino; + off_t d_off; + reclen_t d_reclen; + unsigned char d_type; + char d_name[]; +}; + #ifdef __wasilibc_unmodified_upstream /* Use alternate WASI libc headers */ typedef struct __dirstream DIR; #else @@ -39,6 +48,10 @@ int readdir_r(DIR *__restrict, struct dirent *__restrict, struct dire void rewinddir(DIR *); int dirfd(DIR *); +#ifdef __wasilibc_unmodified_upstream /* not implemented in wasi-libc yet */ +ssize_t posix_getdents(int, void *, size_t, int); +#endif + int alphasort(const struct dirent **, const struct dirent **); int scandir(const char *, struct dirent ***, int (*)(const struct dirent *), int (*)(const struct dirent **, const struct dirent **)); @@ -47,7 +60,6 @@ void seekdir(DIR *, long); long telldir(DIR *); #endif -#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #ifdef __wasilibc_unmodified_upstream /* Use alternate WASI libc headers */ #define DT_UNKNOWN 0 #define DT_FIFO 1 @@ -58,6 +70,8 @@ long telldir(DIR *); #define DT_LNK 10 #define DT_SOCK 12 #define DT_WHT 14 + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #define IFTODT(x) ((x)>>12 & 017) #define DTTOIF(x) ((x)<<12) #endif diff --git a/libc-top-half/musl/include/elf.h b/libc-top-half/musl/include/elf.h index 3d5e13e4b..2555b9061 100644 --- a/libc-top-half/musl/include/elf.h +++ b/libc-top-half/musl/include/elf.h @@ -712,6 +712,8 @@ typedef struct { #define NT_LOONGARCH_LSX 0xa02 #define NT_LOONGARCH_LASX 0xa03 #define NT_LOONGARCH_LBT 0xa04 +#define NT_LOONGARCH_HW_BREAK 0xa05 +#define NT_LOONGARCH_HW_WATCH 0xa06 @@ -1040,6 +1042,8 @@ typedef struct { #define AT_RANDOM 25 #define AT_HWCAP2 26 +#define AT_HWCAP3 29 +#define AT_HWCAP4 30 #define AT_EXECFN 31 @@ -3329,6 +3333,7 @@ enum #define R_LARCH_TLS_TPREL32 10 #define R_LARCH_TLS_TPREL64 11 #define R_LARCH_IRELATIVE 12 +#define R_LARCH_TLS_DESC64 14 #define R_LARCH_MARK_LA 20 #define R_LARCH_MARK_PCREL 21 #define R_LARCH_SOP_PUSH_PCREL 22 @@ -3405,6 +3410,32 @@ enum #define R_LARCH_TLS_GD_HI20 98 #define R_LARCH_32_PCREL 99 #define R_LARCH_RELAX 100 +#define R_LARCH_DELETE 101 +#define R_LARCH_ALIGN 102 +#define R_LARCH_PCREL20_S2 103 +#define R_LARCH_CFA 104 +#define R_LARCH_ADD6 105 +#define R_LARCH_SUB6 106 +#define R_LARCH_ADD_ULEB128 107 +#define R_LARCH_SUB_ULEB128 108 +#define R_LARCH_64_PCREL 109 +#define R_LARCH_CALL36 110 +#define R_LARCH_TLS_DESC_PC_HI20 111 +#define R_LARCH_TLS_DESC_PC_LO12 112 +#define R_LARCH_TLS_DESC64_PC_LO20 113 +#define R_LARCH_TLS_DESC64_PC_HI12 114 +#define R_LARCH_TLS_DESC_HI20 115 +#define R_LARCH_TLS_DESC_LO12 116 +#define R_LARCH_TLS_DESC64_LO20 117 +#define R_LARCH_TLS_DESC64_HI12 118 +#define R_LARCH_TLS_DESC_LD 119 +#define R_LARCH_TLS_DESC_CALL 120 +#define R_LARCH_TLS_LE_HI20_R 121 +#define R_LARCH_TLS_LE_ADD_R 122 +#define R_LARCH_TLS_LE_LO12_R 123 +#define R_LARCH_TLS_LD_PCREL20_S2 124 +#define R_LARCH_TLS_GD_PCREL20_S2 125 +#define R_LARCH_TLS_DESC_PCREL20_S2 126 #ifdef __cplusplus } diff --git a/libc-top-half/musl/include/netinet/in.h b/libc-top-half/musl/include/netinet/in.h index d9422af2e..afbd50474 100644 --- a/libc-top-half/musl/include/netinet/in.h +++ b/libc-top-half/musl/include/netinet/in.h @@ -148,7 +148,8 @@ uint16_t ntohs(uint16_t); #define IN6_IS_ADDR_V4COMPAT(a) \ (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ - ((uint32_t *) (a))[2] == 0 && ((uint8_t *) (a))[15] > 1) + ((uint32_t *) (a))[2] == 0 && \ + !IN6_IS_ADDR_UNSPECIFIED(a) && !IN6_IS_ADDR_LOOPBACK(a)) #define IN6_IS_ADDR_MC_NODELOCAL(a) \ (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x1)) diff --git a/libc-top-half/musl/include/sched.h b/libc-top-half/musl/include/sched.h index 407d604af..2abed8e1e 100644 --- a/libc-top-half/musl/include/sched.h +++ b/libc-top-half/musl/include/sched.h @@ -81,11 +81,10 @@ int clone (int (*)(void *), void *, int, void *, ...); int unshare(int); int setns(int, int); -void *memcpy(void *__restrict, const void *__restrict, size_t); -int memcmp(const void *, const void *, size_t); -void *memset (void *, int, size_t); -void *calloc(size_t, size_t); -void free(void *); +int (memcmp)(const void *, const void *, size_t); +void *(memset)(void *, int, size_t); +void *(calloc)(size_t, size_t); +void (free)(void *); typedef struct cpu_set_t { unsigned long __bits[128/sizeof(long)]; } cpu_set_t; int __sched_cpucount(size_t, const cpu_set_t *); @@ -119,13 +118,13 @@ __CPU_op_func_S(XOR, ^) #define CPU_XOR_S(a,b,c,d) __CPU_XOR_S(a,b,c,d) #define CPU_COUNT_S(size,set) __sched_cpucount(size,set) -#define CPU_ZERO_S(size,set) memset(set,0,size) -#define CPU_EQUAL_S(size,set1,set2) (!memcmp(set1,set2,size)) +#define CPU_ZERO_S(size,set) (memset)(set,0,size) +#define CPU_EQUAL_S(size,set1,set2) (!(memcmp)(set1,set2,size)) #define CPU_ALLOC_SIZE(n) (sizeof(long) * ( (n)/(8*sizeof(long)) \ + ((n)%(8*sizeof(long)) + 8*sizeof(long)-1)/(8*sizeof(long)) ) ) -#define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n))) -#define CPU_FREE(set) free(set) +#define CPU_ALLOC(n) ((cpu_set_t *)(calloc)(1,CPU_ALLOC_SIZE(n))) +#define CPU_FREE(set) (free)(set) #define CPU_SETSIZE 1024 diff --git a/libc-top-half/musl/include/shadow.h b/libc-top-half/musl/include/shadow.h index 2b1be413f..a9d6940f1 100644 --- a/libc-top-half/musl/include/shadow.h +++ b/libc-top-half/musl/include/shadow.h @@ -28,7 +28,6 @@ void setspent(void); void endspent(void); struct spwd *getspent(void); struct spwd *fgetspent(FILE *); -struct spwd *sgetspent(const char *); int putspent(const struct spwd *, FILE *); struct spwd *getspnam(const char *); diff --git a/libc-top-half/musl/include/stdio.h b/libc-top-half/musl/include/stdio.h index d63d739f0..793093442 100644 --- a/libc-top-half/musl/include/stdio.h +++ b/libc-top-half/musl/include/stdio.h @@ -184,6 +184,13 @@ char *ctermid(char *); #define L_ctermid 20 #endif +#if defined(_GNU_SOURCE) +#define RENAME_NOREPLACE (1 << 0) +#define RENAME_EXCHANGE (1 << 1) +#define RENAME_WHITEOUT (1 << 2) + +int renameat2(int, const char *, int, const char *, unsigned); +#endif #ifdef __wasilibc_unmodified_upstream /* WASI has no temp directories */ #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ diff --git a/libc-top-half/musl/include/sys/epoll.h b/libc-top-half/musl/include/sys/epoll.h index ac81a8418..5f975c4a0 100644 --- a/libc-top-half/musl/include/sys/epoll.h +++ b/libc-top-half/musl/include/sys/epoll.h @@ -7,6 +7,7 @@ extern "C" { #include #include +#include #include #define __NEED_sigset_t @@ -54,6 +55,17 @@ __attribute__ ((__packed__)) #endif ; +struct epoll_params { + uint32_t busy_poll_usecs; + uint16_t busy_poll_budget; + uint8_t prefer_busy_poll; + + uint8_t __pad; +}; + +#define EPOLL_IOC_TYPE 0x8A +#define EPIOCSPARAMS _IOW(EPOLL_IOC_TYPE, 0x01, struct epoll_params) +#define EPIOCGPARAMS _IOR(EPOLL_IOC_TYPE, 0x02, struct epoll_params) int epoll_create(int); int epoll_create1(int); diff --git a/libc-top-half/musl/include/sys/mman.h b/libc-top-half/musl/include/sys/mman.h index 335ba2d71..205161964 100644 --- a/libc-top-half/musl/include/sys/mman.h +++ b/libc-top-half/musl/include/sys/mman.h @@ -99,6 +99,10 @@ extern "C" { #define MADV_KEEPONFORK 19 #define MADV_COLD 20 #define MADV_PAGEOUT 21 +#define MADV_POPULATE_READ 22 +#define MADV_POPULATE_WRITE 23 +#define MADV_DONTNEED_LOCKED 24 +#define MADV_COLLAPSE 25 #define MADV_HWPOISON 100 #define MADV_SOFT_OFFLINE 101 #endif diff --git a/libc-top-half/musl/include/sys/reg.h b/libc-top-half/musl/include/sys/reg.h index b47452d00..0272e1370 100644 --- a/libc-top-half/musl/include/sys/reg.h +++ b/libc-top-half/musl/include/sys/reg.h @@ -4,6 +4,15 @@ #include #include +#include + +#undef __WORDSIZE +#if __LONG_MAX == 0x7fffffffL +#define __WORDSIZE 32 +#else +#define __WORDSIZE 64 +#endif + #include #endif diff --git a/libc-top-half/musl/include/sys/stat.h b/libc-top-half/musl/include/sys/stat.h index 01d30ddaf..8ada6f608 100644 --- a/libc-top-half/musl/include/sys/stat.h +++ b/libc-top-half/musl/include/sys/stat.h @@ -135,6 +135,22 @@ int lchmod(const char *, mode_t); #define STATX_BASIC_STATS 0x7ffU #define STATX_BTIME 0x800U #define STATX_ALL 0xfffU +#define STATX_MNT_ID 0x1000U +#define STATX_DIOALIGN 0x2000U +#define STATX_MNT_ID_UNIQUE 0x4000U +#define STATX_SUBVOL 0x8000U +#define STATX_WRITE_ATOMIC 0x10000U + +#define STATX_ATTR_COMPRESSED 0x4 +#define STATX_ATTR_IMMUTABLE 0x10 +#define STATX_ATTR_APPEND 0x20 +#define STATX_ATTR_NODUMP 0x40 +#define STATX_ATTR_ENCRYPTED 0x800 +#define STATX_ATTR_AUTOMOUNT 0x1000 +#define STATX_ATTR_MOUNT_ROOT 0x2000 +#define STATX_ATTR_VERITY 0x100000 +#define STATX_ATTR_DAX 0x200000 +#define STATX_ATTR_WRITE_ATOMIC 0x400000 struct statx_timestamp { int64_t tv_sec; @@ -162,7 +178,16 @@ struct statx { uint32_t stx_rdev_minor; uint32_t stx_dev_major; uint32_t stx_dev_minor; - uint64_t __pad1[14]; + uint64_t stx_mnt_id; + uint32_t stx_dio_mem_align; + uint32_t stx_dio_offset_align; + uint64_t stx_subvol; + uint32_t stx_atomic_write_unit_min; + uint32_t stx_atomic_write_unit_max; + uint32_t stx_atomic_write_segments_max; + uint32_t __pad1[1]; + uint64_t __pad2[9]; + }; int statx(int, const char *__restrict, int, unsigned, struct statx *__restrict); diff --git a/libc-top-half/musl/include/sys/uio.h b/libc-top-half/musl/include/sys/uio.h index f102d5a56..bac93a56b 100644 --- a/libc-top-half/musl/include/sys/uio.h +++ b/libc-top-half/musl/include/sys/uio.h @@ -47,6 +47,7 @@ ssize_t pwritev2 (int, const struct iovec *, int, off_t, int); #define RWF_SYNC 0x00000004 #define RWF_NOWAIT 0x00000008 #define RWF_APPEND 0x00000010 +#define RWF_NOAPPEND 0x00000020 #endif #endif diff --git a/libc-top-half/musl/include/sys/user.h b/libc-top-half/musl/include/sys/user.h index 96a034009..511caba38 100644 --- a/libc-top-half/musl/include/sys/user.h +++ b/libc-top-half/musl/include/sys/user.h @@ -8,6 +8,15 @@ extern "C" { #include #include +#include + +#undef __WORDSIZE +#if __LONG_MAX == 0x7fffffffL +#define __WORDSIZE 32 +#else +#define __WORDSIZE 64 +#endif + #include #ifdef __cplusplus diff --git a/libc-top-half/musl/include/syslog.h b/libc-top-half/musl/include/syslog.h index 5b4d2964e..57599e076 100644 --- a/libc-top-half/musl/include/syslog.h +++ b/libc-top-half/musl/include/syslog.h @@ -18,7 +18,7 @@ extern "C" { #define LOG_PRIMASK 7 #define LOG_PRI(p) ((p)&LOG_PRIMASK) -#define LOG_MAKEPRI(f, p) (((f)<<3)|(p)) +#define LOG_MAKEPRI(f, p) ((f)|(p)) #define LOG_MASK(p) (1<<(p)) #define LOG_UPTO(p) ((1<<((p)+1))-1) diff --git a/libc-top-half/musl/include/unistd.h b/libc-top-half/musl/include/unistd.h index c3158e6e6..d19871d09 100644 --- a/libc-top-half/musl/include/unistd.h +++ b/libc-top-half/musl/include/unistd.h @@ -367,7 +367,13 @@ pid_t gettid(void); #define _POSIX2_C_BIND _POSIX_VERSION -#include +#if __LONG_MAX == 0x7fffffffL +#define _POSIX_V6_ILP32_OFFBIG 1 +#define _POSIX_V7_ILP32_OFFBIG 1 +#else +#define _POSIX_V6_LP64_OFF64 1 +#define _POSIX_V7_LP64_OFF64 1 +#endif diff --git a/libc-top-half/musl/ldso/dlstart.c b/libc-top-half/musl/ldso/dlstart.c index 259f5e18e..4aac42bc2 100644 --- a/libc-top-half/musl/ldso/dlstart.c +++ b/libc-top-half/musl/ldso/dlstart.c @@ -45,7 +45,7 @@ hidden void _dlstart_c(size_t *sp, size_t *dynv) /* If dynv is null, the entry point was started from loader * that is not fdpic-aware. We can assume normal fixed- * displacement ELF loading was performed, but when ldso was - * run as a command, finding the Ehdr is a heursitic: we + * run as a command, finding the Ehdr is a heuristic: we * have to assume Phdrs start in the first 4k of the file. */ base = aux[AT_BASE]; if (!base) base = aux[AT_PHDR] & -4096; diff --git a/libc-top-half/musl/ldso/dynlink.c b/libc-top-half/musl/ldso/dynlink.c index 0897f3aeb..3b52fd3de 100644 --- a/libc-top-half/musl/ldso/dynlink.c +++ b/libc-top-half/musl/ldso/dynlink.c @@ -21,15 +21,17 @@ #include #include "pthread_impl.h" #include "fork_impl.h" +#include "libc.h" #include "dynlink.h" static size_t ldso_page_size; -#ifndef PAGE_SIZE +/* libc.h may have defined a macro for dynamic PAGE_SIZE already, but + * PAGESIZE is only defined if it's constant for the arch. */ +#ifndef PAGESIZE +#undef PAGE_SIZE #define PAGE_SIZE ldso_page_size #endif -#include "libc.h" - #define malloc __libc_malloc #define calloc __libc_calloc #define realloc __libc_realloc @@ -584,6 +586,7 @@ static void reclaim_gaps(struct dso *dso) for (; phcnt--; ph=(void *)((char *)ph+dso->phentsize)) { if (ph->p_type!=PT_LOAD) continue; if ((ph->p_flags&(PF_R|PF_W))!=(PF_R|PF_W)) continue; + if (ph->p_memsz == 0) continue; reclaim(dso, ph->p_vaddr & -PAGE_SIZE, ph->p_vaddr); reclaim(dso, ph->p_vaddr+ph->p_memsz, ph->p_vaddr+ph->p_memsz+PAGE_SIZE-1 & -PAGE_SIZE); @@ -1293,7 +1296,7 @@ static void extend_bfs_deps(struct dso *p) struct dso *dep = p->deps[i]; for (j=cnt=0; jndeps_direct; j++) if (!dep->deps[j]->mark) cnt++; - tmp = no_realloc ? + tmp = no_realloc ? malloc(sizeof(*tmp) * (ndeps_all+cnt+1)) : realloc(p->deps, sizeof(*tmp) * (ndeps_all+cnt+1)); if (!tmp) { @@ -1554,7 +1557,7 @@ static void do_init_fini(struct dso **queue) if (p->ctor_visitor || p->constructed) continue; p->ctor_visitor = self; - + decode_vec(p->dynv, dyn, DYN_CNT); if (dyn[0] & ((1<fini_next = fini_head; @@ -1665,7 +1668,7 @@ static void install_new_tls(void) * following stage 2 and stage 3 functions via primitive symbolic lookup * since it does not have access to their addresses to begin with. */ -/* Stage 2 of the dynamic linker is called after relative relocations +/* Stage 2 of the dynamic linker is called after relative relocations * have been processed. It can make function calls to static functions * and access string literals and static data, but cannot use extern * symbols. Its job is to perform symbolic relocations on the dynamic diff --git a/libc-top-half/musl/src/complex/cacosh.c b/libc-top-half/musl/src/complex/cacosh.c index 76127f75f..55b857cef 100644 --- a/libc-top-half/musl/src/complex/cacosh.c +++ b/libc-top-half/musl/src/complex/cacosh.c @@ -1,6 +1,6 @@ #include "complex_impl.h" -/* acosh(z) = i acos(z) */ +/* acosh(z) = ±i acos(z) */ double complex cacosh(double complex z) { diff --git a/libc-top-half/musl/src/complex/catan.c b/libc-top-half/musl/src/complex/catan.c index ccc2fb539..b4fe552a7 100644 --- a/libc-top-half/musl/src/complex/catan.c +++ b/libc-top-half/musl/src/complex/catan.c @@ -60,29 +60,6 @@ #include "complex_impl.h" -#define MAXNUM 1.0e308 - -static const double DP1 = 3.14159265160560607910E0; -static const double DP2 = 1.98418714791870343106E-9; -static const double DP3 = 1.14423774522196636802E-17; - -static double _redupi(double x) -{ - double t; - long i; - - t = x/M_PI; - if (t >= 0.0) - t += 0.5; - else - t -= 0.5; - - i = t; /* the multiple */ - t = i; - t = ((x - t * DP1) - t * DP2) - t * DP3; - return t; -} - double complex catan(double complex z) { double complex w; @@ -95,7 +72,7 @@ double complex catan(double complex z) a = 1.0 - x2 - (y * y); t = 0.5 * atan2(2.0 * x, a); - w = _redupi(t); + w = t; t = y - 1.0; a = x2 + (t * t); diff --git a/libc-top-half/musl/src/complex/catanf.c b/libc-top-half/musl/src/complex/catanf.c index 1d569f2da..faaa907a2 100644 --- a/libc-top-half/musl/src/complex/catanf.c +++ b/libc-top-half/musl/src/complex/catanf.c @@ -55,32 +55,6 @@ #include "complex_impl.h" -#define MAXNUMF 1.0e38F - -static const double DP1 = 3.140625; -static const double DP2 = 9.67502593994140625E-4; -static const double DP3 = 1.509957990978376432E-7; - -static const float float_pi = M_PI; - -static float _redupif(float xx) -{ - float x, t; - long i; - - x = xx; - t = x/float_pi; - if (t >= 0.0f) - t += 0.5f; - else - t -= 0.5f; - - i = t; /* the multiple */ - t = i; - t = ((x - t * DP1) - t * DP2) - t * DP3; - return t; -} - float complex catanf(float complex z) { float complex w; @@ -93,7 +67,7 @@ float complex catanf(float complex z) a = 1.0f - x2 - (y * y); t = 0.5f * atan2f(2.0f * x, a); - w = _redupif(t); + w = t; t = y - 1.0f; a = x2 + (t * t); diff --git a/libc-top-half/musl/src/complex/catanl.c b/libc-top-half/musl/src/complex/catanl.c index e62526c00..cd2d2b003 100644 --- a/libc-top-half/musl/src/complex/catanl.c +++ b/libc-top-half/musl/src/complex/catanl.c @@ -67,28 +67,6 @@ long double complex catanl(long double complex z) return catan(z); } #else -static const long double PIL = 3.141592653589793238462643383279502884197169L; -static const long double DP1 = 3.14159265358979323829596852490908531763125L; -static const long double DP2 = 1.6667485837041756656403424829301998703007e-19L; -static const long double DP3 = 1.8830410776607851167459095484560349402753e-39L; - -static long double redupil(long double x) -{ - long double t; - long i; - - t = x / PIL; - if (t >= 0.0L) - t += 0.5L; - else - t -= 0.5L; - - i = t; /* the multiple */ - t = i; - t = ((x - t * DP1) - t * DP2) - t * DP3; - return t; -} - long double complex catanl(long double complex z) { long double complex w; @@ -101,7 +79,7 @@ long double complex catanl(long double complex z) a = 1.0L - x2 - (y * y); t = atan2l(2.0L * x, a) * 0.5L; - w = redupil(t); + w = t; t = y - 1.0L; a = x2 + (t * t); diff --git a/libc-top-half/musl/src/conf/sysconf.c b/libc-top-half/musl/src/conf/sysconf.c index a935853cb..2fdbe9850 100644 --- a/libc-top-half/musl/src/conf/sysconf.c +++ b/libc-top-half/musl/src/conf/sysconf.c @@ -287,8 +287,13 @@ long sysconf(int name) #ifdef __wasilibc_unmodified_upstream // WASI has no auxv case JT_MINSIGSTKSZ & 255: case JT_SIGSTKSZ & 255: ; - long val = __getauxval(AT_MINSIGSTKSZ); - if (val < MINSIGSTKSZ) val = MINSIGSTKSZ; + /* Value from auxv/kernel is only sigfame size. Clamp it + * to at least 1k below arch's traditional MINSIGSTKSZ, + * then add 1k of working space for signal handler. */ + unsigned long sigframe_sz = __getauxval(AT_MINSIGSTKSZ); + if (sigframe_sz < MINSIGSTKSZ - 1024) + sigframe_sz = MINSIGSTKSZ - 1024; + unsigned val = sigframe_sz + 1024; if (values[name] == JT_SIGSTKSZ) val += SIGSTKSZ - MINSIGSTKSZ; return val; diff --git a/libc-top-half/musl/src/dirent/posix_getdents.c b/libc-top-half/musl/src/dirent/posix_getdents.c new file mode 100644 index 000000000..26c16ac6b --- /dev/null +++ b/libc-top-half/musl/src/dirent/posix_getdents.c @@ -0,0 +1,11 @@ +#include +#include +#include +#include "syscall.h" + +ssize_t posix_getdents(int fd, void *buf, size_t len, int flags) +{ + if (flags) return __syscall_ret(-EOPNOTSUPP); + if (len>INT_MAX) len = INT_MAX; + return syscall(SYS_getdents, fd, buf, len); +} diff --git a/libc-top-half/musl/src/errno/__strerror.h b/libc-top-half/musl/src/errno/__strerror.h index bd6dccbe2..f9af085ab 100644 --- a/libc-top-half/musl/src/errno/__strerror.h +++ b/libc-top-half/musl/src/errno/__strerror.h @@ -116,6 +116,8 @@ E(EALREADY, "Operation already in progress") E(EINPROGRESS, "Operation in progress") E(ESTALE, "Stale file handle") #ifdef __wasilibc_unmodified_upstream // errno value not in WASI +E(EUCLEAN, "Data consistency error") +E(ENAVAIL, "Resource not available") E(EREMOTEIO, "Remote I/O error") #endif E(EDQUOT, "Quota exceeded") diff --git a/libc-top-half/musl/src/exit/atexit.c b/libc-top-half/musl/src/exit/atexit.c index 155292d0e..e614351b9 100644 --- a/libc-top-half/musl/src/exit/atexit.c +++ b/libc-top-half/musl/src/exit/atexit.c @@ -19,6 +19,7 @@ static struct fl void *a[COUNT]; } builtin, *head; +static int finished_atexit; static int slot; #if defined(__wasilibc_unmodified_upstream) || defined(_REENTRANT) @@ -37,6 +38,10 @@ void __funcs_on_exit() func(arg); LOCK(lock); } + /* Unlock to prevent deadlock if a global dtor + * attempts to call atexit. */ + finished_atexit = 1; + UNLOCK(lock); } void __cxa_finalize(void *dso) @@ -47,6 +52,13 @@ int __cxa_atexit(void (*func)(void *), void *arg, void *dso) { LOCK(lock); + /* Prevent dtors from registering further atexit + * handlers that would never be run. */ + if (finished_atexit) { + UNLOCK(lock); + return -1; + } + /* Defer initialization of head so it can be in BSS */ if (!head) head = &builtin; diff --git a/libc-top-half/musl/src/exit/exit.c b/libc-top-half/musl/src/exit/exit.c index 1536d7dc0..dec473f9c 100644 --- a/libc-top-half/musl/src/exit/exit.c +++ b/libc-top-half/musl/src/exit/exit.c @@ -1,6 +1,9 @@ #include #include #include "libc.h" +#include "pthread_impl.h" +#include "atomic.h" +#include "syscall.h" static void dummy() { @@ -29,6 +32,17 @@ weak_alias(libc_exit_fini, __libc_exit_fini); #ifdef __wasilibc_unmodified_upstream // WASI libc uses a custom exit _Noreturn void exit(int code) { + /* Handle potentially concurrent or recursive calls to exit, + * whose behaviors have traditionally been undefined by the + * standards. Using a custom lock here avoids pulling in lock + * machinery and lets us trap recursive calls while supporting + * multiple threads contending to be the one to exit(). */ + static volatile int exit_lock[1]; + int tid = __pthread_self()->tid; + int prev = a_cas(exit_lock, 0, tid); + if (prev == tid) a_crash(); + else if (prev) for (;;) __sys_pause(); + __funcs_on_exit(); __libc_exit_fini(); __stdio_exit(); diff --git a/libc-top-half/musl/src/fenv/loongarch64/fenv-sf.c b/libc-top-half/musl/src/fenv/loongarch64/fenv-sf.c new file mode 100644 index 000000000..41154673a --- /dev/null +++ b/libc-top-half/musl/src/fenv/loongarch64/fenv-sf.c @@ -0,0 +1,3 @@ +#ifdef __loongarch_soft_float +#include "../fenv.c" +#endif diff --git a/libc-top-half/musl/src/include/sys/auxv.h b/libc-top-half/musl/src/include/sys/auxv.h index 9358a4a5d..63c5bfe94 100644 --- a/libc-top-half/musl/src/include/sys/auxv.h +++ b/libc-top-half/musl/src/include/sys/auxv.h @@ -5,6 +5,6 @@ #include -hidden unsigned long __getauxval(unsigned long); +unsigned long __getauxval(unsigned long); #endif diff --git a/libc-top-half/musl/src/internal/atomic.h b/libc-top-half/musl/src/internal/atomic.h index 96c1552d6..8f71c8cdf 100644 --- a/libc-top-half/musl/src/internal/atomic.h +++ b/libc-top-half/musl/src/internal/atomic.h @@ -194,7 +194,7 @@ static inline void a_store(volatile int *p, int v) #ifndef a_barrier #define a_barrier a_barrier -static void a_barrier() +static inline void a_barrier() { volatile int tmp = 0; a_cas(&tmp, 0, 0); diff --git a/libc-top-half/musl/src/internal/syscall.h b/libc-top-half/musl/src/internal/syscall.h index 2665715aa..0d4dc832d 100644 --- a/libc-top-half/musl/src/internal/syscall.h +++ b/libc-top-half/musl/src/internal/syscall.h @@ -392,6 +392,17 @@ static inline long __alt_socketcall(int sys, int sock, int cp, syscall_arg_t a, #define __sys_open_cp(...) __SYSCALL_DISP(__sys_open_cp,,__VA_ARGS__) #define sys_open_cp(...) __syscall_ret(__sys_open_cp(__VA_ARGS__)) +#ifdef SYS_pause +#define __sys_pause() __syscall(SYS_pause) +#define __sys_pause_cp() __syscall_cp(SYS_pause) +#else +#define __sys_pause() __syscall(SYS_ppoll, 0, 0, 0, 0) +#define __sys_pause_cp() __syscall_cp(SYS_ppoll, 0, 0, 0, 0) +#endif + +#define sys_pause() __syscall_ret(__sys_pause()) +#define sys_pause_cp() __syscall_ret(__sys_pause_cp()) + #ifdef SYS_wait4 #define __sys_wait4(a,b,c,d) __syscall(SYS_wait4,a,b,c,d) #define __sys_wait4_cp(a,b,c,d) __syscall_cp(SYS_wait4,a,b,c,d) diff --git a/libc-top-half/musl/src/internal/vdso.c b/libc-top-half/musl/src/internal/vdso.c index d46d32281..2b6e1ae28 100644 --- a/libc-top-half/musl/src/internal/vdso.c +++ b/libc-top-half/musl/src/internal/vdso.c @@ -40,6 +40,24 @@ static int checkver(Verdef *def, int vsym, const char *vername, char *strings) #define OK_TYPES (1< nsym) + nsym = buckets[i]; + } + if (nsym) { + hashval = buckets + gh[0] + (nsym - gh[1]); + do nsym++; + while (!(*hashval++ & 1)); + } + return nsym; +} + + void *__vdsosym(const char *vername, const char *name) { size_t i; @@ -60,6 +78,7 @@ void *__vdsosym(const char *vername, const char *name) char *strings = 0; Sym *syms = 0; Elf_Symndx *hashtab = 0; + uint32_t *ghashtab = 0; uint16_t *versym = 0; Verdef *verdef = 0; @@ -69,15 +88,20 @@ void *__vdsosym(const char *vername, const char *name) case DT_STRTAB: strings = p; break; case DT_SYMTAB: syms = p; break; case DT_HASH: hashtab = p; break; + case DT_GNU_HASH: ghashtab = p; break; case DT_VERSYM: versym = p; break; case DT_VERDEF: verdef = p; break; } } - if (!strings || !syms || !hashtab) return 0; + if (!strings || !syms) return 0; if (!verdef) versym = 0; + size_t nsym = 0; + + if (hashtab) nsym = hashtab[1]; + else if (ghashtab) nsym = count_syms_gnu(ghashtab); - for (i=0; i>4) & OK_BINDS)) continue; if (!syms[i].st_shndx) continue; diff --git a/libc-top-half/musl/src/ldso/loongarch64/tlsdesc.s b/libc-top-half/musl/src/ldso/loongarch64/tlsdesc.s new file mode 100644 index 000000000..4b6ea0e51 --- /dev/null +++ b/libc-top-half/musl/src/ldso/loongarch64/tlsdesc.s @@ -0,0 +1,37 @@ +.text +.global __tlsdesc_static +.hidden __tlsdesc_static +.type __tlsdesc_static,%function +__tlsdesc_static: + ld.d $a0, $a0, 8 + jr $ra +# size_t __tlsdesc_dynamic(size_t *a) +# { +# struct {size_t modidx,off;} *p = (void*)a[1]; +# size_t *dtv = *(size_t**)(tp - 8); +# return dtv[p->modidx] + p->off - tp; +# } +.global __tlsdesc_dynamic +.hidden __tlsdesc_dynamic +.type __tlsdesc_dynamic,%function +__tlsdesc_dynamic: + addi.d $sp, $sp, -16 + st.d $t1, $sp, 0 + st.d $t2, $sp, 8 + + ld.d $t2, $tp, -8 # t2=dtv + + ld.d $a0, $a0, 8 # a0=&{modidx,off} + ld.d $t1, $a0, 8 # t1=off + ld.d $a0, $a0, 0 # a0=modidx + slli.d $a0, $a0, 3 # a0=8*modidx + + add.d $a0, $a0, $t2 # a0=dtv+8*modidx + ld.d $a0, $a0, 0 # a0=dtv[modidx] + add.d $a0, $a0, $t1 # a0=dtv[modidx]+off + sub.d $a0, $a0, $tp # a0=dtv[modidx]+off-tp + + ld.d $t1, $sp, 0 + ld.d $t2, $sp, 8 + addi.d $sp, $sp, 16 + jr $ra diff --git a/libc-top-half/musl/src/legacy/getusershell.c b/libc-top-half/musl/src/legacy/getusershell.c index 5fecdec2e..1c5d98ec0 100644 --- a/libc-top-half/musl/src/legacy/getusershell.c +++ b/libc-top-half/musl/src/legacy/getusershell.c @@ -25,8 +25,10 @@ char *getusershell(void) ssize_t l; if (!f) setusershell(); if (!f) return 0; - l = getline(&line, &linesize, f); - if (l <= 0) return 0; + do { + l = getline(&line, &linesize, f); + if (l <= 0) return 0; + } while (line[0] == '#' || line[0] == '\n'); if (line[l-1]=='\n') line[l-1]=0; return line; } diff --git a/libc-top-half/musl/src/linux/renameat2.c b/libc-top-half/musl/src/linux/renameat2.c new file mode 100644 index 000000000..b80603889 --- /dev/null +++ b/libc-top-half/musl/src/linux/renameat2.c @@ -0,0 +1,11 @@ +#define _GNU_SOURCE +#include +#include "syscall.h" + +int renameat2(int oldfd, const char *old, int newfd, const char *new, unsigned flags) +{ +#ifdef SYS_renameat + if (!flags) return syscall(SYS_renameat, oldfd, old, newfd, new); +#endif + return syscall(SYS_renameat2, oldfd, old, newfd, new, flags); +} diff --git a/libc-top-half/musl/src/linux/statx.c b/libc-top-half/musl/src/linux/statx.c index 4616bff4a..4fb96e4bd 100644 --- a/libc-top-half/musl/src/linux/statx.c +++ b/libc-top-half/musl/src/linux/statx.c @@ -19,8 +19,11 @@ int statx(int dirfd, const char *restrict path, int flags, unsigned mask, struct ret = fstatat(dirfd, path, &st, flags); if (ret) return ret; + *stx = (struct statx){0}; stx->stx_dev_major = major(st.st_dev); stx->stx_dev_minor = minor(st.st_dev); + stx->stx_rdev_major = major(st.st_rdev); + stx->stx_rdev_minor = minor(st.st_rdev); stx->stx_ino = st.st_ino; stx->stx_mode = st.st_mode; stx->stx_nlink = st.st_nlink; @@ -35,7 +38,6 @@ int statx(int dirfd, const char *restrict path, int flags, unsigned mask, struct stx->stx_mtime.tv_nsec = st.st_mtim.tv_nsec; stx->stx_ctime.tv_sec = st.st_ctim.tv_sec; stx->stx_ctime.tv_nsec = st.st_ctim.tv_nsec; - stx->stx_btime = (struct statx_timestamp){.tv_sec=0, .tv_nsec=0}; stx->stx_mask = STATX_BASIC_STATS; return 0; diff --git a/libc-top-half/musl/src/locale/bind_textdomain_codeset.c b/libc-top-half/musl/src/locale/bind_textdomain_codeset.c index 5ebfd5e8a..240e83edf 100644 --- a/libc-top-half/musl/src/locale/bind_textdomain_codeset.c +++ b/libc-top-half/musl/src/locale/bind_textdomain_codeset.c @@ -5,7 +5,9 @@ char *bind_textdomain_codeset(const char *domainname, const char *codeset) { - if (codeset && strcasecmp(codeset, "UTF-8")) + if (codeset && strcasecmp(codeset, "UTF-8")) { errno = EINVAL; - return NULL; + return 0; + } + return "UTF-8"; } diff --git a/libc-top-half/musl/src/locale/codepages.h b/libc-top-half/musl/src/locale/codepages.h index 4e236ef3a..a254f0f58 100644 --- a/libc-top-half/musl/src/locale/codepages.h +++ b/libc-top-half/musl/src/locale/codepages.h @@ -286,6 +286,17 @@ "\323\174\103\215\64\365\124\123\213\77\336\150\263\115\66\375\164\363\12\55" "\255\304\42\261\57\266\234\162\17\56\260\240\162\113\56\263\310\62\66\50" +"cp858\0" +"\0\40" +"\307\360\223\216\70\344\200\123\316\71\352\254\203\316\73\356\260\103\114\61" +"\311\230\143\14\75\366\310\263\117\76\377\130\303\15\76\243\140\163\15\135" +"\341\264\63\217\76\361\104\243\212\56\277\270\302\112\57\274\204\262\312\56" +"\140\207\55\66\315\72\7\43\14\60\251\104\375\163\321\113\213\122\212\315" +"\67\363\274\163\316\63\367\74\316\60\110\13\175\65\325\116\373\254\65\51" +"\360\100\243\314\62\310\220\334\214\63\317\340\134\163\327\134\233\302\314\326" +"\323\174\103\215\64\365\124\123\213\77\336\150\263\115\66\375\164\363\12\55" +"\255\304\42\261\57\266\234\162\17\56\260\240\162\113\56\263\310\62\66\50" + "cp866\0" "\0\40" "\337\201\27\236\170\343\221\127\236\171\347\241\227\236\172" diff --git a/libc-top-half/musl/src/locale/iconv.c b/libc-top-half/musl/src/locale/iconv.c index 3dd9fd902..52178950d 100644 --- a/libc-top-half/musl/src/locale/iconv.c +++ b/libc-top-half/musl/src/locale/iconv.c @@ -52,7 +52,7 @@ static const unsigned char charmaps[] = "shiftjis\0sjis\0cp932\0\0\321" "iso2022jp\0\0\322" "gb18030\0\0\330" -"gbk\0\0\331" +"gbk\0cp936\0windows936\0\0\331" "gb2312\0\0\332" "big5\0bigfive\0cp950\0big5hkscs\0\0\340" "euckr\0ksc5601\0ksx1001\0cp949\0\0\350" @@ -339,7 +339,10 @@ size_t iconv(iconv_t cd, char **restrict in, size_t *restrict inb, char **restri } else if (d-159 <= 252-159) { c++; d -= 159; + } else { + goto ilseq; } + if (c>=84) goto ilseq; c = jis0208[c][d]; if (!c) goto ilseq; break; @@ -403,6 +406,10 @@ size_t iconv(iconv_t cd, char **restrict in, size_t *restrict inb, char **restri if (c < 128) break; if (c < 0xa1) goto ilseq; case GBK: + if (c == 128) { + c = 0x20ac; + break; + } case GB18030: if (c < 128) break; c -= 0x81; diff --git a/libc-top-half/musl/src/malloc/mallocng/glue.h b/libc-top-half/musl/src/malloc/mallocng/glue.h index 77f4c812b..8c2586fbd 100644 --- a/libc-top-half/musl/src/malloc/mallocng/glue.h +++ b/libc-top-half/musl/src/malloc/mallocng/glue.h @@ -62,8 +62,8 @@ __attribute__((__visibility__("hidden"))) extern int __malloc_lock[1]; #define LOCK_OBJ_DEF \ -int __malloc_lock[1]; \ -void __malloc_atfork(int who) { malloc_atfork(who); } +void __malloc_atfork(int who) { malloc_atfork(who); } \ +int __malloc_lock[1] static inline void rdlock() { diff --git a/libc-top-half/musl/src/math/fma.c b/libc-top-half/musl/src/math/fma.c index 0c6f90c9c..adfadca8c 100644 --- a/libc-top-half/musl/src/math/fma.c +++ b/libc-top-half/musl/src/math/fma.c @@ -53,7 +53,7 @@ double fma(double x, double y, double z) return x*y + z; if (nz.e >= ZEROINFNAN) { if (nz.e > ZEROINFNAN) /* z==0 */ - return x*y + z; + return x*y; return z; } diff --git a/libc-top-half/musl/src/math/powl.c b/libc-top-half/musl/src/math/powl.c index 25364d700..b871d8cd2 100644 --- a/libc-top-half/musl/src/math/powl.c +++ b/libc-top-half/musl/src/math/powl.c @@ -57,14 +57,6 @@ * IEEE 0,8700 60000 6.5e-18 1.0e-18 * 0.99 < x < 1.01, 0 < y < 8700, uniformly distributed. * - * - * ERROR MESSAGES: - * - * message condition value returned - * pow overflow x**y > MAXNUM INFINITY - * pow underflow x**y < 1/MAXNUM 0.0 - * pow domain x<0 and y noninteger 0.0 - * */ #include "libm.h" diff --git a/libc-top-half/musl/src/misc/initgroups.c b/libc-top-half/musl/src/misc/initgroups.c index 922a95814..101f5c7b0 100644 --- a/libc-top-half/musl/src/misc/initgroups.c +++ b/libc-top-half/musl/src/misc/initgroups.c @@ -1,11 +1,29 @@ #define _GNU_SOURCE #include #include +#include int initgroups(const char *user, gid_t gid) { - gid_t groups[NGROUPS_MAX]; - int count = NGROUPS_MAX; - if (getgrouplist(user, gid, groups, &count) < 0) return -1; - return setgroups(count, groups); + gid_t buf[32], *groups = buf; + int count = sizeof buf / sizeof *buf, prev_count = count; + while (getgrouplist(user, gid, groups, &count) < 0) { + if (groups != buf) free(groups); + + /* Return if failure isn't buffer size */ + if (count <= prev_count) + return -1; + + /* Always increase by at least 50% to limit to + * logarithmically many retries on TOCTOU races. */ + if (count < prev_count + (prev_count>>1)) + count = prev_count + (prev_count>>1); + + groups = calloc(count, sizeof *groups); + if (!groups) return -1; + prev_count = count; + } + int ret = setgroups(count, groups); + if (groups != buf) free(groups); + return ret; } diff --git a/libc-top-half/musl/src/misc/mntent.c b/libc-top-half/musl/src/misc/mntent.c index 78bf0cd0f..76f9c1627 100644 --- a/libc-top-half/musl/src/misc/mntent.c +++ b/libc-top-half/musl/src/misc/mntent.c @@ -81,7 +81,7 @@ struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int bufle len = strlen(linebuf); if (len > INT_MAX) continue; for (i = 0; i < sizeof n / sizeof *n; i++) n[i] = len; - sscanf(linebuf, " %n%*[^ \t]%n %n%*[^ \t]%n %n%*[^ \t]%n %n%*[^ \t]%n %d %d", + sscanf(linebuf, " %n%*[^ \t\n]%n %n%*[^ \t\n]%n %n%*[^ \t\n]%n %n%*[^ \t\n]%n %d %d", n, n+1, n+2, n+3, n+4, n+5, n+6, n+7, &mnt->mnt_freq, &mnt->mnt_passno); } while (linebuf[n[0]] == '#' || n[1]==len); @@ -115,5 +115,13 @@ int addmntent(FILE *f, const struct mntent *mnt) char *hasmntopt(const struct mntent *mnt, const char *opt) { - return strstr(mnt->mnt_opts, opt); + size_t l = strlen(opt); + char *p = mnt->mnt_opts; + for (;;) { + if (!strncmp(p, opt, l) && (!p[l] || p[l]==',' || p[l]=='=')) + return p; + p = strchr(p, ','); + if (!p) return 0; + p++; + } } diff --git a/libc-top-half/musl/src/mq/x32/mq_open.c b/libc-top-half/musl/src/mq/x32/mq_open.c new file mode 100644 index 000000000..234819598 --- /dev/null +++ b/libc-top-half/musl/src/mq/x32/mq_open.c @@ -0,0 +1,22 @@ +#include +#include +#include +#include "syscall.h" + +mqd_t mq_open(const char *name, int flags, ...) +{ + mode_t mode = 0; + struct mq_attr *attr = 0; + long long attrbuf[8]; + if (*name == '/') name++; + if (flags & O_CREAT) { + va_list ap; + va_start(ap, flags); + mode = va_arg(ap, mode_t); + attr = va_arg(ap, struct mq_attr *); + if (attr) for (int i=0; i<8; i++) + attrbuf[i] = *(long *)((char *)attr + i*sizeof(long)); + va_end(ap); + } + return syscall(SYS_mq_open, name, flags, mode, attr?attrbuf:0); +} diff --git a/libc-top-half/musl/src/mq/x32/mq_setattr.c b/libc-top-half/musl/src/mq/x32/mq_setattr.c new file mode 100644 index 000000000..0c631175d --- /dev/null +++ b/libc-top-half/musl/src/mq/x32/mq_setattr.c @@ -0,0 +1,14 @@ +#include +#include "syscall.h" + +int mq_setattr(mqd_t mqd, const struct mq_attr *restrict new, struct mq_attr *restrict old) +{ + long long attr[8]; + if (new) for (int i=0; i<8; i++) + attr[i] = *(long *)((char *)new + i*sizeof(long)); + int ret = __syscall(SYS_mq_getsetattr, mqd, new?attr:0, old?attr:0); + if (ret < 0) return __syscall_ret(ret); + if (old) for (int i=0; i<8; i++) + *(long *)((char *)old + i*sizeof(long)) = attr[i]; + return 0; +} diff --git a/libc-top-half/musl/src/multibyte/mbsnrtowcs.c b/libc-top-half/musl/src/multibyte/mbsnrtowcs.c index 931192e2d..47cbdc004 100644 --- a/libc-top-half/musl/src/multibyte/mbsnrtowcs.c +++ b/libc-top-half/musl/src/multibyte/mbsnrtowcs.c @@ -2,11 +2,13 @@ size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, size_t wn, mbstate_t *restrict st) { + static unsigned internal_state; size_t l, cnt=0, n2; wchar_t *ws, wbuf[256]; const char *s = *src; const char *tmp_s; + if (!st) st = (void *)&internal_state; if (!wcs) ws = wbuf, wn = sizeof wbuf / sizeof *wbuf; else ws = wcs; @@ -41,8 +43,8 @@ size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, si s = 0; break; } - /* have to roll back partial character */ - *(unsigned *)st = 0; + s += n; + n -= n; break; } s += l; n -= l; diff --git a/libc-top-half/musl/src/network/getifaddrs.c b/libc-top-half/musl/src/network/getifaddrs.c index 74df4d6c6..55039bd89 100644 --- a/libc-top-half/musl/src/network/getifaddrs.c +++ b/libc-top-half/musl/src/network/getifaddrs.c @@ -13,8 +13,8 @@ /* getifaddrs() reports hardware addresses with PF_PACKET that implies * struct sockaddr_ll. But e.g. Infiniband socket address length is - * longer than sockaddr_ll.ssl_addr[8] can hold. Use this hack struct - * to extend ssl_addr - callers should be able to still use it. */ + * longer than sockaddr_ll.sll_addr[8] can hold. Use this hack struct + * to extend sll_addr - callers should be able to still use it. */ struct sockaddr_ll_hack { unsigned short sll_family, sll_protocol; int sll_ifindex; diff --git a/libc-top-half/musl/src/network/inet_ntop.c b/libc-top-half/musl/src/network/inet_ntop.c index 4bfef2c55..f442f47d7 100644 --- a/libc-top-half/musl/src/network/inet_ntop.c +++ b/libc-top-half/musl/src/network/inet_ntop.c @@ -34,7 +34,12 @@ const char *inet_ntop(int af, const void *restrict a0, char *restrict s, socklen for (i=best=0, max=2; buf[i]; i++) { if (i && buf[i] != ':') continue; j = strspn(buf+i, ":0"); - if (j>max) best=i, max=j; + /* The leading sequence of zeros (best==0) is + * disadvantaged compared to sequences elsewhere + * as it doesn't have a leading colon. One extra + * character is required for another sequence to + * beat it fairly. */ + if (j>max+(best==0)) best=i, max=j; } if (max>3) { buf[best] = buf[best+1] = ':'; diff --git a/libc-top-half/musl/src/network/res_msend.c b/libc-top-half/musl/src/network/res_msend.c index 86c2fcf4f..fcb525130 100644 --- a/libc-top-half/musl/src/network/res_msend.c +++ b/libc-top-half/musl/src/network/res_msend.c @@ -83,8 +83,8 @@ int __res_msend_rc(int nqueries, const unsigned char *const *queries, int fd; int timeout, attempts, retry_interval, servfail_retry; union { - struct sockaddr_in sin; struct sockaddr_in6 sin6; + struct sockaddr_in sin; } sa = {0}, ns[MAXNS] = {{0}}; socklen_t sl = sizeof sa.sin; int nns = 0; diff --git a/libc-top-half/musl/src/passwd/getgr_a.c b/libc-top-half/musl/src/passwd/getgr_a.c index afeb1eceb..845504045 100644 --- a/libc-top-half/musl/src/passwd/getgr_a.c +++ b/libc-top-half/musl/src/passwd/getgr_a.c @@ -71,6 +71,10 @@ int __getgr_a(const char *name, gid_t gid, struct group *gr, char **buf, size_t goto cleanup_f; } + if (groupbuf[GRMEMCNT] > (size_t)(INT32_MAX-1)) { + rv = ENOMEM; + goto cleanup_f; + } if (groupbuf[GRNAMELEN] > SIZE_MAX - groupbuf[GRPASSWDLEN]) { rv = ENOMEM; goto cleanup_f; @@ -127,7 +131,13 @@ int __getgr_a(const char *name, gid_t gid, struct group *gr, char **buf, size_t if (groupbuf[GRMEMCNT]) { mem[0][0] = *buf + groupbuf[GRNAMELEN] + groupbuf[GRPASSWDLEN]; for (ptr = mem[0][0], i = 0; ptr != mem[0][0]+grlist_len; ptr++) - if (!*ptr) mem[0][++i] = ptr+1; + if (!*ptr) + if (i #include +#include #include "syscall.h" int sigaltstack(const stack_t *restrict ss, stack_t *restrict old) { if (ss) { - if (!(ss->ss_flags & SS_DISABLE) && ss->ss_size < MINSIGSTKSZ) { + size_t min = sysconf(_SC_MINSIGSTKSZ); + if (!(ss->ss_flags & SS_DISABLE) && ss->ss_size < min) { errno = ENOMEM; return -1; } diff --git a/libc-top-half/musl/src/signal/siglongjmp.c b/libc-top-half/musl/src/signal/siglongjmp.c index bc317acce..53789b239 100644 --- a/libc-top-half/musl/src/signal/siglongjmp.c +++ b/libc-top-half/musl/src/signal/siglongjmp.c @@ -5,5 +5,10 @@ _Noreturn void siglongjmp(sigjmp_buf buf, int ret) { + /* If sigsetjmp was called with nonzero savemask flag, the address + * longjmp will return to is inside of sigsetjmp. The signal mask + * will then be restored in the returned-to context instead of here, + * which matters if the context we are returning from may not have + * sufficient stack space for signal delivery. */ longjmp(buf, ret); } diff --git a/libc-top-half/musl/src/signal/sigpause.c b/libc-top-half/musl/src/signal/sigpause.c index 363d2fec2..1587c3918 100644 --- a/libc-top-half/musl/src/signal/sigpause.c +++ b/libc-top-half/musl/src/signal/sigpause.c @@ -4,6 +4,6 @@ int sigpause(int sig) { sigset_t mask; sigprocmask(0, 0, &mask); - sigdelset(&mask, sig); + if (sigdelset(&mask, sig)) return -1; return sigsuspend(&mask); } diff --git a/libc-top-half/musl/src/stdio/__stdio_write.c b/libc-top-half/musl/src/stdio/__stdio_write.c index 753730493..f2cd90048 100644 --- a/libc-top-half/musl/src/stdio/__stdio_write.c +++ b/libc-top-half/musl/src/stdio/__stdio_write.c @@ -11,6 +11,11 @@ size_t __stdio_write(FILE *f, const unsigned char *buf, size_t len) size_t rem = iov[0].iov_len + iov[1].iov_len; int iovcnt = 2; ssize_t cnt; + + if (!iov->iov_len) { + iov++; + iovcnt--; + } for (;;) { #ifdef __wasilibc_unmodified_upstream // WASI has no syscall cnt = syscall(SYS_writev, f->fd, iov, iovcnt); diff --git a/libc-top-half/musl/src/stdio/vfprintf.c b/libc-top-half/musl/src/stdio/vfprintf.c index c5a09c2c6..70cea1a5e 100644 --- a/libc-top-half/musl/src/stdio/vfprintf.c +++ b/libc-top-half/musl/src/stdio/vfprintf.c @@ -186,7 +186,8 @@ static char *fmt_u(uintmax_t x, char *s) { unsigned long y; for ( ; x>ULONG_MAX; x/=10) *--s = '0' + x%10; - for (y=x; y; y/=10) *--s = '0' + y%10; + for (y=x; y>=10; y/=10) *--s = '0' + y%10; + if (y) *--s = '0' + y; return s; } @@ -203,13 +204,19 @@ typedef char compiler_defines_long_double_incorrectly[9-(int)sizeof(long double) #endif #if defined(__wasilibc_printscan_no_long_double) -static int fmt_fp(FILE *f, long_double y, int w, int p, int fl, int t) +static int fmt_fp(FILE *f, long_double y, int w, int p, int fl, int t, int ps) #else -static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t) +static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t, int ps) #endif { - uint32_t big[(LDBL_MANT_DIG+28)/29 + 1 // mantissa expansion - + (LDBL_MAX_EXP+LDBL_MANT_DIG+28+8)/9]; // exponent expansion + int max_mant_dig = (ps==BIGLPRE) ? LDBL_MANT_DIG : DBL_MANT_DIG; + int max_exp = (ps==BIGLPRE) ? LDBL_MAX_EXP : DBL_MAX_EXP; + /* One slot for 29 bits left of radix point, a slot for every 29-21=8 + * bits right of the radix point, and one final zero slot. */ + int max_mant_slots = 1 + (max_mant_dig-29+7)/8 + 1; + int max_exp_slots = (max_exp+max_mant_dig+28+8)/9; + int bufsize = max_mant_slots + max_exp_slots; + uint32_t big[bufsize]; uint32_t *a, *d, *r, *z; int e2=0, e, i, j, l; char buf[9+LDBL_MANT_DIG/4], *s; @@ -240,22 +247,11 @@ static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t) if (y) e2--; if ((t|32)=='a') { -#if defined(__wasilibc_printscan_no_long_double) - long_double round = 8.0; -#else - long double round = 8.0; -#endif - int re; - if (t&32) prefix += 9; pl += 2; - if (p<0 || p>=LDBL_MANT_DIG/4-1) re=0; - else re=LDBL_MANT_DIG/4-1-p; - - if (re) { - round *= 1<<(LDBL_MANT_DIG%4); - while (re--) round*=16; + if (p>=0 && p<(LDBL_MANT_DIG-1+3)/4) { + double round = scalbn(1, LDBL_MANT_DIG-1-(p*4)); if (*prefix=='-') { y=-y; y-=round; @@ -301,7 +297,7 @@ static int fmt_fp(FILE *f, long double y, int w, int p, int fl, int t) if (y) y *= 0x1p28, e2-=28; if (e2<0) a=r=z=big; - else a=r=z=big+sizeof(big)/sizeof(*big) - LDBL_MANT_DIG - 1; + else a=r=z=big+sizeof(big)/sizeof(*big) - max_mant_slots - 1; do { *z = y; @@ -602,11 +598,11 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, case 'x': case 'X': a = fmt_x(arg.i, z, t&32); if (arg.i && (fl & ALT_FORM)) prefix+=(t>>4), pl=2; - if (0) { + goto ifmt_tail; case 'o': a = fmt_o(arg.i, z); if ((fl&ALT_FORM) && pINTMAX_MAX) { @@ -618,7 +614,7 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, } else pl=0; case 'u': a = fmt_u(arg.i, z); - } + ifmt_tail: if (xp && p<0) goto overflow; if (xp) fl &= ~ZERO_PAD; if (!arg.i && !p) { @@ -664,7 +660,7 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, case 'e': case 'f': case 'g': case 'a': case 'E': case 'F': case 'G': case 'A': if (xp && p<0) goto overflow; - l = fmt_fp(f, arg.f, w, p, fl, t); + l = fmt_fp(f, arg.f, w, p, fl, t, ps); if (l<0) goto overflow; continue; #endif diff --git a/libc-top-half/musl/src/stdlib/qsort.c b/libc-top-half/musl/src/stdlib/qsort.c index 314ddc29d..ab79dc6f4 100644 --- a/libc-top-half/musl/src/stdlib/qsort.c +++ b/libc-top-half/musl/src/stdlib/qsort.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 by Valentin Ochs +/* Copyright (C) 2011 by Lynn Ochs * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to diff --git a/libc-top-half/musl/src/string/strcasestr.c b/libc-top-half/musl/src/string/strcasestr.c index af109f361..dc598bc38 100644 --- a/libc-top-half/musl/src/string/strcasestr.c +++ b/libc-top-half/musl/src/string/strcasestr.c @@ -4,6 +4,7 @@ char *strcasestr(const char *h, const char *n) { size_t l = strlen(n); + if (!l) return (char *)h; for (; *h; h++) if (!strncasecmp(h, n, l)) return (char *)h; return 0; } diff --git a/libc-top-half/musl/src/termios/cfgetospeed.c b/libc-top-half/musl/src/termios/cfgetospeed.c index 55fa6f55c..de46a1d8a 100644 --- a/libc-top-half/musl/src/termios/cfgetospeed.c +++ b/libc-top-half/musl/src/termios/cfgetospeed.c @@ -9,5 +9,5 @@ speed_t cfgetospeed(const struct termios *tio) speed_t cfgetispeed(const struct termios *tio) { - return cfgetospeed(tio); + return (tio->c_cflag & CIBAUD) / (CIBAUD/CBAUD); } diff --git a/libc-top-half/musl/src/termios/cfsetospeed.c b/libc-top-half/musl/src/termios/cfsetospeed.c index c9cbdd9d9..3eab092af 100644 --- a/libc-top-half/musl/src/termios/cfsetospeed.c +++ b/libc-top-half/musl/src/termios/cfsetospeed.c @@ -16,7 +16,11 @@ int cfsetospeed(struct termios *tio, speed_t speed) int cfsetispeed(struct termios *tio, speed_t speed) { - return speed ? cfsetospeed(tio, speed) : 0; + if (speed & ~CBAUD) { + errno = EINVAL; + return -1; + } + tio->c_cflag &= ~CIBAUD; + tio->c_cflag |= speed * (CIBAUD/CBAUD); + return 0; } - -weak_alias(cfsetospeed, cfsetspeed); diff --git a/libc-top-half/musl/src/termios/cfsetspeed.c b/libc-top-half/musl/src/termios/cfsetspeed.c new file mode 100644 index 000000000..2c369db93 --- /dev/null +++ b/libc-top-half/musl/src/termios/cfsetspeed.c @@ -0,0 +1,11 @@ +#define _BSD_SOURCE +#include +#include +#include + +int cfsetspeed(struct termios *tio, speed_t speed) +{ + int r = cfsetospeed(tio, speed); + if (!r) cfsetispeed(tio, 0); + return r; +} diff --git a/libc-top-half/musl/src/thread/wasi-threads/sem_post.c b/libc-top-half/musl/src/thread/wasi-threads/sem_post.c index 5c2517f23..1c8f763ca 100644 --- a/libc-top-half/musl/src/thread/wasi-threads/sem_post.c +++ b/libc-top-half/musl/src/thread/wasi-threads/sem_post.c @@ -16,6 +16,6 @@ int sem_post(sem_t *sem) if (waiters <= 1) new &= ~0x80000000; } while (a_cas(sem->__val, val, new) != val); - if (val<0) __wake(sem->__val, waiters>1 ? 1 : -1, priv); + if (val<0 || waiters) __wake(sem->__val, waiters>1 ? 1 : -1, priv); return 0; } diff --git a/libc-top-half/musl/src/time/__tz.c b/libc-top-half/musl/src/time/__tz.c index 7efb9a975..6017d3850 100644 --- a/libc-top-half/musl/src/time/__tz.c +++ b/libc-top-half/musl/src/time/__tz.c @@ -28,7 +28,6 @@ weak_alias(__tzname, tzname); static char std_name[TZNAME_MAX+1]; static char dst_name[TZNAME_MAX+1]; #endif -const char __utc[] = "UTC"; #ifdef __wasilibc_unmodified_upstream // timezone data static int dst_off; @@ -169,7 +168,7 @@ static void do_tzset() || !strcmp(dummy_name, "UTC") || !strcmp(dummy_name, "GMT"))) posix_form = 1; - } + } /* Non-suid can use an absolute tzfile pathname or a relative * pathame beginning with "."; in secure mode, only the diff --git a/libc-top-half/musl/src/time/__utc.c b/libc-top-half/musl/src/time/__utc.c new file mode 100644 index 000000000..9e8bfc58f --- /dev/null +++ b/libc-top-half/musl/src/time/__utc.c @@ -0,0 +1,3 @@ +#include "time_impl.h" + +const char __utc[] = "UTC"; diff --git a/libc-top-half/musl/src/time/strptime.c b/libc-top-half/musl/src/time/strptime.c index c54a0d8c4..78096cd7d 100644 --- a/libc-top-half/musl/src/time/strptime.c +++ b/libc-top-half/musl/src/time/strptime.c @@ -59,6 +59,22 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri s = strptime(s, "%m/%d/%y", tm); if (!s) return 0; break; + case 'F': + /* Use temp buffer to implement the odd requirement + * that entire field be width-limited but the year + * subfield not itself be limited. */ + i = 0; + char tmp[20]; + if (*s == '-' || *s == '+') tmp[i++] = *s++; + while (*s=='0' && isdigit(s[1])) s++; + for (; *s && i<(size_t)w && i+1tm_hour; min = 0; @@ -114,6 +130,13 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri s = strptime(s, "%H:%M", tm); if (!s) return 0; break; + case 's': + /* Parse only. Effect on tm is unspecified + * and presently no effect is implemented.. */ + if (*s == '-') s++; + if (!isdigit(*s)) return 0; + while (isdigit(*s)) s++; + break; case 'S': dest = &tm->tm_sec; min = 0; @@ -125,11 +148,30 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri break; case 'U': case 'W': - /* Throw away result, for now. (FIXME?) */ + /* Throw away result of %U, %V, %W, %g, and %G. Effect + * is unspecified and there is no clear right choice. */ dest = &dummy; min = 0; range = 54; goto numeric_range; + case 'V': + dest = &dummy; + min = 1; + range = 53; + goto numeric_range; + case 'g': + dest = &dummy; + w = 2; + goto numeric_digits; + case 'G': + dest = &dummy; + if (w<0) w=4; + goto numeric_digits; + case 'u': + dest = &tm->tm_wday; + min = 1; + range = 7; + goto numeric_range; case 'w': dest = &tm->tm_wday; min = 0; @@ -154,6 +196,30 @@ char *strptime(const char *restrict s, const char *restrict f, struct tm *restri adj = 1900; want_century = 0; goto numeric_digits; + case 'z': + if (*s == '+') neg = 0; + else if (*s == '-') neg = 1; + else return 0; + for (i=0; i<4; i++) if (!isdigit(s[1+i])) return 0; + tm->__tm_gmtoff = (s[1]-'0')*36000+(s[2]-'0')*3600 + + (s[3]-'0')*600 + (s[4]-'0')*60; + if (neg) tm->__tm_gmtoff = -tm->__tm_gmtoff; + s += 5; + break; +#ifdef __wasilibc_unmodified_upstream /* WASI has no timezone tables */ + case 'Z': + if (!strncmp(s, tzname[0], len = strlen(tzname[0]))) { + tm->tm_isdst = 0; + s += len; + } else if (!strncmp(s, tzname[1], len=strlen(tzname[1]))) { + tm->tm_isdst = 1; + s += len; + } else { + /* FIXME: is this supposed to be an error? */ + while ((*s|32)-'a' <= 'z'-'a') s++; + } + break; +#endif case '%': if (*s++ != '%') return 0; break; diff --git a/libc-top-half/musl/src/time/timer_create.c b/libc-top-half/musl/src/time/timer_create.c index 9216b3abc..cc6c22367 100644 --- a/libc-top-half/musl/src/time/timer_create.c +++ b/libc-top-half/musl/src/time/timer_create.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "pthread_impl.h" #include "atomic.h" @@ -12,7 +13,7 @@ struct ksigevent { }; struct start_args { - pthread_barrier_t b; + sem_t sem1, sem2; struct sigevent *sev; }; @@ -21,10 +22,16 @@ static void dummy_0() } weak_alias(dummy_0, __pthread_tsd_run_dtors); +static void timer_handler(int sig, siginfo_t *si, void *ctx) +{ +} + static void cleanup_fromsig(void *p) { pthread_t self = __pthread_self(); __pthread_tsd_run_dtors(); + __block_app_sigs(0); + __syscall(SYS_rt_sigprocmask, SIG_BLOCK, SIGTIMER_SET, 0, _NSIG/8); self->cancel = 0; self->cancelbuf = 0; self->canceldisable = 0; @@ -42,7 +49,14 @@ static void *start(void *arg) void (*notify)(union sigval) = args->sev->sigev_notify_function; union sigval val = args->sev->sigev_value; - pthread_barrier_wait(&args->b); + /* The two-way semaphore synchronization ensures that we see + * self->cancel set by the parent if timer creation failed or + * self->timer_id if it succeeded, and informs the parent that + * we are done accessing the arguments so that the parent can + * proceed past their block lifetime. */ + while (sem_wait(&args->sem1)); + sem_post(&args->sem2); + if (self->cancel) return 0; for (;;) { @@ -90,7 +104,10 @@ int timer_create(clockid_t clk, struct sigevent *restrict evp, timer_t *restrict break; case SIGEV_THREAD: if (!init) { - struct sigaction sa = { .sa_handler = SIG_DFL }; + struct sigaction sa = { + .sa_sigaction = timer_handler, + .sa_flags = SA_SIGINFO | SA_RESTART + }; __libc_sigaction(SIGTIMER, &sa, 0); a_store(&init, 1); } @@ -99,7 +116,8 @@ int timer_create(clockid_t clk, struct sigevent *restrict evp, timer_t *restrict else pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - pthread_barrier_init(&args.b, 0, 2); + sem_init(&args.sem1, 0, 0); + sem_init(&args.sem2, 0, 0); args.sev = evp; __block_app_sigs(&set); @@ -120,7 +138,8 @@ int timer_create(clockid_t clk, struct sigevent *restrict evp, timer_t *restrict td->cancel = 1; } td->timer_id = timerid; - pthread_barrier_wait(&args.b); + sem_post(&args.sem1); + while (sem_wait(&args.sem2)); if (timerid < 0) return -1; *res = (void *)(INTPTR_MIN | (uintptr_t)td>>1); break; diff --git a/libc-top-half/musl/src/unistd/isatty.c b/libc-top-half/musl/src/unistd/isatty.c index 75a9c186a..21222edab 100644 --- a/libc-top-half/musl/src/unistd/isatty.c +++ b/libc-top-half/musl/src/unistd/isatty.c @@ -6,8 +6,6 @@ int isatty(int fd) { struct winsize wsz; - unsigned long r = syscall(SYS_ioctl, fd, TIOCGWINSZ, &wsz); - if (r == 0) return 1; - if (errno != EBADF) errno = ENOTTY; - return 0; + /* +1 converts from error status (0/-1) to boolean (1/0) */ + return syscall(SYS_ioctl, fd, TIOCGWINSZ, &wsz) + 1; } diff --git a/libc-top-half/musl/src/unistd/pause.c b/libc-top-half/musl/src/unistd/pause.c index 90bbf4ca8..90cc8db57 100644 --- a/libc-top-half/musl/src/unistd/pause.c +++ b/libc-top-half/musl/src/unistd/pause.c @@ -3,9 +3,5 @@ int pause(void) { -#ifdef SYS_pause - return syscall_cp(SYS_pause); -#else - return syscall_cp(SYS_ppoll, 0, 0, 0, 0); -#endif + return sys_pause_cp(); } diff --git a/libc-top-half/musl/src/unistd/pwrite.c b/libc-top-half/musl/src/unistd/pwrite.c index ca3765762..2bf19a9f7 100644 --- a/libc-top-half/musl/src/unistd/pwrite.c +++ b/libc-top-half/musl/src/unistd/pwrite.c @@ -1,8 +1,19 @@ +#define _GNU_SOURCE #include +#include +#include #include "syscall.h" ssize_t pwrite(int fd, const void *buf, size_t size, off_t ofs) { + if (ofs == -1) ofs--; + int r = __syscall_cp(SYS_pwritev2, fd, + (&(struct iovec){ .iov_base = (void *)buf, .iov_len = size }), + 1, (long)(ofs), (long)(ofs>>32), RWF_NOAPPEND); + if (r != -EOPNOTSUPP && r != -ENOSYS) + return __syscall_ret(r); + if (fcntl(fd, F_GETFL) & O_APPEND) + return __syscall_ret(-EOPNOTSUPP); return syscall_cp(SYS_pwrite, fd, buf, size, __SYSCALL_LL_PRW(ofs)); } diff --git a/libc-top-half/musl/src/unistd/pwritev.c b/libc-top-half/musl/src/unistd/pwritev.c index f5a612c48..36ed62c42 100644 --- a/libc-top-half/musl/src/unistd/pwritev.c +++ b/libc-top-half/musl/src/unistd/pwritev.c @@ -1,10 +1,18 @@ -#define _BSD_SOURCE +#define _GNU_SOURCE #include #include +#include #include "syscall.h" ssize_t pwritev(int fd, const struct iovec *iov, int count, off_t ofs) { + if (ofs == -1) ofs--; + int r = __syscall_cp(SYS_pwritev2, fd, iov, count, + (long)(ofs), (long)(ofs>>32), RWF_NOAPPEND); + if (r != -EOPNOTSUPP && r != -ENOSYS) + return __syscall_ret(r); + if (fcntl(fd, F_GETFL) & O_APPEND) + return __syscall_ret(-EOPNOTSUPP); return syscall_cp(SYS_pwritev, fd, iov, count, (long)(ofs), (long)(ofs>>32)); }