From 928c4c9bd303804b598df33518156a88edbb1a3a Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 19 Jun 2023 14:05:44 -0700 Subject: musl: update headers to v1.2.4 --- lib/libc/include/generic-musl/aio.h | 2 +- lib/libc/include/generic-musl/arpa/nameser.h | 71 ++ lib/libc/include/generic-musl/dirent.h | 2 +- lib/libc/include/generic-musl/elf.h | 9 +- lib/libc/include/generic-musl/fcntl.h | 2 +- lib/libc/include/generic-musl/ftw.h | 2 +- lib/libc/include/generic-musl/glob.h | 2 +- lib/libc/include/generic-musl/netdb.h | 1 + lib/libc/include/generic-musl/sched.h | 2 +- lib/libc/include/generic-musl/stdio.h | 2 +- lib/libc/include/generic-musl/stdlib.h | 4 +- lib/libc/include/generic-musl/string.h | 2 +- lib/libc/include/generic-musl/strings.h | 1 + lib/libc/include/generic-musl/sys/mman.h | 2 +- lib/libc/include/generic-musl/sys/resource.h | 2 +- lib/libc/include/generic-musl/sys/sendfile.h | 2 +- lib/libc/include/generic-musl/sys/stat.h | 2 +- lib/libc/include/generic-musl/sys/statfs.h | 2 +- lib/libc/include/generic-musl/sys/statvfs.h | 2 +- lib/libc/include/generic-musl/sys/types.h | 2 +- lib/libc/include/generic-musl/sys/uio.h | 2 +- lib/libc/include/generic-musl/sys/wait.h | 2 +- lib/libc/include/generic-musl/unistd.h | 6 +- lib/libc/include/i386-linux-musl/bits/alltypes.h | 438 ----------- lib/libc/include/i386-linux-musl/bits/fenv.h | 33 - lib/libc/include/i386-linux-musl/bits/float.h | 20 - lib/libc/include/i386-linux-musl/bits/io.h | 77 -- lib/libc/include/i386-linux-musl/bits/ipcstat.h | 1 - lib/libc/include/i386-linux-musl/bits/limits.h | 1 - lib/libc/include/i386-linux-musl/bits/mman.h | 1 - lib/libc/include/i386-linux-musl/bits/msg.h | 18 - lib/libc/include/i386-linux-musl/bits/ptrace.h | 11 - lib/libc/include/i386-linux-musl/bits/reg.h | 19 - lib/libc/include/i386-linux-musl/bits/sem.h | 13 - lib/libc/include/i386-linux-musl/bits/setjmp.h | 1 - lib/libc/include/i386-linux-musl/bits/shm.h | 31 - lib/libc/include/i386-linux-musl/bits/signal.h | 141 ---- lib/libc/include/i386-linux-musl/bits/stat.h | 25 - lib/libc/include/i386-linux-musl/bits/stdint.h | 20 - lib/libc/include/i386-linux-musl/bits/syscall.h | 875 ---------------------- lib/libc/include/i386-linux-musl/bits/user.h | 44 -- lib/libc/include/mips-linux-musl/bits/signal.h | 1 - lib/libc/include/mips64-linux-musl/bits/signal.h | 1 - lib/libc/include/riscv64-linux-musl/bits/signal.h | 1 - lib/libc/include/x86-linux-musl/bits/alltypes.h | 438 +++++++++++ lib/libc/include/x86-linux-musl/bits/fenv.h | 33 + lib/libc/include/x86-linux-musl/bits/float.h | 20 + lib/libc/include/x86-linux-musl/bits/io.h | 77 ++ lib/libc/include/x86-linux-musl/bits/ipcstat.h | 1 + lib/libc/include/x86-linux-musl/bits/limits.h | 1 + lib/libc/include/x86-linux-musl/bits/mman.h | 1 + lib/libc/include/x86-linux-musl/bits/msg.h | 18 + lib/libc/include/x86-linux-musl/bits/ptrace.h | 11 + lib/libc/include/x86-linux-musl/bits/reg.h | 19 + lib/libc/include/x86-linux-musl/bits/sem.h | 13 + lib/libc/include/x86-linux-musl/bits/setjmp.h | 1 + lib/libc/include/x86-linux-musl/bits/shm.h | 31 + lib/libc/include/x86-linux-musl/bits/signal.h | 141 ++++ lib/libc/include/x86-linux-musl/bits/stat.h | 25 + lib/libc/include/x86-linux-musl/bits/stdint.h | 20 + lib/libc/include/x86-linux-musl/bits/syscall.h | 875 ++++++++++++++++++++++ lib/libc/include/x86-linux-musl/bits/user.h | 44 ++ 62 files changed, 1873 insertions(+), 1794 deletions(-) delete mode 100644 lib/libc/include/i386-linux-musl/bits/alltypes.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/fenv.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/float.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/io.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/ipcstat.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/limits.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/mman.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/msg.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/ptrace.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/reg.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/sem.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/setjmp.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/shm.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/signal.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/stat.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/stdint.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/syscall.h delete mode 100644 lib/libc/include/i386-linux-musl/bits/user.h create mode 100644 lib/libc/include/x86-linux-musl/bits/alltypes.h create mode 100644 lib/libc/include/x86-linux-musl/bits/fenv.h create mode 100644 lib/libc/include/x86-linux-musl/bits/float.h create mode 100644 lib/libc/include/x86-linux-musl/bits/io.h create mode 100644 lib/libc/include/x86-linux-musl/bits/ipcstat.h create mode 100644 lib/libc/include/x86-linux-musl/bits/limits.h create mode 100644 lib/libc/include/x86-linux-musl/bits/mman.h create mode 100644 lib/libc/include/x86-linux-musl/bits/msg.h create mode 100644 lib/libc/include/x86-linux-musl/bits/ptrace.h create mode 100644 lib/libc/include/x86-linux-musl/bits/reg.h create mode 100644 lib/libc/include/x86-linux-musl/bits/sem.h create mode 100644 lib/libc/include/x86-linux-musl/bits/setjmp.h create mode 100644 lib/libc/include/x86-linux-musl/bits/shm.h create mode 100644 lib/libc/include/x86-linux-musl/bits/signal.h create mode 100644 lib/libc/include/x86-linux-musl/bits/stat.h create mode 100644 lib/libc/include/x86-linux-musl/bits/stdint.h create mode 100644 lib/libc/include/x86-linux-musl/bits/syscall.h create mode 100644 lib/libc/include/x86-linux-musl/bits/user.h (limited to 'lib/libc') diff --git a/lib/libc/include/generic-musl/aio.h b/lib/libc/include/generic-musl/aio.h index 4588ff2e39..659853a980 100644 --- a/lib/libc/include/generic-musl/aio.h +++ b/lib/libc/include/generic-musl/aio.h @@ -49,7 +49,7 @@ int aio_fsync(int, struct aiocb *); int lio_listio(int, struct aiocb *__restrict const *__restrict, int, struct sigevent *__restrict); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define aiocb64 aiocb #define aio_read64 aio_read #define aio_write64 aio_write diff --git a/lib/libc/include/generic-musl/arpa/nameser.h b/lib/libc/include/generic-musl/arpa/nameser.h index 10db66745e..7f8e753ba4 100644 --- a/lib/libc/include/generic-musl/arpa/nameser.h +++ b/lib/libc/include/generic-musl/arpa/nameser.h @@ -188,6 +188,36 @@ typedef enum __ns_type { ns_t_sink = 40, ns_t_opt = 41, ns_t_apl = 42, + ns_t_ds = 43, + ns_t_sshfp = 44, + ns_t_ipseckey = 45, + ns_t_rrsig = 46, + ns_t_nsec = 47, + ns_t_dnskey = 48, + ns_t_dhcid = 49, + ns_t_nsec3 = 50, + ns_t_nsec3param = 51, + ns_t_tlsa = 52, + ns_t_smimea = 53, + ns_t_hip = 55, + ns_t_ninfo = 56, + ns_t_rkey = 57, + ns_t_talink = 58, + ns_t_cds = 59, + ns_t_cdnskey = 60, + ns_t_openpgpkey = 61, + ns_t_csync = 62, + ns_t_spf = 99, + ns_t_uinfo = 100, + ns_t_uid = 101, + ns_t_gid = 102, + ns_t_unspec = 103, + ns_t_nid = 104, + ns_t_l32 = 105, + ns_t_l64 = 106, + ns_t_lp = 107, + ns_t_eui48 = 108, + ns_t_eui64 = 109, ns_t_tkey = 249, ns_t_tsig = 250, ns_t_ixfr = 251, @@ -196,6 +226,11 @@ typedef enum __ns_type { ns_t_maila = 254, ns_t_any = 255, ns_t_zxfr = 256, + ns_t_uri = 256, + ns_t_caa = 257, + ns_t_avc = 258, + ns_t_ta = 32768, + ns_t_dlv = 32769, ns_t_max = 65536 } ns_type; @@ -430,12 +465,48 @@ typedef struct { #define T_NAPTR ns_t_naptr #define T_A6 ns_t_a6 #define T_DNAME ns_t_dname +#define T_DS ns_t_ds +#define T_SSHFP ns_t_sshfp +#define T_IPSECKEY ns_t_ipseckey +#define T_RRSIG ns_t_rrsig +#define T_NSEC ns_t_nsec +#define T_DNSKEY ns_t_dnskey +#define T_DHCID ns_t_dhcid +#define T_NSEC3 ns_t_nsec3 +#define T_NSEC3PARAM ns_t_nsec3param +#define T_TLSA ns_t_tlsa +#define T_SMIMEA ns_t_smimea +#define T_HIP ns_t_hip +#define T_NINFO ns_t_ninfo +#define T_RKEY ns_t_rkey +#define T_TALINK ns_t_talink +#define T_CDS ns_t_cds +#define T_CDNSKEY ns_t_cdnskey +#define T_OPENPGPKEY ns_t_openpgpkey +#define T_CSYNC ns_t_csync +#define T_SPF ns_t_spf +#define T_UINFO ns_t_uinfo +#define T_UID ns_t_uid +#define T_GID ns_t_gid +#define T_UNSPEC ns_t_unspec +#define T_NID ns_t_nid +#define T_L32 ns_t_l32 +#define T_L64 ns_t_l64 +#define T_LP ns_t_lp +#define T_EUI48 ns_t_eui48 +#define T_EUI64 ns_t_eui64 +#define T_TKEY ns_t_tkey #define T_TSIG ns_t_tsig #define T_IXFR ns_t_ixfr #define T_AXFR ns_t_axfr #define T_MAILB ns_t_mailb #define T_MAILA ns_t_maila #define T_ANY ns_t_any +#define T_URI ns_t_uri +#define T_CAA ns_t_caa +#define T_AVC ns_t_avc +#define T_TA ns_t_ta +#define T_DLV ns_t_dlv #define C_IN ns_c_in #define C_CHAOS ns_c_chaos diff --git a/lib/libc/include/generic-musl/dirent.h b/lib/libc/include/generic-musl/dirent.h index 665c411a6f..c37f00a18d 100644 --- a/lib/libc/include/generic-musl/dirent.h +++ b/lib/libc/include/generic-musl/dirent.h @@ -56,7 +56,7 @@ int getdents(int, struct dirent *, size_t); int versionsort(const struct dirent **, const struct dirent **); #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define dirent64 dirent #define readdir64 readdir #define readdir64_r readdir_r diff --git a/lib/libc/include/generic-musl/elf.h b/lib/libc/include/generic-musl/elf.h index 6b2c83b6a8..8b4d3a864d 100644 --- a/lib/libc/include/generic-musl/elf.h +++ b/lib/libc/include/generic-musl/elf.h @@ -385,7 +385,8 @@ typedef struct { #define SHT_PREINIT_ARRAY 16 #define SHT_GROUP 17 #define SHT_SYMTAB_SHNDX 18 -#define SHT_NUM 19 +#define SHT_RELR 19 +#define SHT_NUM 20 #define SHT_LOOS 0x60000000 #define SHT_GNU_ATTRIBUTES 0x6ffffff5 #define SHT_GNU_HASH 0x6ffffff6 @@ -436,6 +437,7 @@ typedef struct { } Elf64_Chdr; #define ELFCOMPRESS_ZLIB 1 +#define ELFCOMPRESS_ZSTD 2 #define ELFCOMPRESS_LOOS 0x60000000 #define ELFCOMPRESS_HIOS 0x6fffffff #define ELFCOMPRESS_LOPROC 0x70000000 @@ -754,7 +756,10 @@ typedef struct { #define DT_PREINIT_ARRAY 32 #define DT_PREINIT_ARRAYSZ 33 #define DT_SYMTAB_SHNDX 34 -#define DT_NUM 35 +#define DT_RELRSZ 35 +#define DT_RELR 36 +#define DT_RELRENT 37 +#define DT_NUM 38 #define DT_LOOS 0x6000000d #define DT_HIOS 0x6ffff000 #define DT_LOPROC 0x70000000 diff --git a/lib/libc/include/generic-musl/fcntl.h b/lib/libc/include/generic-musl/fcntl.h index 8c418170dd..9636209d8c 100644 --- a/lib/libc/include/generic-musl/fcntl.h +++ b/lib/libc/include/generic-musl/fcntl.h @@ -195,7 +195,7 @@ ssize_t tee(int, int, size_t, unsigned); #define loff_t off_t #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define F_GETLK64 F_GETLK #define F_SETLK64 F_SETLK #define F_SETLKW64 F_SETLKW diff --git a/lib/libc/include/generic-musl/ftw.h b/lib/libc/include/generic-musl/ftw.h index f4344b57da..0327835862 100644 --- a/lib/libc/include/generic-musl/ftw.h +++ b/lib/libc/include/generic-musl/ftw.h @@ -29,7 +29,7 @@ struct FTW { int ftw(const char *, int (*)(const char *, const struct stat *, int), int); int nftw(const char *, int (*)(const char *, const struct stat *, int, struct FTW *), int, int); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define ftw64 ftw #define nftw64 nftw #endif diff --git a/lib/libc/include/generic-musl/glob.h b/lib/libc/include/generic-musl/glob.h index 1c596c9fe7..4eadfe2548 100644 --- a/lib/libc/include/generic-musl/glob.h +++ b/lib/libc/include/generic-musl/glob.h @@ -39,7 +39,7 @@ void globfree(glob_t *); #define GLOB_NOMATCH 3 #define GLOB_NOSYS 4 -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define glob64 glob #define globfree64 globfree #define glob64_t glob_t diff --git a/lib/libc/include/generic-musl/netdb.h b/lib/libc/include/generic-musl/netdb.h index 8f350ad62e..81abfaba33 100644 --- a/lib/libc/include/generic-musl/netdb.h +++ b/lib/libc/include/generic-musl/netdb.h @@ -44,6 +44,7 @@ struct addrinfo { #define EAI_NONAME -2 #define EAI_AGAIN -3 #define EAI_FAIL -4 +#define EAI_NODATA -5 #define EAI_FAMILY -6 #define EAI_SOCKTYPE -7 #define EAI_SERVICE -8 diff --git a/lib/libc/include/generic-musl/sched.h b/lib/libc/include/generic-musl/sched.h index 91431b5d07..933c2b2011 100644 --- a/lib/libc/include/generic-musl/sched.h +++ b/lib/libc/include/generic-musl/sched.h @@ -124,7 +124,7 @@ __CPU_op_func_S(XOR, ^) #define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n))) #define CPU_FREE(set) free(set) -#define CPU_SETSIZE 128 +#define CPU_SETSIZE 1024 #define CPU_SET(i, set) CPU_SET_S(i,sizeof(cpu_set_t),set) #define CPU_CLR(i, set) CPU_CLR_S(i,sizeof(cpu_set_t),set) diff --git a/lib/libc/include/generic-musl/stdio.h b/lib/libc/include/generic-musl/stdio.h index 3b82c24fd3..c6144c7f75 100644 --- a/lib/libc/include/generic-musl/stdio.h +++ b/lib/libc/include/generic-musl/stdio.h @@ -205,7 +205,7 @@ typedef struct _IO_cookie_io_functions_t { FILE *fopencookie(void *, const char *, cookie_io_functions_t); #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define tmpfile64 tmpfile #define fopen64 fopen #define freopen64 freopen diff --git a/lib/libc/include/generic-musl/stdlib.h b/lib/libc/include/generic-musl/stdlib.h index eb6daf49e8..b8ced1d43f 100644 --- a/lib/libc/include/generic-musl/stdlib.h +++ b/lib/libc/include/generic-musl/stdlib.h @@ -95,7 +95,7 @@ size_t __ctype_get_mb_cur_max(void); #define WTERMSIG(s) ((s) & 0x7f) #define WSTOPSIG(s) WEXITSTATUS(s) #define WIFEXITED(s) (!WTERMSIG(s)) -#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00) +#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001U)>>8) > 0x7f00) #define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu) int posix_memalign (void **, size_t, size_t); @@ -163,7 +163,7 @@ double strtod_l(const char *__restrict, char **__restrict, struct __locale_struc long double strtold_l(const char *__restrict, char **__restrict, struct __locale_struct *); #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define mkstemp64 mkstemp #define mkostemp64 mkostemp #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) diff --git a/lib/libc/include/generic-musl/string.h b/lib/libc/include/generic-musl/string.h index fdd4eb782d..406484ea78 100644 --- a/lib/libc/include/generic-musl/string.h +++ b/lib/libc/include/generic-musl/string.h @@ -73,6 +73,7 @@ char *strsignal(int); char *strerror_l (int, locale_t); int strcoll_l (const char *, const char *, locale_t); size_t strxfrm_l (char *__restrict, const char *__restrict, size_t, locale_t); +void *memmem(const void *, size_t, const void *, size_t); #endif #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ @@ -92,7 +93,6 @@ void explicit_bzero (void *, size_t); int strverscmp (const char *, const char *); char *strchrnul(const char *, int); char *strcasestr(const char *, const char *); -void *memmem(const void *, size_t, const void *, size_t); void *memrchr(const void *, int, size_t); void *mempcpy(void *, const void *, size_t); #ifndef __cplusplus diff --git a/lib/libc/include/generic-musl/strings.h b/lib/libc/include/generic-musl/strings.h index 333656198f..7e99ee91ce 100644 --- a/lib/libc/include/generic-musl/strings.h +++ b/lib/libc/include/generic-musl/strings.h @@ -5,6 +5,7 @@ extern "C" { #endif +#include #define __NEED_size_t #define __NEED_locale_t diff --git a/lib/libc/include/generic-musl/sys/mman.h b/lib/libc/include/generic-musl/sys/mman.h index 4f82dd1ecd..75e9b681e6 100644 --- a/lib/libc/include/generic-musl/sys/mman.h +++ b/lib/libc/include/generic-musl/sys/mman.h @@ -141,7 +141,7 @@ int mincore (void *, size_t, unsigned char *); int shm_open (const char *, int, mode_t); int shm_unlink (const char *); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define mmap64 mmap #define off64_t off_t #endif diff --git a/lib/libc/include/generic-musl/sys/resource.h b/lib/libc/include/generic-musl/sys/resource.h index 8ef18ec050..cffd4db805 100644 --- a/lib/libc/include/generic-musl/sys/resource.h +++ b/lib/libc/include/generic-musl/sys/resource.h @@ -95,7 +95,7 @@ int prlimit(pid_t, int, const struct rlimit *, struct rlimit *); #define RLIM_NLIMITS RLIMIT_NLIMITS -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define RLIM64_INFINITY RLIM_INFINITY #define RLIM64_SAVED_CUR RLIM_SAVED_CUR #define RLIM64_SAVED_MAX RLIM_SAVED_MAX diff --git a/lib/libc/include/generic-musl/sys/sendfile.h b/lib/libc/include/generic-musl/sys/sendfile.h index 643ab6e841..ed9c39e00d 100644 --- a/lib/libc/include/generic-musl/sys/sendfile.h +++ b/lib/libc/include/generic-musl/sys/sendfile.h @@ -10,7 +10,7 @@ extern "C" { ssize_t sendfile(int, int, off_t *, size_t); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define sendfile64 sendfile #define off64_t off_t #endif diff --git a/lib/libc/include/generic-musl/sys/stat.h b/lib/libc/include/generic-musl/sys/stat.h index e8a3753445..b36d3b34b7 100644 --- a/lib/libc/include/generic-musl/sys/stat.h +++ b/lib/libc/include/generic-musl/sys/stat.h @@ -98,7 +98,7 @@ int lchmod(const char *, mode_t); #define S_IEXEC S_IXUSR #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define stat64 stat #define fstat64 fstat #define lstat64 lstat diff --git a/lib/libc/include/generic-musl/sys/statfs.h b/lib/libc/include/generic-musl/sys/statfs.h index cdc9e5419c..ae92a3d140 100644 --- a/lib/libc/include/generic-musl/sys/statfs.h +++ b/lib/libc/include/generic-musl/sys/statfs.h @@ -18,7 +18,7 @@ typedef struct __fsid_t { int statfs (const char *, struct statfs *); int fstatfs (int, struct statfs *); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define statfs64 statfs #define fstatfs64 fstatfs #define fsblkcnt64_t fsblkcnt_t diff --git a/lib/libc/include/generic-musl/sys/statvfs.h b/lib/libc/include/generic-musl/sys/statvfs.h index 0da838f1ef..b599caaa45 100644 --- a/lib/libc/include/generic-musl/sys/statvfs.h +++ b/lib/libc/include/generic-musl/sys/statvfs.h @@ -42,7 +42,7 @@ int fstatvfs (int, struct statvfs *); #define ST_NODIRATIME 2048 #define ST_RELATIME 4096 -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define statvfs64 statvfs #define fstatvfs64 fstatvfs #define fsblkcnt64_t fsblkcnt_t diff --git a/lib/libc/include/generic-musl/sys/types.h b/lib/libc/include/generic-musl/sys/types.h index 272d50970e..550786e637 100644 --- a/lib/libc/include/generic-musl/sys/types.h +++ b/lib/libc/include/generic-musl/sys/types.h @@ -71,7 +71,7 @@ typedef unsigned long long u_quad_t; #include #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define blkcnt64_t blkcnt_t #define fsblkcnt64_t fsblkcnt_t #define fsfilcnt64_t fsfilcnt_t diff --git a/lib/libc/include/generic-musl/sys/uio.h b/lib/libc/include/generic-musl/sys/uio.h index d4b120960a..c98c77db55 100644 --- a/lib/libc/include/generic-musl/sys/uio.h +++ b/lib/libc/include/generic-musl/sys/uio.h @@ -29,7 +29,7 @@ ssize_t writev (int, const struct iovec *, int); #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) ssize_t preadv (int, const struct iovec *, int, off_t); ssize_t pwritev (int, const struct iovec *, int, off_t); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define preadv64 preadv #define pwritev64 pwritev #define off64_t off_t diff --git a/lib/libc/include/generic-musl/sys/wait.h b/lib/libc/include/generic-musl/sys/wait.h index 0ad11ab54f..dd20daa567 100644 --- a/lib/libc/include/generic-musl/sys/wait.h +++ b/lib/libc/include/generic-musl/sys/wait.h @@ -50,7 +50,7 @@ pid_t wait4 (pid_t, int *, int, struct rusage *); #define WSTOPSIG(s) WEXITSTATUS(s) #define WCOREDUMP(s) ((s) & 0x80) #define WIFEXITED(s) (!WTERMSIG(s)) -#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00) +#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001U)>>8) > 0x7f00) #define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu) #define WIFCONTINUED(s) ((s) == 0xffff) diff --git a/lib/libc/include/generic-musl/unistd.h b/lib/libc/include/generic-musl/unistd.h index cb9b96959d..200a7d9493 100644 --- a/lib/libc/include/generic-musl/unistd.h +++ b/lib/libc/include/generic-musl/unistd.h @@ -198,7 +198,7 @@ ssize_t copy_file_range(int, off_t *, int, off_t *, size_t, unsigned); pid_t gettid(void); #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define lseek64 lseek #define pread64 pread #define pwrite64 pwrite @@ -425,6 +425,8 @@ pid_t gettid(void); #define _SC_XOPEN_STREAMS 246 #define _SC_THREAD_ROBUST_PRIO_INHERIT 247 #define _SC_THREAD_ROBUST_PRIO_PROTECT 248 +#define _SC_MINSIGSTKSZ 249 +#define _SC_SIGSTKSZ 250 #define _CS_PATH 0 #define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS 1 @@ -467,6 +469,8 @@ pid_t gettid(void); #define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS 1147 #define _CS_V6_ENV 1148 #define _CS_V7_ENV 1149 +#define _CS_POSIX_V7_THREADS_CFLAGS 1150 +#define _CS_POSIX_V7_THREADS_LDFLAGS 1151 #ifdef __cplusplus } diff --git a/lib/libc/include/i386-linux-musl/bits/alltypes.h b/lib/libc/include/i386-linux-musl/bits/alltypes.h deleted file mode 100644 index f430f25cff..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/alltypes.h +++ /dev/null @@ -1,438 +0,0 @@ -#define _REDIR_TIME64 1 -#define _Addr int -#define _Int64 long long -#define _Reg int - -#define __BYTE_ORDER 1234 -#define __LONG_MAX 0x7fffffffL - -#ifndef __cplusplus -#ifdef __WCHAR_TYPE__ -#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) -typedef __WCHAR_TYPE__ wchar_t; -#define __DEFINED_wchar_t -#endif - -#else -#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) -typedef long wchar_t; -#define __DEFINED_wchar_t -#endif - -#endif -#endif - -#if defined(__FLT_EVAL_METHOD__) && __FLT_EVAL_METHOD__ == 0 -#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) -typedef float float_t; -#define __DEFINED_float_t -#endif - -#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) -typedef double double_t; -#define __DEFINED_double_t -#endif - -#else -#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) -typedef long double float_t; -#define __DEFINED_float_t -#endif - -#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) -typedef long double double_t; -#define __DEFINED_double_t -#endif - -#endif - -#if !defined(__cplusplus) -#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) -typedef struct { _Alignas(8) long long __ll; long double __ld; } max_align_t; -#define __DEFINED_max_align_t -#endif - -#elif defined(__GNUC__) -#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) -typedef struct { __attribute__((__aligned__(8))) long long __ll; long double __ld; } max_align_t; -#define __DEFINED_max_align_t -#endif - -#else -#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) -typedef struct { alignas(8) long long __ll; long double __ld; } max_align_t; -#define __DEFINED_max_align_t -#endif - -#endif -#define __LITTLE_ENDIAN 1234 -#define __BIG_ENDIAN 4321 -#define __USE_TIME_BITS64 1 - -#if defined(__NEED_size_t) && !defined(__DEFINED_size_t) -typedef unsigned _Addr size_t; -#define __DEFINED_size_t -#endif - -#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t) -typedef unsigned _Addr uintptr_t; -#define __DEFINED_uintptr_t -#endif - -#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t) -typedef _Addr ptrdiff_t; -#define __DEFINED_ptrdiff_t -#endif - -#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t) -typedef _Addr ssize_t; -#define __DEFINED_ssize_t -#endif - -#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t) -typedef _Addr intptr_t; -#define __DEFINED_intptr_t -#endif - -#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t) -typedef _Addr regoff_t; -#define __DEFINED_regoff_t -#endif - -#if defined(__NEED_register_t) && !defined(__DEFINED_register_t) -typedef _Reg register_t; -#define __DEFINED_register_t -#endif - -#if defined(__NEED_time_t) && !defined(__DEFINED_time_t) -typedef _Int64 time_t; -#define __DEFINED_time_t -#endif - -#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t) -typedef _Int64 suseconds_t; -#define __DEFINED_suseconds_t -#endif - - -#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t) -typedef signed char int8_t; -#define __DEFINED_int8_t -#endif - -#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t) -typedef signed short int16_t; -#define __DEFINED_int16_t -#endif - -#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t) -typedef signed int int32_t; -#define __DEFINED_int32_t -#endif - -#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t) -typedef signed _Int64 int64_t; -#define __DEFINED_int64_t -#endif - -#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t) -typedef signed _Int64 intmax_t; -#define __DEFINED_intmax_t -#endif - -#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t) -typedef unsigned char uint8_t; -#define __DEFINED_uint8_t -#endif - -#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t) -typedef unsigned short uint16_t; -#define __DEFINED_uint16_t -#endif - -#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t) -typedef unsigned int uint32_t; -#define __DEFINED_uint32_t -#endif - -#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t) -typedef unsigned _Int64 uint64_t; -#define __DEFINED_uint64_t -#endif - -#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t) -typedef unsigned _Int64 u_int64_t; -#define __DEFINED_u_int64_t -#endif - -#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t) -typedef unsigned _Int64 uintmax_t; -#define __DEFINED_uintmax_t -#endif - - -#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t) -typedef unsigned mode_t; -#define __DEFINED_mode_t -#endif - -#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t) -typedef unsigned _Reg nlink_t; -#define __DEFINED_nlink_t -#endif - -#if defined(__NEED_off_t) && !defined(__DEFINED_off_t) -typedef _Int64 off_t; -#define __DEFINED_off_t -#endif - -#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t) -typedef unsigned _Int64 ino_t; -#define __DEFINED_ino_t -#endif - -#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t) -typedef unsigned _Int64 dev_t; -#define __DEFINED_dev_t -#endif - -#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t) -typedef long blksize_t; -#define __DEFINED_blksize_t -#endif - -#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t) -typedef _Int64 blkcnt_t; -#define __DEFINED_blkcnt_t -#endif - -#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t) -typedef unsigned _Int64 fsblkcnt_t; -#define __DEFINED_fsblkcnt_t -#endif - -#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t) -typedef unsigned _Int64 fsfilcnt_t; -#define __DEFINED_fsfilcnt_t -#endif - - -#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t) -typedef unsigned wint_t; -#define __DEFINED_wint_t -#endif - -#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t) -typedef unsigned long wctype_t; -#define __DEFINED_wctype_t -#endif - - -#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t) -typedef void * timer_t; -#define __DEFINED_timer_t -#endif - -#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t) -typedef int clockid_t; -#define __DEFINED_clockid_t -#endif - -#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t) -typedef long clock_t; -#define __DEFINED_clock_t -#endif - -#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval) -struct timeval { time_t tv_sec; suseconds_t tv_usec; }; -#define __DEFINED_struct_timeval -#endif - -#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec) -struct timespec { time_t tv_sec; int :8*(sizeof(time_t)-sizeof(long))*(__BYTE_ORDER==4321); long tv_nsec; int :8*(sizeof(time_t)-sizeof(long))*(__BYTE_ORDER!=4321); }; -#define __DEFINED_struct_timespec -#endif - - -#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t) -typedef int pid_t; -#define __DEFINED_pid_t -#endif - -#if defined(__NEED_id_t) && !defined(__DEFINED_id_t) -typedef unsigned id_t; -#define __DEFINED_id_t -#endif - -#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t) -typedef unsigned uid_t; -#define __DEFINED_uid_t -#endif - -#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t) -typedef unsigned gid_t; -#define __DEFINED_gid_t -#endif - -#if defined(__NEED_key_t) && !defined(__DEFINED_key_t) -typedef int key_t; -#define __DEFINED_key_t -#endif - -#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t) -typedef unsigned useconds_t; -#define __DEFINED_useconds_t -#endif - - -#ifdef __cplusplus -#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) -typedef unsigned long pthread_t; -#define __DEFINED_pthread_t -#endif - -#else -#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) -typedef struct __pthread * pthread_t; -#define __DEFINED_pthread_t -#endif - -#endif -#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t) -typedef int pthread_once_t; -#define __DEFINED_pthread_once_t -#endif - -#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t) -typedef unsigned pthread_key_t; -#define __DEFINED_pthread_key_t -#endif - -#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t) -typedef int pthread_spinlock_t; -#define __DEFINED_pthread_spinlock_t -#endif - -#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t) -typedef struct { unsigned __attr; } pthread_mutexattr_t; -#define __DEFINED_pthread_mutexattr_t -#endif - -#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t) -typedef struct { unsigned __attr; } pthread_condattr_t; -#define __DEFINED_pthread_condattr_t -#endif - -#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t) -typedef struct { unsigned __attr; } pthread_barrierattr_t; -#define __DEFINED_pthread_barrierattr_t -#endif - -#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t) -typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t; -#define __DEFINED_pthread_rwlockattr_t -#endif - - -#if defined(__NEED_struct__IO_FILE) && !defined(__DEFINED_struct__IO_FILE) -struct _IO_FILE { char __x; }; -#define __DEFINED_struct__IO_FILE -#endif - -#if defined(__NEED_FILE) && !defined(__DEFINED_FILE) -typedef struct _IO_FILE FILE; -#define __DEFINED_FILE -#endif - - -#if defined(__NEED_va_list) && !defined(__DEFINED_va_list) -typedef __builtin_va_list va_list; -#define __DEFINED_va_list -#endif - -#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list) -typedef __builtin_va_list __isoc_va_list; -#define __DEFINED___isoc_va_list -#endif - - -#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t) -typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t; -#define __DEFINED_mbstate_t -#endif - - -#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t) -typedef struct __locale_struct * locale_t; -#define __DEFINED_locale_t -#endif - - -#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t) -typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t; -#define __DEFINED_sigset_t -#endif - - -#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec) -struct iovec { void *iov_base; size_t iov_len; }; -#define __DEFINED_struct_iovec -#endif - - -#if defined(__NEED_struct_winsize) && !defined(__DEFINED_struct_winsize) -struct winsize { unsigned short ws_row, ws_col, ws_xpixel, ws_ypixel; }; -#define __DEFINED_struct_winsize -#endif - - -#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t) -typedef unsigned socklen_t; -#define __DEFINED_socklen_t -#endif - -#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t) -typedef unsigned short sa_family_t; -#define __DEFINED_sa_family_t -#endif - - -#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t) -typedef struct { union { int __i[sizeof(long)==8?14:9]; volatile int __vi[sizeof(long)==8?14:9]; unsigned long __s[sizeof(long)==8?7:9]; } __u; } pthread_attr_t; -#define __DEFINED_pthread_attr_t -#endif - -#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t) -typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } pthread_mutex_t; -#define __DEFINED_pthread_mutex_t -#endif - -#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t) -typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } mtx_t; -#define __DEFINED_mtx_t -#endif - -#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t) -typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } pthread_cond_t; -#define __DEFINED_pthread_cond_t -#endif - -#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t) -typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } cnd_t; -#define __DEFINED_cnd_t -#endif - -#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t) -typedef struct { union { int __i[sizeof(long)==8?14:8]; volatile int __vi[sizeof(long)==8?14:8]; void *__p[sizeof(long)==8?7:8]; } __u; } pthread_rwlock_t; -#define __DEFINED_pthread_rwlock_t -#endif - -#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t) -typedef struct { union { int __i[sizeof(long)==8?8:5]; volatile int __vi[sizeof(long)==8?8:5]; void *__p[sizeof(long)==8?4:5]; } __u; } pthread_barrier_t; -#define __DEFINED_pthread_barrier_t -#endif - - -#undef _Addr -#undef _Int64 -#undef _Reg \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/fenv.h b/lib/libc/include/i386-linux-musl/bits/fenv.h deleted file mode 100644 index b9a5533d3c..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/fenv.h +++ /dev/null @@ -1,33 +0,0 @@ -#define FE_INVALID 1 -#define __FE_DENORM 2 -#define FE_DIVBYZERO 4 -#define FE_OVERFLOW 8 -#define FE_UNDERFLOW 16 -#define FE_INEXACT 32 - -#define FE_ALL_EXCEPT 63 - -#define FE_TONEAREST 0 -#define FE_DOWNWARD 0x400 -#define FE_UPWARD 0x800 -#define FE_TOWARDZERO 0xc00 - -typedef unsigned short fexcept_t; - -typedef struct { - unsigned short __control_word; - unsigned short __unused1; - unsigned short __status_word; - unsigned short __unused2; - unsigned short __tags; - unsigned short __unused3; - unsigned int __eip; - unsigned short __cs_selector; - unsigned int __opcode:11; - unsigned int __unused4:5; - unsigned int __data_offset; - unsigned short __data_selector; - unsigned short __unused5; -} fenv_t; - -#define FE_DFL_ENV ((const fenv_t *) -1) \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/float.h b/lib/libc/include/i386-linux-musl/bits/float.h deleted file mode 100644 index 6265df00d6..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/float.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifdef __FLT_EVAL_METHOD__ -#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ -#else -#define FLT_EVAL_METHOD 2 -#endif - -#define LDBL_TRUE_MIN 3.6451995318824746025e-4951L -#define LDBL_MIN 3.3621031431120935063e-4932L -#define LDBL_MAX 1.1897314953572317650e+4932L -#define LDBL_EPSILON 1.0842021724855044340e-19L - -#define LDBL_MANT_DIG 64 -#define LDBL_MIN_EXP (-16381) -#define LDBL_MAX_EXP 16384 - -#define LDBL_DIG 18 -#define LDBL_MIN_10_EXP (-4931) -#define LDBL_MAX_10_EXP 4932 - -#define DECIMAL_DIG 21 \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/io.h b/lib/libc/include/i386-linux-musl/bits/io.h deleted file mode 100644 index be42152adb..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/io.h +++ /dev/null @@ -1,77 +0,0 @@ -static __inline void outb(unsigned char __val, unsigned short __port) -{ - __asm__ volatile ("outb %0,%1" : : "a" (__val), "dN" (__port)); -} - -static __inline void outw(unsigned short __val, unsigned short __port) -{ - __asm__ volatile ("outw %0,%1" : : "a" (__val), "dN" (__port)); -} - -static __inline void outl(unsigned int __val, unsigned short __port) -{ - __asm__ volatile ("outl %0,%1" : : "a" (__val), "dN" (__port)); -} - -static __inline unsigned char inb(unsigned short __port) -{ - unsigned char __val; - __asm__ volatile ("inb %1,%0" : "=a" (__val) : "dN" (__port)); - return __val; -} - -static __inline unsigned short inw(unsigned short __port) -{ - unsigned short __val; - __asm__ volatile ("inw %1,%0" : "=a" (__val) : "dN" (__port)); - return __val; -} - -static __inline unsigned int inl(unsigned short __port) -{ - unsigned int __val; - __asm__ volatile ("inl %1,%0" : "=a" (__val) : "dN" (__port)); - return __val; -} - -static __inline void outsb(unsigned short __port, const void *__buf, unsigned long __n) -{ - __asm__ volatile ("cld; rep; outsb" - : "+S" (__buf), "+c" (__n) - : "d" (__port)); -} - -static __inline void outsw(unsigned short __port, const void *__buf, unsigned long __n) -{ - __asm__ volatile ("cld; rep; outsw" - : "+S" (__buf), "+c" (__n) - : "d" (__port)); -} - -static __inline void outsl(unsigned short __port, const void *__buf, unsigned long __n) -{ - __asm__ volatile ("cld; rep; outsl" - : "+S" (__buf), "+c"(__n) - : "d" (__port)); -} - -static __inline void insb(unsigned short __port, void *__buf, unsigned long __n) -{ - __asm__ volatile ("cld; rep; insb" - : "+D" (__buf), "+c" (__n) - : "d" (__port)); -} - -static __inline void insw(unsigned short __port, void *__buf, unsigned long __n) -{ - __asm__ volatile ("cld; rep; insw" - : "+D" (__buf), "+c" (__n) - : "d" (__port)); -} - -static __inline void insl(unsigned short __port, void *__buf, unsigned long __n) -{ - __asm__ volatile ("cld; rep; insl" - : "+D" (__buf), "+c" (__n) - : "d" (__port)); -} \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/ipcstat.h b/lib/libc/include/i386-linux-musl/bits/ipcstat.h deleted file mode 100644 index d055f3e837..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/ipcstat.h +++ /dev/null @@ -1 +0,0 @@ -#define IPC_STAT 0x102 \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/limits.h b/lib/libc/include/i386-linux-musl/bits/limits.h deleted file mode 100644 index fc11433d98..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/limits.h +++ /dev/null @@ -1 +0,0 @@ -#define PAGESIZE 4096 \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/mman.h b/lib/libc/include/i386-linux-musl/bits/mman.h deleted file mode 100644 index 7d968b07ba..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/mman.h +++ /dev/null @@ -1 +0,0 @@ -#define MAP_32BIT 0x40 \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/msg.h b/lib/libc/include/i386-linux-musl/bits/msg.h deleted file mode 100644 index 037fd956d4..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/msg.h +++ /dev/null @@ -1,18 +0,0 @@ -struct msqid_ds { - struct ipc_perm msg_perm; - unsigned long __msg_stime_lo; - unsigned long __msg_stime_hi; - unsigned long __msg_rtime_lo; - unsigned long __msg_rtime_hi; - unsigned long __msg_ctime_lo; - unsigned long __msg_ctime_hi; - unsigned long msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - unsigned long __unused[2]; - time_t msg_stime; - time_t msg_rtime; - time_t msg_ctime; -}; \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/ptrace.h b/lib/libc/include/i386-linux-musl/bits/ptrace.h deleted file mode 100644 index f89866fc9a..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/ptrace.h +++ /dev/null @@ -1,11 +0,0 @@ -#define PTRACE_GET_THREAD_AREA 25 -#define PTRACE_SET_THREAD_AREA 26 -#define PTRACE_SYSEMU 31 -#define PTRACE_SYSEMU_SINGLESTEP 32 -#define PTRACE_SINGLEBLOCK 33 - -#define PT_GET_THREAD_AREA PTRACE_GET_THREAD_AREA -#define PT_SET_THREAD_AREA PTRACE_SET_THREAD_AREA -#define PT_SYSEMU PTRACE_SYSEMU -#define PT_SYSEMU_SINGLESTEP PTRACE_SYSEMU_SINGLESTEP -#define PT_STEPBLOCK PTRACE_SINGLEBLOCK \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/reg.h b/lib/libc/include/i386-linux-musl/bits/reg.h deleted file mode 100644 index df79f9773d..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/reg.h +++ /dev/null @@ -1,19 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 -#define EBX 0 -#define ECX 1 -#define EDX 2 -#define ESI 3 -#define EDI 4 -#define EBP 5 -#define EAX 6 -#define DS 7 -#define ES 8 -#define FS 9 -#define GS 10 -#define ORIG_EAX 11 -#define EIP 12 -#define CS 13 -#define EFL 14 -#define UESP 15 -#define SS 16 \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/sem.h b/lib/libc/include/i386-linux-musl/bits/sem.h deleted file mode 100644 index f4936d6f5a..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/sem.h +++ /dev/null @@ -1,13 +0,0 @@ -struct semid_ds { - struct ipc_perm sem_perm; - unsigned long __sem_otime_lo; - unsigned long __sem_otime_hi; - unsigned long __sem_ctime_lo; - unsigned long __sem_ctime_hi; - unsigned short sem_nsems; - char __sem_nsems_pad[sizeof(long)-sizeof(short)]; - long __unused3; - long __unused4; - time_t sem_otime; - time_t sem_ctime; -}; \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/setjmp.h b/lib/libc/include/i386-linux-musl/bits/setjmp.h deleted file mode 100644 index 2fcb3d4cb0..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/setjmp.h +++ /dev/null @@ -1 +0,0 @@ -typedef unsigned long __jmp_buf[6]; \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/shm.h b/lib/libc/include/i386-linux-musl/bits/shm.h deleted file mode 100644 index 1ecb03ca0e..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/shm.h +++ /dev/null @@ -1,31 +0,0 @@ -#define SHMLBA 4096 - -struct shmid_ds { - struct ipc_perm shm_perm; - size_t shm_segsz; - unsigned long __shm_atime_lo; - unsigned long __shm_atime_hi; - unsigned long __shm_dtime_lo; - unsigned long __shm_dtime_hi; - unsigned long __shm_ctime_lo; - unsigned long __shm_ctime_hi; - pid_t shm_cpid; - pid_t shm_lpid; - unsigned long shm_nattch; - unsigned long __pad1; - unsigned long __pad2; - unsigned long __pad3; - time_t shm_atime; - time_t shm_dtime; - time_t shm_ctime; -}; - -struct shminfo { - unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; -}; - -struct shm_info { - int __used_ids; - unsigned long shm_tot, shm_rss, shm_swp; - unsigned long __swap_attempts, __swap_successes; -}; \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/signal.h b/lib/libc/include/i386-linux-musl/bits/signal.h deleted file mode 100644 index 1e521986b4..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/signal.h +++ /dev/null @@ -1,141 +0,0 @@ -#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ - || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) - -#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) -#define MINSIGSTKSZ 2048 -#define SIGSTKSZ 8192 -#endif - -#ifdef _GNU_SOURCE -enum { REG_GS = 0 }; -#define REG_GS REG_GS -enum { REG_FS = 1 }; -#define REG_FS REG_FS -enum { REG_ES = 2 }; -#define REG_ES REG_ES -enum { REG_DS = 3 }; -#define REG_DS REG_DS -enum { REG_EDI = 4 }; -#define REG_EDI REG_EDI -enum { REG_ESI = 5 }; -#define REG_ESI REG_ESI -enum { REG_EBP = 6 }; -#define REG_EBP REG_EBP -enum { REG_ESP = 7 }; -#define REG_ESP REG_ESP -enum { REG_EBX = 8 }; -#define REG_EBX REG_EBX -enum { REG_EDX = 9 }; -#define REG_EDX REG_EDX -enum { REG_ECX = 10 }; -#define REG_ECX REG_ECX -enum { REG_EAX = 11 }; -#define REG_EAX REG_EAX -enum { REG_TRAPNO = 12 }; -#define REG_TRAPNO REG_TRAPNO -enum { REG_ERR = 13 }; -#define REG_ERR REG_ERR -enum { REG_EIP = 14 }; -#define REG_EIP REG_EIP -enum { REG_CS = 15 }; -#define REG_CS REG_CS -enum { REG_EFL = 16 }; -#define REG_EFL REG_EFL -enum { REG_UESP = 17 }; -#define REG_UESP REG_UESP -enum { REG_SS = 18 }; -#define REG_SS REG_SS -#endif - -#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) -typedef int greg_t, gregset_t[19]; -typedef struct _fpstate { - unsigned long cw, sw, tag, ipoff, cssel, dataoff, datasel; - struct { - unsigned short significand[4], exponent; - } _st[8]; - unsigned long status; -} *fpregset_t; -struct sigcontext { - unsigned short gs, __gsh, fs, __fsh, es, __esh, ds, __dsh; - unsigned long edi, esi, ebp, esp, ebx, edx, ecx, eax; - unsigned long trapno, err, eip; - unsigned short cs, __csh; - unsigned long eflags, esp_at_signal; - unsigned short ss, __ssh; - struct _fpstate *fpstate; - unsigned long oldmask, cr2; -}; -typedef struct { - gregset_t gregs; - fpregset_t fpregs; - unsigned long oldmask, cr2; -} mcontext_t; -#else -typedef struct { - unsigned __space[22]; -} mcontext_t; -#endif - -struct sigaltstack { - void *ss_sp; - int ss_flags; - size_t ss_size; -}; - -typedef struct __ucontext { - unsigned long uc_flags; - struct __ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - unsigned long __fpregs_mem[28]; -} ucontext_t; - -#define SA_NOCLDSTOP 1 -#define SA_NOCLDWAIT 2 -#define SA_SIGINFO 4 -#define SA_ONSTACK 0x08000000 -#define SA_RESTART 0x10000000 -#define SA_NODEFER 0x40000000 -#define SA_RESETHAND 0x80000000 -#define SA_RESTORER 0x04000000 - -#endif - -#define SIGHUP 1 -#define SIGINT 2 -#define SIGQUIT 3 -#define SIGILL 4 -#define SIGTRAP 5 -#define SIGABRT 6 -#define SIGIOT SIGABRT -#define SIGBUS 7 -#define SIGFPE 8 -#define SIGKILL 9 -#define SIGUSR1 10 -#define SIGSEGV 11 -#define SIGUSR2 12 -#define SIGPIPE 13 -#define SIGALRM 14 -#define SIGTERM 15 -#define SIGSTKFLT 16 -#define SIGCHLD 17 -#define SIGCONT 18 -#define SIGSTOP 19 -#define SIGTSTP 20 -#define SIGTTIN 21 -#define SIGTTOU 22 -#define SIGURG 23 -#define SIGXCPU 24 -#define SIGXFSZ 25 -#define SIGVTALRM 26 -#define SIGPROF 27 -#define SIGWINCH 28 -#define SIGIO 29 -#define SIGPOLL 29 -#define SIGPWR 30 -#define SIGSYS 31 -#define SIGUNUSED SIGSYS - -#define _NSIG 65 \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/stat.h b/lib/libc/include/i386-linux-musl/bits/stat.h deleted file mode 100644 index 3bf02b3756..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/stat.h +++ /dev/null @@ -1,25 +0,0 @@ -/* copied from kernel definition, but with padding replaced - * by the corresponding correctly-sized userspace types. */ - -struct stat { - dev_t st_dev; - int __st_dev_padding; - long __st_ino_truncated; - mode_t st_mode; - nlink_t st_nlink; - uid_t st_uid; - gid_t st_gid; - dev_t st_rdev; - int __st_rdev_padding; - off_t st_size; - blksize_t st_blksize; - blkcnt_t st_blocks; - struct { - long tv_sec; - long tv_nsec; - } __st_atim32, __st_mtim32, __st_ctim32; - ino_t st_ino; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; -}; \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/stdint.h b/lib/libc/include/i386-linux-musl/bits/stdint.h deleted file mode 100644 index b70a87dc9d..0000000000 --- a/lib/libc/include/i386-linux-musl/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 \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/syscall.h b/lib/libc/include/i386-linux-musl/bits/syscall.h deleted file mode 100644 index 37130cf3f0..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/syscall.h +++ /dev/null @@ -1,875 +0,0 @@ -#define __NR_restart_syscall 0 -#define __NR_exit 1 -#define __NR_fork 2 -#define __NR_read 3 -#define __NR_write 4 -#define __NR_open 5 -#define __NR_close 6 -#define __NR_waitpid 7 -#define __NR_creat 8 -#define __NR_link 9 -#define __NR_unlink 10 -#define __NR_execve 11 -#define __NR_chdir 12 -#define __NR_time 13 -#define __NR_mknod 14 -#define __NR_chmod 15 -#define __NR_lchown 16 -#define __NR_break 17 -#define __NR_oldstat 18 -#define __NR_lseek 19 -#define __NR_getpid 20 -#define __NR_mount 21 -#define __NR_umount 22 -#define __NR_setuid 23 -#define __NR_getuid 24 -#define __NR_stime 25 -#define __NR_ptrace 26 -#define __NR_alarm 27 -#define __NR_oldfstat 28 -#define __NR_pause 29 -#define __NR_utime 30 -#define __NR_stty 31 -#define __NR_gtty 32 -#define __NR_access 33 -#define __NR_nice 34 -#define __NR_ftime 35 -#define __NR_sync 36 -#define __NR_kill 37 -#define __NR_rename 38 -#define __NR_mkdir 39 -#define __NR_rmdir 40 -#define __NR_dup 41 -#define __NR_pipe 42 -#define __NR_times 43 -#define __NR_prof 44 -#define __NR_brk 45 -#define __NR_setgid 46 -#define __NR_getgid 47 -#define __NR_signal 48 -#define __NR_geteuid 49 -#define __NR_getegid 50 -#define __NR_acct 51 -#define __NR_umount2 52 -#define __NR_lock 53 -#define __NR_ioctl 54 -#define __NR_fcntl 55 -#define __NR_mpx 56 -#define __NR_setpgid 57 -#define __NR_ulimit 58 -#define __NR_oldolduname 59 -#define __NR_umask 60 -#define __NR_chroot 61 -#define __NR_ustat 62 -#define __NR_dup2 63 -#define __NR_getppid 64 -#define __NR_getpgrp 65 -#define __NR_setsid 66 -#define __NR_sigaction 67 -#define __NR_sgetmask 68 -#define __NR_ssetmask 69 -#define __NR_setreuid 70 -#define __NR_setregid 71 -#define __NR_sigsuspend 72 -#define __NR_sigpending 73 -#define __NR_sethostname 74 -#define __NR_setrlimit 75 -#define __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */ -#define __NR_getrusage 77 -#define __NR_gettimeofday_time32 78 -#define __NR_settimeofday_time32 79 -#define __NR_getgroups 80 -#define __NR_setgroups 81 -#define __NR_select 82 -#define __NR_symlink 83 -#define __NR_oldlstat 84 -#define __NR_readlink 85 -#define __NR_uselib 86 -#define __NR_swapon 87 -#define __NR_reboot 88 -#define __NR_readdir 89 -#define __NR_mmap 90 -#define __NR_munmap 91 -#define __NR_truncate 92 -#define __NR_ftruncate 93 -#define __NR_fchmod 94 -#define __NR_fchown 95 -#define __NR_getpriority 96 -#define __NR_setpriority 97 -#define __NR_profil 98 -#define __NR_statfs 99 -#define __NR_fstatfs 100 -#define __NR_ioperm 101 -#define __NR_socketcall 102 -#define __NR_syslog 103 -#define __NR_setitimer 104 -#define __NR_getitimer 105 -#define __NR_stat 106 -#define __NR_lstat 107 -#define __NR_fstat 108 -#define __NR_olduname 109 -#define __NR_iopl 110 -#define __NR_vhangup 111 -#define __NR_idle 112 -#define __NR_vm86old 113 -#define __NR_wait4 114 -#define __NR_swapoff 115 -#define __NR_sysinfo 116 -#define __NR_ipc 117 -#define __NR_fsync 118 -#define __NR_sigreturn 119 -#define __NR_clone 120 -#define __NR_setdomainname 121 -#define __NR_uname 122 -#define __NR_modify_ldt 123 -#define __NR_adjtimex 124 -#define __NR_mprotect 125 -#define __NR_sigprocmask 126 -#define __NR_create_module 127 -#define __NR_init_module 128 -#define __NR_delete_module 129 -#define __NR_get_kernel_syms 130 -#define __NR_quotactl 131 -#define __NR_getpgid 132 -#define __NR_fchdir 133 -#define __NR_bdflush 134 -#define __NR_sysfs 135 -#define __NR_personality 136 -#define __NR_afs_syscall 137 -#define __NR_setfsuid 138 -#define __NR_setfsgid 139 -#define __NR__llseek 140 -#define __NR_getdents 141 -#define __NR__newselect 142 -#define __NR_flock 143 -#define __NR_msync 144 -#define __NR_readv 145 -#define __NR_writev 146 -#define __NR_getsid 147 -#define __NR_fdatasync 148 -#define __NR__sysctl 149 -#define __NR_mlock 150 -#define __NR_munlock 151 -#define __NR_mlockall 152 -#define __NR_munlockall 153 -#define __NR_sched_setparam 154 -#define __NR_sched_getparam 155 -#define __NR_sched_setscheduler 156 -#define __NR_sched_getscheduler 157 -#define __NR_sched_yield 158 -#define __NR_sched_get_priority_max 159 -#define __NR_sched_get_priority_min 160 -#define __NR_sched_rr_get_interval 161 -#define __NR_nanosleep 162 -#define __NR_mremap 163 -#define __NR_setresuid 164 -#define __NR_getresuid 165 -#define __NR_vm86 166 -#define __NR_query_module 167 -#define __NR_poll 168 -#define __NR_nfsservctl 169 -#define __NR_setresgid 170 -#define __NR_getresgid 171 -#define __NR_prctl 172 -#define __NR_rt_sigreturn 173 -#define __NR_rt_sigaction 174 -#define __NR_rt_sigprocmask 175 -#define __NR_rt_sigpending 176 -#define __NR_rt_sigtimedwait 177 -#define __NR_rt_sigqueueinfo 178 -#define __NR_rt_sigsuspend 179 -#define __NR_pread64 180 -#define __NR_pwrite64 181 -#define __NR_chown 182 -#define __NR_getcwd 183 -#define __NR_capget 184 -#define __NR_capset 185 -#define __NR_sigaltstack 186 -#define __NR_sendfile 187 -#define __NR_getpmsg 188 -#define __NR_putpmsg 189 -#define __NR_vfork 190 -#define __NR_ugetrlimit 191 -#define __NR_mmap2 192 -#define __NR_truncate64 193 -#define __NR_ftruncate64 194 -#define __NR_stat64 195 -#define __NR_lstat64 196 -#define __NR_fstat64 197 -#define __NR_lchown32 198 -#define __NR_getuid32 199 -#define __NR_getgid32 200 -#define __NR_geteuid32 201 -#define __NR_getegid32 202 -#define __NR_setreuid32 203 -#define __NR_setregid32 204 -#define __NR_getgroups32 205 -#define __NR_setgroups32 206 -#define __NR_fchown32 207 -#define __NR_setresuid32 208 -#define __NR_getresuid32 209 -#define __NR_setresgid32 210 -#define __NR_getresgid32 211 -#define __NR_chown32 212 -#define __NR_setuid32 213 -#define __NR_setgid32 214 -#define __NR_setfsuid32 215 -#define __NR_setfsgid32 216 -#define __NR_pivot_root 217 -#define __NR_mincore 218 -#define __NR_madvise 219 -#define __NR_getdents64 220 -#define __NR_fcntl64 221 -/* 223 is unused */ -#define __NR_gettid 224 -#define __NR_readahead 225 -#define __NR_setxattr 226 -#define __NR_lsetxattr 227 -#define __NR_fsetxattr 228 -#define __NR_getxattr 229 -#define __NR_lgetxattr 230 -#define __NR_fgetxattr 231 -#define __NR_listxattr 232 -#define __NR_llistxattr 233 -#define __NR_flistxattr 234 -#define __NR_removexattr 235 -#define __NR_lremovexattr 236 -#define __NR_fremovexattr 237 -#define __NR_tkill 238 -#define __NR_sendfile64 239 -#define __NR_futex 240 -#define __NR_sched_setaffinity 241 -#define __NR_sched_getaffinity 242 -#define __NR_set_thread_area 243 -#define __NR_get_thread_area 244 -#define __NR_io_setup 245 -#define __NR_io_destroy 246 -#define __NR_io_getevents 247 -#define __NR_io_submit 248 -#define __NR_io_cancel 249 -#define __NR_fadvise64 250 -/* 251 is available for reuse (was briefly sys_set_zone_reclaim) */ -#define __NR_exit_group 252 -#define __NR_lookup_dcookie 253 -#define __NR_epoll_create 254 -#define __NR_epoll_ctl 255 -#define __NR_epoll_wait 256 -#define __NR_remap_file_pages 257 -#define __NR_set_tid_address 258 -#define __NR_timer_create 259 -#define __NR_timer_settime32 (__NR_timer_create+1) -#define __NR_timer_gettime32 (__NR_timer_create+2) -#define __NR_timer_getoverrun (__NR_timer_create+3) -#define __NR_timer_delete (__NR_timer_create+4) -#define __NR_clock_settime32 (__NR_timer_create+5) -#define __NR_clock_gettime32 (__NR_timer_create+6) -#define __NR_clock_getres_time32 (__NR_timer_create+7) -#define __NR_clock_nanosleep_time32 (__NR_timer_create+8) -#define __NR_statfs64 268 -#define __NR_fstatfs64 269 -#define __NR_tgkill 270 -#define __NR_utimes 271 -#define __NR_fadvise64_64 272 -#define __NR_vserver 273 -#define __NR_mbind 274 -#define __NR_get_mempolicy 275 -#define __NR_set_mempolicy 276 -#define __NR_mq_open 277 -#define __NR_mq_unlink (__NR_mq_open+1) -#define __NR_mq_timedsend (__NR_mq_open+2) -#define __NR_mq_timedreceive (__NR_mq_open+3) -#define __NR_mq_notify (__NR_mq_open+4) -#define __NR_mq_getsetattr (__NR_mq_open+5) -#define __NR_kexec_load 283 -#define __NR_waitid 284 -/* #define __NR_sys_setaltroot 285 */ -#define __NR_add_key 286 -#define __NR_request_key 287 -#define __NR_keyctl 288 -#define __NR_ioprio_set 289 -#define __NR_ioprio_get 290 -#define __NR_inotify_init 291 -#define __NR_inotify_add_watch 292 -#define __NR_inotify_rm_watch 293 -#define __NR_migrate_pages 294 -#define __NR_openat 295 -#define __NR_mkdirat 296 -#define __NR_mknodat 297 -#define __NR_fchownat 298 -#define __NR_futimesat 299 -#define __NR_fstatat64 300 -#define __NR_unlinkat 301 -#define __NR_renameat 302 -#define __NR_linkat 303 -#define __NR_symlinkat 304 -#define __NR_readlinkat 305 -#define __NR_fchmodat 306 -#define __NR_faccessat 307 -#define __NR_pselect6 308 -#define __NR_ppoll 309 -#define __NR_unshare 310 -#define __NR_set_robust_list 311 -#define __NR_get_robust_list 312 -#define __NR_splice 313 -#define __NR_sync_file_range 314 -#define __NR_tee 315 -#define __NR_vmsplice 316 -#define __NR_move_pages 317 -#define __NR_getcpu 318 -#define __NR_epoll_pwait 319 -#define __NR_utimensat 320 -#define __NR_signalfd 321 -#define __NR_timerfd_create 322 -#define __NR_eventfd 323 -#define __NR_fallocate 324 -#define __NR_timerfd_settime32 325 -#define __NR_timerfd_gettime32 326 -#define __NR_signalfd4 327 -#define __NR_eventfd2 328 -#define __NR_epoll_create1 329 -#define __NR_dup3 330 -#define __NR_pipe2 331 -#define __NR_inotify_init1 332 -#define __NR_preadv 333 -#define __NR_pwritev 334 -#define __NR_rt_tgsigqueueinfo 335 -#define __NR_perf_event_open 336 -#define __NR_recvmmsg 337 -#define __NR_fanotify_init 338 -#define __NR_fanotify_mark 339 -#define __NR_prlimit64 340 -#define __NR_name_to_handle_at 341 -#define __NR_open_by_handle_at 342 -#define __NR_clock_adjtime 343 -#define __NR_syncfs 344 -#define __NR_sendmmsg 345 -#define __NR_setns 346 -#define __NR_process_vm_readv 347 -#define __NR_process_vm_writev 348 -#define __NR_kcmp 349 -#define __NR_finit_module 350 -#define __NR_sched_setattr 351 -#define __NR_sched_getattr 352 -#define __NR_renameat2 353 -#define __NR_seccomp 354 -#define __NR_getrandom 355 -#define __NR_memfd_create 356 -#define __NR_bpf 357 -#define __NR_execveat 358 -#define __NR_socket 359 -#define __NR_socketpair 360 -#define __NR_bind 361 -#define __NR_connect 362 -#define __NR_listen 363 -#define __NR_accept4 364 -#define __NR_getsockopt 365 -#define __NR_setsockopt 366 -#define __NR_getsockname 367 -#define __NR_getpeername 368 -#define __NR_sendto 369 -#define __NR_sendmsg 370 -#define __NR_recvfrom 371 -#define __NR_recvmsg 372 -#define __NR_shutdown 373 -#define __NR_userfaultfd 374 -#define __NR_membarrier 375 -#define __NR_mlock2 376 -#define __NR_copy_file_range 377 -#define __NR_preadv2 378 -#define __NR_pwritev2 379 -#define __NR_pkey_mprotect 380 -#define __NR_pkey_alloc 381 -#define __NR_pkey_free 382 -#define __NR_statx 383 -#define __NR_arch_prctl 384 -#define __NR_io_pgetevents 385 -#define __NR_rseq 386 -#define __NR_semget 393 -#define __NR_semctl 394 -#define __NR_shmget 395 -#define __NR_shmctl 396 -#define __NR_shmat 397 -#define __NR_shmdt 398 -#define __NR_msgget 399 -#define __NR_msgsnd 400 -#define __NR_msgrcv 401 -#define __NR_msgctl 402 -#define __NR_clock_gettime64 403 -#define __NR_clock_settime64 404 -#define __NR_clock_adjtime64 405 -#define __NR_clock_getres_time64 406 -#define __NR_clock_nanosleep_time64 407 -#define __NR_timer_gettime64 408 -#define __NR_timer_settime64 409 -#define __NR_timerfd_gettime64 410 -#define __NR_timerfd_settime64 411 -#define __NR_utimensat_time64 412 -#define __NR_pselect6_time64 413 -#define __NR_ppoll_time64 414 -#define __NR_io_pgetevents_time64 416 -#define __NR_recvmmsg_time64 417 -#define __NR_mq_timedsend_time64 418 -#define __NR_mq_timedreceive_time64 419 -#define __NR_semtimedop_time64 420 -#define __NR_rt_sigtimedwait_time64 421 -#define __NR_futex_time64 422 -#define __NR_sched_rr_get_interval_time64 423 -#define __NR_pidfd_send_signal 424 -#define __NR_io_uring_setup 425 -#define __NR_io_uring_enter 426 -#define __NR_io_uring_register 427 -#define __NR_open_tree 428 -#define __NR_move_mount 429 -#define __NR_fsopen 430 -#define __NR_fsconfig 431 -#define __NR_fsmount 432 -#define __NR_fspick 433 -#define __NR_pidfd_open 434 -#define __NR_clone3 435 -#define __NR_close_range 436 -#define __NR_openat2 437 -#define __NR_pidfd_getfd 438 -#define __NR_faccessat2 439 -#define __NR_process_madvise 440 -#define __NR_epoll_pwait2 441 -#define __NR_mount_setattr 442 -#define __NR_landlock_create_ruleset 444 -#define __NR_landlock_add_rule 445 -#define __NR_landlock_restrict_self 446 - -#define SYS_restart_syscall 0 -#define SYS_exit 1 -#define SYS_fork 2 -#define SYS_read 3 -#define SYS_write 4 -#define SYS_open 5 -#define SYS_close 6 -#define SYS_waitpid 7 -#define SYS_creat 8 -#define SYS_link 9 -#define SYS_unlink 10 -#define SYS_execve 11 -#define SYS_chdir 12 -#define SYS_time 13 -#define SYS_mknod 14 -#define SYS_chmod 15 -#define SYS_lchown 16 -#define SYS_break 17 -#define SYS_oldstat 18 -#define SYS_lseek 19 -#define SYS_getpid 20 -#define SYS_mount 21 -#define SYS_umount 22 -#define SYS_setuid 23 -#define SYS_getuid 24 -#define SYS_stime 25 -#define SYS_ptrace 26 -#define SYS_alarm 27 -#define SYS_oldfstat 28 -#define SYS_pause 29 -#define SYS_utime 30 -#define SYS_stty 31 -#define SYS_gtty 32 -#define SYS_access 33 -#define SYS_nice 34 -#define SYS_ftime 35 -#define SYS_sync 36 -#define SYS_kill 37 -#define SYS_rename 38 -#define SYS_mkdir 39 -#define SYS_rmdir 40 -#define SYS_dup 41 -#define SYS_pipe 42 -#define SYS_times 43 -#define SYS_prof 44 -#define SYS_brk 45 -#define SYS_setgid 46 -#define SYS_getgid 47 -#define SYS_signal 48 -#define SYS_geteuid 49 -#define SYS_getegid 50 -#define SYS_acct 51 -#define SYS_umount2 52 -#define SYS_lock 53 -#define SYS_ioctl 54 -#define SYS_fcntl 55 -#define SYS_mpx 56 -#define SYS_setpgid 57 -#define SYS_ulimit 58 -#define SYS_oldolduname 59 -#define SYS_umask 60 -#define SYS_chroot 61 -#define SYS_ustat 62 -#define SYS_dup2 63 -#define SYS_getppid 64 -#define SYS_getpgrp 65 -#define SYS_setsid 66 -#define SYS_sigaction 67 -#define SYS_sgetmask 68 -#define SYS_ssetmask 69 -#define SYS_setreuid 70 -#define SYS_setregid 71 -#define SYS_sigsuspend 72 -#define SYS_sigpending 73 -#define SYS_sethostname 74 -#define SYS_setrlimit 75 -#define SYS_getrlimit 76 /* Back compatible 2Gig limited rlimit */ -#define SYS_getrusage 77 -#define SYS_gettimeofday_time32 78 -#define SYS_settimeofday_time32 79 -#define SYS_getgroups 80 -#define SYS_setgroups 81 -#define SYS_select 82 -#define SYS_symlink 83 -#define SYS_oldlstat 84 -#define SYS_readlink 85 -#define SYS_uselib 86 -#define SYS_swapon 87 -#define SYS_reboot 88 -#define SYS_readdir 89 -#define SYS_mmap 90 -#define SYS_munmap 91 -#define SYS_truncate 92 -#define SYS_ftruncate 93 -#define SYS_fchmod 94 -#define SYS_fchown 95 -#define SYS_getpriority 96 -#define SYS_setpriority 97 -#define SYS_profil 98 -#define SYS_statfs 99 -#define SYS_fstatfs 100 -#define SYS_ioperm 101 -#define SYS_socketcall 102 -#define SYS_syslog 103 -#define SYS_setitimer 104 -#define SYS_getitimer 105 -#define SYS_stat 106 -#define SYS_lstat 107 -#define SYS_fstat 108 -#define SYS_olduname 109 -#define SYS_iopl 110 -#define SYS_vhangup 111 -#define SYS_idle 112 -#define SYS_vm86old 113 -#define SYS_wait4 114 -#define SYS_swapoff 115 -#define SYS_sysinfo 116 -#define SYS_ipc 117 -#define SYS_fsync 118 -#define SYS_sigreturn 119 -#define SYS_clone 120 -#define SYS_setdomainname 121 -#define SYS_uname 122 -#define SYS_modify_ldt 123 -#define SYS_adjtimex 124 -#define SYS_mprotect 125 -#define SYS_sigprocmask 126 -#define SYS_create_module 127 -#define SYS_init_module 128 -#define SYS_delete_module 129 -#define SYS_get_kernel_syms 130 -#define SYS_quotactl 131 -#define SYS_getpgid 132 -#define SYS_fchdir 133 -#define SYS_bdflush 134 -#define SYS_sysfs 135 -#define SYS_personality 136 -#define SYS_afs_syscall 137 -#define SYS_setfsuid 138 -#define SYS_setfsgid 139 -#define SYS__llseek 140 -#define SYS_getdents 141 -#define SYS__newselect 142 -#define SYS_flock 143 -#define SYS_msync 144 -#define SYS_readv 145 -#define SYS_writev 146 -#define SYS_getsid 147 -#define SYS_fdatasync 148 -#define SYS__sysctl 149 -#define SYS_mlock 150 -#define SYS_munlock 151 -#define SYS_mlockall 152 -#define SYS_munlockall 153 -#define SYS_sched_setparam 154 -#define SYS_sched_getparam 155 -#define SYS_sched_setscheduler 156 -#define SYS_sched_getscheduler 157 -#define SYS_sched_yield 158 -#define SYS_sched_get_priority_max 159 -#define SYS_sched_get_priority_min 160 -#define SYS_sched_rr_get_interval 161 -#define SYS_nanosleep 162 -#define SYS_mremap 163 -#define SYS_setresuid 164 -#define SYS_getresuid 165 -#define SYS_vm86 166 -#define SYS_query_module 167 -#define SYS_poll 168 -#define SYS_nfsservctl 169 -#define SYS_setresgid 170 -#define SYS_getresgid 171 -#define SYS_prctl 172 -#define SYS_rt_sigreturn 173 -#define SYS_rt_sigaction 174 -#define SYS_rt_sigprocmask 175 -#define SYS_rt_sigpending 176 -#define SYS_rt_sigtimedwait 177 -#define SYS_rt_sigqueueinfo 178 -#define SYS_rt_sigsuspend 179 -#define SYS_pread64 180 -#define SYS_pwrite64 181 -#define SYS_chown 182 -#define SYS_getcwd 183 -#define SYS_capget 184 -#define SYS_capset 185 -#define SYS_sigaltstack 186 -#define SYS_sendfile 187 -#define SYS_getpmsg 188 -#define SYS_putpmsg 189 -#define SYS_vfork 190 -#define SYS_ugetrlimit 191 -#define SYS_mmap2 192 -#define SYS_truncate64 193 -#define SYS_ftruncate64 194 -#define SYS_stat64 195 -#define SYS_lstat64 196 -#define SYS_fstat64 197 -#define SYS_lchown32 198 -#define SYS_getuid32 199 -#define SYS_getgid32 200 -#define SYS_geteuid32 201 -#define SYS_getegid32 202 -#define SYS_setreuid32 203 -#define SYS_setregid32 204 -#define SYS_getgroups32 205 -#define SYS_setgroups32 206 -#define SYS_fchown32 207 -#define SYS_setresuid32 208 -#define SYS_getresuid32 209 -#define SYS_setresgid32 210 -#define SYS_getresgid32 211 -#define SYS_chown32 212 -#define SYS_setuid32 213 -#define SYS_setgid32 214 -#define SYS_setfsuid32 215 -#define SYS_setfsgid32 216 -#define SYS_pivot_root 217 -#define SYS_mincore 218 -#define SYS_madvise 219 -#define SYS_getdents64 220 -#define SYS_fcntl64 221 -#define SYS_gettid 224 -#define SYS_readahead 225 -#define SYS_setxattr 226 -#define SYS_lsetxattr 227 -#define SYS_fsetxattr 228 -#define SYS_getxattr 229 -#define SYS_lgetxattr 230 -#define SYS_fgetxattr 231 -#define SYS_listxattr 232 -#define SYS_llistxattr 233 -#define SYS_flistxattr 234 -#define SYS_removexattr 235 -#define SYS_lremovexattr 236 -#define SYS_fremovexattr 237 -#define SYS_tkill 238 -#define SYS_sendfile64 239 -#define SYS_futex 240 -#define SYS_sched_setaffinity 241 -#define SYS_sched_getaffinity 242 -#define SYS_set_thread_area 243 -#define SYS_get_thread_area 244 -#define SYS_io_setup 245 -#define SYS_io_destroy 246 -#define SYS_io_getevents 247 -#define SYS_io_submit 248 -#define SYS_io_cancel 249 -#define SYS_fadvise64 250 -#define SYS_exit_group 252 -#define SYS_lookup_dcookie 253 -#define SYS_epoll_create 254 -#define SYS_epoll_ctl 255 -#define SYS_epoll_wait 256 -#define SYS_remap_file_pages 257 -#define SYS_set_tid_address 258 -#define SYS_timer_create 259 -#define SYS_timer_settime32 (__NR_timer_create+1) -#define SYS_timer_gettime32 (__NR_timer_create+2) -#define SYS_timer_getoverrun (__NR_timer_create+3) -#define SYS_timer_delete (__NR_timer_create+4) -#define SYS_clock_settime32 (__NR_timer_create+5) -#define SYS_clock_gettime32 (__NR_timer_create+6) -#define SYS_clock_getres_time32 (__NR_timer_create+7) -#define SYS_clock_nanosleep_time32 (__NR_timer_create+8) -#define SYS_statfs64 268 -#define SYS_fstatfs64 269 -#define SYS_tgkill 270 -#define SYS_utimes 271 -#define SYS_fadvise64_64 272 -#define SYS_vserver 273 -#define SYS_mbind 274 -#define SYS_get_mempolicy 275 -#define SYS_set_mempolicy 276 -#define SYS_mq_open 277 -#define SYS_mq_unlink (__NR_mq_open+1) -#define SYS_mq_timedsend (__NR_mq_open+2) -#define SYS_mq_timedreceive (__NR_mq_open+3) -#define SYS_mq_notify (__NR_mq_open+4) -#define SYS_mq_getsetattr (__NR_mq_open+5) -#define SYS_kexec_load 283 -#define SYS_waitid 284 -/* #define SYS_sys_setaltroot 285 */ -#define SYS_add_key 286 -#define SYS_request_key 287 -#define SYS_keyctl 288 -#define SYS_ioprio_set 289 -#define SYS_ioprio_get 290 -#define SYS_inotify_init 291 -#define SYS_inotify_add_watch 292 -#define SYS_inotify_rm_watch 293 -#define SYS_migrate_pages 294 -#define SYS_openat 295 -#define SYS_mkdirat 296 -#define SYS_mknodat 297 -#define SYS_fchownat 298 -#define SYS_futimesat 299 -#define SYS_fstatat64 300 -#define SYS_unlinkat 301 -#define SYS_renameat 302 -#define SYS_linkat 303 -#define SYS_symlinkat 304 -#define SYS_readlinkat 305 -#define SYS_fchmodat 306 -#define SYS_faccessat 307 -#define SYS_pselect6 308 -#define SYS_ppoll 309 -#define SYS_unshare 310 -#define SYS_set_robust_list 311 -#define SYS_get_robust_list 312 -#define SYS_splice 313 -#define SYS_sync_file_range 314 -#define SYS_tee 315 -#define SYS_vmsplice 316 -#define SYS_move_pages 317 -#define SYS_getcpu 318 -#define SYS_epoll_pwait 319 -#define SYS_utimensat 320 -#define SYS_signalfd 321 -#define SYS_timerfd_create 322 -#define SYS_eventfd 323 -#define SYS_fallocate 324 -#define SYS_timerfd_settime32 325 -#define SYS_timerfd_gettime32 326 -#define SYS_signalfd4 327 -#define SYS_eventfd2 328 -#define SYS_epoll_create1 329 -#define SYS_dup3 330 -#define SYS_pipe2 331 -#define SYS_inotify_init1 332 -#define SYS_preadv 333 -#define SYS_pwritev 334 -#define SYS_rt_tgsigqueueinfo 335 -#define SYS_perf_event_open 336 -#define SYS_recvmmsg 337 -#define SYS_fanotify_init 338 -#define SYS_fanotify_mark 339 -#define SYS_prlimit64 340 -#define SYS_name_to_handle_at 341 -#define SYS_open_by_handle_at 342 -#define SYS_clock_adjtime 343 -#define SYS_syncfs 344 -#define SYS_sendmmsg 345 -#define SYS_setns 346 -#define SYS_process_vm_readv 347 -#define SYS_process_vm_writev 348 -#define SYS_kcmp 349 -#define SYS_finit_module 350 -#define SYS_sched_setattr 351 -#define SYS_sched_getattr 352 -#define SYS_renameat2 353 -#define SYS_seccomp 354 -#define SYS_getrandom 355 -#define SYS_memfd_create 356 -#define SYS_bpf 357 -#define SYS_execveat 358 -#define SYS_socket 359 -#define SYS_socketpair 360 -#define SYS_bind 361 -#define SYS_connect 362 -#define SYS_listen 363 -#define SYS_accept4 364 -#define SYS_getsockopt 365 -#define SYS_setsockopt 366 -#define SYS_getsockname 367 -#define SYS_getpeername 368 -#define SYS_sendto 369 -#define SYS_sendmsg 370 -#define SYS_recvfrom 371 -#define SYS_recvmsg 372 -#define SYS_shutdown 373 -#define SYS_userfaultfd 374 -#define SYS_membarrier 375 -#define SYS_mlock2 376 -#define SYS_copy_file_range 377 -#define SYS_preadv2 378 -#define SYS_pwritev2 379 -#define SYS_pkey_mprotect 380 -#define SYS_pkey_alloc 381 -#define SYS_pkey_free 382 -#define SYS_statx 383 -#define SYS_arch_prctl 384 -#define SYS_io_pgetevents 385 -#define SYS_rseq 386 -#define SYS_semget 393 -#define SYS_semctl 394 -#define SYS_shmget 395 -#define SYS_shmctl 396 -#define SYS_shmat 397 -#define SYS_shmdt 398 -#define SYS_msgget 399 -#define SYS_msgsnd 400 -#define SYS_msgrcv 401 -#define SYS_msgctl 402 -#define SYS_clock_gettime64 403 -#define SYS_clock_settime64 404 -#define SYS_clock_adjtime64 405 -#define SYS_clock_getres_time64 406 -#define SYS_clock_nanosleep_time64 407 -#define SYS_timer_gettime64 408 -#define SYS_timer_settime64 409 -#define SYS_timerfd_gettime64 410 -#define SYS_timerfd_settime64 411 -#define SYS_utimensat_time64 412 -#define SYS_pselect6_time64 413 -#define SYS_ppoll_time64 414 -#define SYS_io_pgetevents_time64 416 -#define SYS_recvmmsg_time64 417 -#define SYS_mq_timedsend_time64 418 -#define SYS_mq_timedreceive_time64 419 -#define SYS_semtimedop_time64 420 -#define SYS_rt_sigtimedwait_time64 421 -#define SYS_futex_time64 422 -#define SYS_sched_rr_get_interval_time64 423 -#define SYS_pidfd_send_signal 424 -#define SYS_io_uring_setup 425 -#define SYS_io_uring_enter 426 -#define SYS_io_uring_register 427 -#define SYS_open_tree 428 -#define SYS_move_mount 429 -#define SYS_fsopen 430 -#define SYS_fsconfig 431 -#define SYS_fsmount 432 -#define SYS_fspick 433 -#define SYS_pidfd_open 434 -#define SYS_clone3 435 -#define SYS_close_range 436 -#define SYS_openat2 437 -#define SYS_pidfd_getfd 438 -#define SYS_faccessat2 439 -#define SYS_process_madvise 440 -#define SYS_epoll_pwait2 441 -#define SYS_mount_setattr 442 -#define SYS_landlock_create_ruleset 444 -#define SYS_landlock_add_rule 445 -#define SYS_landlock_restrict_self 446 \ No newline at end of file diff --git a/lib/libc/include/i386-linux-musl/bits/user.h b/lib/libc/include/i386-linux-musl/bits/user.h deleted file mode 100644 index 834532d4e3..0000000000 --- a/lib/libc/include/i386-linux-musl/bits/user.h +++ /dev/null @@ -1,44 +0,0 @@ -#undef __WORDSIZE -#define __WORDSIZE 32 - -typedef struct user_fpregs_struct { - long cwd, swd, twd, fip, fcs, foo, fos, st_space[20]; -} elf_fpregset_t; - -typedef struct user_fpxregs_struct { - unsigned short cwd, swd, twd, fop; - long fip, fcs, foo, fos, mxcsr, reserved; - long st_space[32], xmm_space[32], padding[56]; -} elf_fpxregset_t; - -struct user_regs_struct { - long ebx, ecx, edx, esi, edi, ebp, eax, xds, xes, xfs, xgs; - long orig_eax, eip, xcs, eflags, esp, xss; -}; - -#define ELF_NGREG 17 -typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; - -struct user { - struct user_regs_struct regs; - int u_fpvalid; - struct user_fpregs_struct i387; - unsigned long u_tsize; - unsigned long u_dsize; - unsigned long u_ssize; - unsigned long start_code; - unsigned long start_stack; - long signal; - int reserved; - struct user_regs_struct *u_ar0; - struct user_fpregs_struct *u_fpstate; - unsigned long magic; - char u_comm[32]; - int u_debugreg[8]; -}; - -#define PAGE_MASK (~(PAGESIZE-1)) -#define NBPG PAGESIZE -#define UPAGES 1 -#define HOST_TEXT_START_ADDR (u.start_code) -#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) \ No newline at end of file diff --git a/lib/libc/include/mips-linux-musl/bits/signal.h b/lib/libc/include/mips-linux-musl/bits/signal.h index b35b14ea6a..9a882e9499 100644 --- a/lib/libc/include/mips-linux-musl/bits/signal.h +++ b/lib/libc/include/mips-linux-musl/bits/signal.h @@ -66,7 +66,6 @@ typedef struct __ucontext { #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 -#define SA_RESTORER 0x04000000 #undef SIG_BLOCK #undef SIG_UNBLOCK diff --git a/lib/libc/include/mips64-linux-musl/bits/signal.h b/lib/libc/include/mips64-linux-musl/bits/signal.h index 444a192351..475aae6d68 100644 --- a/lib/libc/include/mips64-linux-musl/bits/signal.h +++ b/lib/libc/include/mips64-linux-musl/bits/signal.h @@ -85,7 +85,6 @@ typedef struct __ucontext { #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 -#define SA_RESTORER 0x04000000 #undef SIG_BLOCK #undef SIG_UNBLOCK diff --git a/lib/libc/include/riscv64-linux-musl/bits/signal.h b/lib/libc/include/riscv64-linux-musl/bits/signal.h index 5cf2d5895d..01861df671 100644 --- a/lib/libc/include/riscv64-linux-musl/bits/signal.h +++ b/lib/libc/include/riscv64-linux-musl/bits/signal.h @@ -76,7 +76,6 @@ typedef struct __ucontext #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 -#define SA_RESTORER 0x04000000 #endif diff --git a/lib/libc/include/x86-linux-musl/bits/alltypes.h b/lib/libc/include/x86-linux-musl/bits/alltypes.h new file mode 100644 index 0000000000..f430f25cff --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/alltypes.h @@ -0,0 +1,438 @@ +#define _REDIR_TIME64 1 +#define _Addr int +#define _Int64 long long +#define _Reg int + +#define __BYTE_ORDER 1234 +#define __LONG_MAX 0x7fffffffL + +#ifndef __cplusplus +#ifdef __WCHAR_TYPE__ +#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) +typedef __WCHAR_TYPE__ wchar_t; +#define __DEFINED_wchar_t +#endif + +#else +#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) +typedef long wchar_t; +#define __DEFINED_wchar_t +#endif + +#endif +#endif + +#if defined(__FLT_EVAL_METHOD__) && __FLT_EVAL_METHOD__ == 0 +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef float float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef double double_t; +#define __DEFINED_double_t +#endif + +#else +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef long double float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef long double double_t; +#define __DEFINED_double_t +#endif + +#endif + +#if !defined(__cplusplus) +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { _Alignas(8) long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + +#elif defined(__GNUC__) +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { __attribute__((__aligned__(8))) long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + +#else +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { alignas(8) long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + +#endif +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 +#define __USE_TIME_BITS64 1 + +#if defined(__NEED_size_t) && !defined(__DEFINED_size_t) +typedef unsigned _Addr size_t; +#define __DEFINED_size_t +#endif + +#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t) +typedef unsigned _Addr uintptr_t; +#define __DEFINED_uintptr_t +#endif + +#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t) +typedef _Addr ptrdiff_t; +#define __DEFINED_ptrdiff_t +#endif + +#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t) +typedef _Addr ssize_t; +#define __DEFINED_ssize_t +#endif + +#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t) +typedef _Addr intptr_t; +#define __DEFINED_intptr_t +#endif + +#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t) +typedef _Addr regoff_t; +#define __DEFINED_regoff_t +#endif + +#if defined(__NEED_register_t) && !defined(__DEFINED_register_t) +typedef _Reg register_t; +#define __DEFINED_register_t +#endif + +#if defined(__NEED_time_t) && !defined(__DEFINED_time_t) +typedef _Int64 time_t; +#define __DEFINED_time_t +#endif + +#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t) +typedef _Int64 suseconds_t; +#define __DEFINED_suseconds_t +#endif + + +#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t) +typedef signed char int8_t; +#define __DEFINED_int8_t +#endif + +#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t) +typedef signed short int16_t; +#define __DEFINED_int16_t +#endif + +#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t) +typedef signed int int32_t; +#define __DEFINED_int32_t +#endif + +#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t) +typedef signed _Int64 int64_t; +#define __DEFINED_int64_t +#endif + +#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t) +typedef signed _Int64 intmax_t; +#define __DEFINED_intmax_t +#endif + +#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t) +typedef unsigned char uint8_t; +#define __DEFINED_uint8_t +#endif + +#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t) +typedef unsigned short uint16_t; +#define __DEFINED_uint16_t +#endif + +#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t) +typedef unsigned int uint32_t; +#define __DEFINED_uint32_t +#endif + +#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t) +typedef unsigned _Int64 uint64_t; +#define __DEFINED_uint64_t +#endif + +#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t) +typedef unsigned _Int64 u_int64_t; +#define __DEFINED_u_int64_t +#endif + +#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t) +typedef unsigned _Int64 uintmax_t; +#define __DEFINED_uintmax_t +#endif + + +#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t) +typedef unsigned mode_t; +#define __DEFINED_mode_t +#endif + +#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t) +typedef unsigned _Reg nlink_t; +#define __DEFINED_nlink_t +#endif + +#if defined(__NEED_off_t) && !defined(__DEFINED_off_t) +typedef _Int64 off_t; +#define __DEFINED_off_t +#endif + +#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t) +typedef unsigned _Int64 ino_t; +#define __DEFINED_ino_t +#endif + +#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t) +typedef unsigned _Int64 dev_t; +#define __DEFINED_dev_t +#endif + +#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t) +typedef long blksize_t; +#define __DEFINED_blksize_t +#endif + +#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t) +typedef _Int64 blkcnt_t; +#define __DEFINED_blkcnt_t +#endif + +#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t) +typedef unsigned _Int64 fsblkcnt_t; +#define __DEFINED_fsblkcnt_t +#endif + +#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t) +typedef unsigned _Int64 fsfilcnt_t; +#define __DEFINED_fsfilcnt_t +#endif + + +#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t) +typedef unsigned wint_t; +#define __DEFINED_wint_t +#endif + +#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t) +typedef unsigned long wctype_t; +#define __DEFINED_wctype_t +#endif + + +#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t) +typedef void * timer_t; +#define __DEFINED_timer_t +#endif + +#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t) +typedef int clockid_t; +#define __DEFINED_clockid_t +#endif + +#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t) +typedef long clock_t; +#define __DEFINED_clock_t +#endif + +#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval) +struct timeval { time_t tv_sec; suseconds_t tv_usec; }; +#define __DEFINED_struct_timeval +#endif + +#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec) +struct timespec { time_t tv_sec; int :8*(sizeof(time_t)-sizeof(long))*(__BYTE_ORDER==4321); long tv_nsec; int :8*(sizeof(time_t)-sizeof(long))*(__BYTE_ORDER!=4321); }; +#define __DEFINED_struct_timespec +#endif + + +#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t) +typedef int pid_t; +#define __DEFINED_pid_t +#endif + +#if defined(__NEED_id_t) && !defined(__DEFINED_id_t) +typedef unsigned id_t; +#define __DEFINED_id_t +#endif + +#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t) +typedef unsigned uid_t; +#define __DEFINED_uid_t +#endif + +#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t) +typedef unsigned gid_t; +#define __DEFINED_gid_t +#endif + +#if defined(__NEED_key_t) && !defined(__DEFINED_key_t) +typedef int key_t; +#define __DEFINED_key_t +#endif + +#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t) +typedef unsigned useconds_t; +#define __DEFINED_useconds_t +#endif + + +#ifdef __cplusplus +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef unsigned long pthread_t; +#define __DEFINED_pthread_t +#endif + +#else +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef struct __pthread * pthread_t; +#define __DEFINED_pthread_t +#endif + +#endif +#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t) +typedef int pthread_once_t; +#define __DEFINED_pthread_once_t +#endif + +#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t) +typedef unsigned pthread_key_t; +#define __DEFINED_pthread_key_t +#endif + +#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t) +typedef int pthread_spinlock_t; +#define __DEFINED_pthread_spinlock_t +#endif + +#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t) +typedef struct { unsigned __attr; } pthread_mutexattr_t; +#define __DEFINED_pthread_mutexattr_t +#endif + +#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t) +typedef struct { unsigned __attr; } pthread_condattr_t; +#define __DEFINED_pthread_condattr_t +#endif + +#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t) +typedef struct { unsigned __attr; } pthread_barrierattr_t; +#define __DEFINED_pthread_barrierattr_t +#endif + +#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t) +typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t; +#define __DEFINED_pthread_rwlockattr_t +#endif + + +#if defined(__NEED_struct__IO_FILE) && !defined(__DEFINED_struct__IO_FILE) +struct _IO_FILE { char __x; }; +#define __DEFINED_struct__IO_FILE +#endif + +#if defined(__NEED_FILE) && !defined(__DEFINED_FILE) +typedef struct _IO_FILE FILE; +#define __DEFINED_FILE +#endif + + +#if defined(__NEED_va_list) && !defined(__DEFINED_va_list) +typedef __builtin_va_list va_list; +#define __DEFINED_va_list +#endif + +#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list) +typedef __builtin_va_list __isoc_va_list; +#define __DEFINED___isoc_va_list +#endif + + +#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t) +typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t; +#define __DEFINED_mbstate_t +#endif + + +#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t) +typedef struct __locale_struct * locale_t; +#define __DEFINED_locale_t +#endif + + +#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t) +typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t; +#define __DEFINED_sigset_t +#endif + + +#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec) +struct iovec { void *iov_base; size_t iov_len; }; +#define __DEFINED_struct_iovec +#endif + + +#if defined(__NEED_struct_winsize) && !defined(__DEFINED_struct_winsize) +struct winsize { unsigned short ws_row, ws_col, ws_xpixel, ws_ypixel; }; +#define __DEFINED_struct_winsize +#endif + + +#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t) +typedef unsigned socklen_t; +#define __DEFINED_socklen_t +#endif + +#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t) +typedef unsigned short sa_family_t; +#define __DEFINED_sa_family_t +#endif + + +#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t) +typedef struct { union { int __i[sizeof(long)==8?14:9]; volatile int __vi[sizeof(long)==8?14:9]; unsigned long __s[sizeof(long)==8?7:9]; } __u; } pthread_attr_t; +#define __DEFINED_pthread_attr_t +#endif + +#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t) +typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } pthread_mutex_t; +#define __DEFINED_pthread_mutex_t +#endif + +#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t) +typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } mtx_t; +#define __DEFINED_mtx_t +#endif + +#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } pthread_cond_t; +#define __DEFINED_pthread_cond_t +#endif + +#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } cnd_t; +#define __DEFINED_cnd_t +#endif + +#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t) +typedef struct { union { int __i[sizeof(long)==8?14:8]; volatile int __vi[sizeof(long)==8?14:8]; void *__p[sizeof(long)==8?7:8]; } __u; } pthread_rwlock_t; +#define __DEFINED_pthread_rwlock_t +#endif + +#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t) +typedef struct { union { int __i[sizeof(long)==8?8:5]; volatile int __vi[sizeof(long)==8?8:5]; void *__p[sizeof(long)==8?4:5]; } __u; } pthread_barrier_t; +#define __DEFINED_pthread_barrier_t +#endif + + +#undef _Addr +#undef _Int64 +#undef _Reg \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/fenv.h b/lib/libc/include/x86-linux-musl/bits/fenv.h new file mode 100644 index 0000000000..b9a5533d3c --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/fenv.h @@ -0,0 +1,33 @@ +#define FE_INVALID 1 +#define __FE_DENORM 2 +#define FE_DIVBYZERO 4 +#define FE_OVERFLOW 8 +#define FE_UNDERFLOW 16 +#define FE_INEXACT 32 + +#define FE_ALL_EXCEPT 63 + +#define FE_TONEAREST 0 +#define FE_DOWNWARD 0x400 +#define FE_UPWARD 0x800 +#define FE_TOWARDZERO 0xc00 + +typedef unsigned short fexcept_t; + +typedef struct { + unsigned short __control_word; + unsigned short __unused1; + unsigned short __status_word; + unsigned short __unused2; + unsigned short __tags; + unsigned short __unused3; + unsigned int __eip; + unsigned short __cs_selector; + unsigned int __opcode:11; + unsigned int __unused4:5; + unsigned int __data_offset; + unsigned short __data_selector; + unsigned short __unused5; +} fenv_t; + +#define FE_DFL_ENV ((const fenv_t *) -1) \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/float.h b/lib/libc/include/x86-linux-musl/bits/float.h new file mode 100644 index 0000000000..6265df00d6 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/float.h @@ -0,0 +1,20 @@ +#ifdef __FLT_EVAL_METHOD__ +#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ +#else +#define FLT_EVAL_METHOD 2 +#endif + +#define LDBL_TRUE_MIN 3.6451995318824746025e-4951L +#define LDBL_MIN 3.3621031431120935063e-4932L +#define LDBL_MAX 1.1897314953572317650e+4932L +#define LDBL_EPSILON 1.0842021724855044340e-19L + +#define LDBL_MANT_DIG 64 +#define LDBL_MIN_EXP (-16381) +#define LDBL_MAX_EXP 16384 + +#define LDBL_DIG 18 +#define LDBL_MIN_10_EXP (-4931) +#define LDBL_MAX_10_EXP 4932 + +#define DECIMAL_DIG 21 \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/io.h b/lib/libc/include/x86-linux-musl/bits/io.h new file mode 100644 index 0000000000..be42152adb --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/io.h @@ -0,0 +1,77 @@ +static __inline void outb(unsigned char __val, unsigned short __port) +{ + __asm__ volatile ("outb %0,%1" : : "a" (__val), "dN" (__port)); +} + +static __inline void outw(unsigned short __val, unsigned short __port) +{ + __asm__ volatile ("outw %0,%1" : : "a" (__val), "dN" (__port)); +} + +static __inline void outl(unsigned int __val, unsigned short __port) +{ + __asm__ volatile ("outl %0,%1" : : "a" (__val), "dN" (__port)); +} + +static __inline unsigned char inb(unsigned short __port) +{ + unsigned char __val; + __asm__ volatile ("inb %1,%0" : "=a" (__val) : "dN" (__port)); + return __val; +} + +static __inline unsigned short inw(unsigned short __port) +{ + unsigned short __val; + __asm__ volatile ("inw %1,%0" : "=a" (__val) : "dN" (__port)); + return __val; +} + +static __inline unsigned int inl(unsigned short __port) +{ + unsigned int __val; + __asm__ volatile ("inl %1,%0" : "=a" (__val) : "dN" (__port)); + return __val; +} + +static __inline void outsb(unsigned short __port, const void *__buf, unsigned long __n) +{ + __asm__ volatile ("cld; rep; outsb" + : "+S" (__buf), "+c" (__n) + : "d" (__port)); +} + +static __inline void outsw(unsigned short __port, const void *__buf, unsigned long __n) +{ + __asm__ volatile ("cld; rep; outsw" + : "+S" (__buf), "+c" (__n) + : "d" (__port)); +} + +static __inline void outsl(unsigned short __port, const void *__buf, unsigned long __n) +{ + __asm__ volatile ("cld; rep; outsl" + : "+S" (__buf), "+c"(__n) + : "d" (__port)); +} + +static __inline void insb(unsigned short __port, void *__buf, unsigned long __n) +{ + __asm__ volatile ("cld; rep; insb" + : "+D" (__buf), "+c" (__n) + : "d" (__port)); +} + +static __inline void insw(unsigned short __port, void *__buf, unsigned long __n) +{ + __asm__ volatile ("cld; rep; insw" + : "+D" (__buf), "+c" (__n) + : "d" (__port)); +} + +static __inline void insl(unsigned short __port, void *__buf, unsigned long __n) +{ + __asm__ volatile ("cld; rep; insl" + : "+D" (__buf), "+c" (__n) + : "d" (__port)); +} \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/ipcstat.h b/lib/libc/include/x86-linux-musl/bits/ipcstat.h new file mode 100644 index 0000000000..d055f3e837 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/ipcstat.h @@ -0,0 +1 @@ +#define IPC_STAT 0x102 \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/limits.h b/lib/libc/include/x86-linux-musl/bits/limits.h new file mode 100644 index 0000000000..fc11433d98 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/limits.h @@ -0,0 +1 @@ +#define PAGESIZE 4096 \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/mman.h b/lib/libc/include/x86-linux-musl/bits/mman.h new file mode 100644 index 0000000000..7d968b07ba --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/mman.h @@ -0,0 +1 @@ +#define MAP_32BIT 0x40 \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/msg.h b/lib/libc/include/x86-linux-musl/bits/msg.h new file mode 100644 index 0000000000..037fd956d4 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/msg.h @@ -0,0 +1,18 @@ +struct msqid_ds { + struct ipc_perm msg_perm; + unsigned long __msg_stime_lo; + unsigned long __msg_stime_hi; + unsigned long __msg_rtime_lo; + unsigned long __msg_rtime_hi; + unsigned long __msg_ctime_lo; + unsigned long __msg_ctime_hi; + unsigned long msg_cbytes; + msgqnum_t msg_qnum; + msglen_t msg_qbytes; + pid_t msg_lspid; + pid_t msg_lrpid; + unsigned long __unused[2]; + time_t msg_stime; + time_t msg_rtime; + time_t msg_ctime; +}; \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/ptrace.h b/lib/libc/include/x86-linux-musl/bits/ptrace.h new file mode 100644 index 0000000000..f89866fc9a --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/ptrace.h @@ -0,0 +1,11 @@ +#define PTRACE_GET_THREAD_AREA 25 +#define PTRACE_SET_THREAD_AREA 26 +#define PTRACE_SYSEMU 31 +#define PTRACE_SYSEMU_SINGLESTEP 32 +#define PTRACE_SINGLEBLOCK 33 + +#define PT_GET_THREAD_AREA PTRACE_GET_THREAD_AREA +#define PT_SET_THREAD_AREA PTRACE_SET_THREAD_AREA +#define PT_SYSEMU PTRACE_SYSEMU +#define PT_SYSEMU_SINGLESTEP PTRACE_SYSEMU_SINGLESTEP +#define PT_STEPBLOCK PTRACE_SINGLEBLOCK \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/reg.h b/lib/libc/include/x86-linux-musl/bits/reg.h new file mode 100644 index 0000000000..df79f9773d --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/reg.h @@ -0,0 +1,19 @@ +#undef __WORDSIZE +#define __WORDSIZE 32 +#define EBX 0 +#define ECX 1 +#define EDX 2 +#define ESI 3 +#define EDI 4 +#define EBP 5 +#define EAX 6 +#define DS 7 +#define ES 8 +#define FS 9 +#define GS 10 +#define ORIG_EAX 11 +#define EIP 12 +#define CS 13 +#define EFL 14 +#define UESP 15 +#define SS 16 \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/sem.h b/lib/libc/include/x86-linux-musl/bits/sem.h new file mode 100644 index 0000000000..f4936d6f5a --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/sem.h @@ -0,0 +1,13 @@ +struct semid_ds { + struct ipc_perm sem_perm; + unsigned long __sem_otime_lo; + unsigned long __sem_otime_hi; + unsigned long __sem_ctime_lo; + unsigned long __sem_ctime_hi; + unsigned short sem_nsems; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; + long __unused3; + long __unused4; + time_t sem_otime; + time_t sem_ctime; +}; \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/setjmp.h b/lib/libc/include/x86-linux-musl/bits/setjmp.h new file mode 100644 index 0000000000..2fcb3d4cb0 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/setjmp.h @@ -0,0 +1 @@ +typedef unsigned long __jmp_buf[6]; \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/shm.h b/lib/libc/include/x86-linux-musl/bits/shm.h new file mode 100644 index 0000000000..1ecb03ca0e --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/shm.h @@ -0,0 +1,31 @@ +#define SHMLBA 4096 + +struct shmid_ds { + struct ipc_perm shm_perm; + size_t shm_segsz; + unsigned long __shm_atime_lo; + unsigned long __shm_atime_hi; + unsigned long __shm_dtime_lo; + unsigned long __shm_dtime_hi; + unsigned long __shm_ctime_lo; + unsigned long __shm_ctime_hi; + pid_t shm_cpid; + pid_t shm_lpid; + unsigned long shm_nattch; + unsigned long __pad1; + unsigned long __pad2; + unsigned long __pad3; + time_t shm_atime; + time_t shm_dtime; + time_t shm_ctime; +}; + +struct shminfo { + unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; +}; + +struct shm_info { + int __used_ids; + unsigned long shm_tot, shm_rss, shm_swp; + unsigned long __swap_attempts, __swap_successes; +}; \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/signal.h b/lib/libc/include/x86-linux-musl/bits/signal.h new file mode 100644 index 0000000000..1e521986b4 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/signal.h @@ -0,0 +1,141 @@ +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define MINSIGSTKSZ 2048 +#define SIGSTKSZ 8192 +#endif + +#ifdef _GNU_SOURCE +enum { REG_GS = 0 }; +#define REG_GS REG_GS +enum { REG_FS = 1 }; +#define REG_FS REG_FS +enum { REG_ES = 2 }; +#define REG_ES REG_ES +enum { REG_DS = 3 }; +#define REG_DS REG_DS +enum { REG_EDI = 4 }; +#define REG_EDI REG_EDI +enum { REG_ESI = 5 }; +#define REG_ESI REG_ESI +enum { REG_EBP = 6 }; +#define REG_EBP REG_EBP +enum { REG_ESP = 7 }; +#define REG_ESP REG_ESP +enum { REG_EBX = 8 }; +#define REG_EBX REG_EBX +enum { REG_EDX = 9 }; +#define REG_EDX REG_EDX +enum { REG_ECX = 10 }; +#define REG_ECX REG_ECX +enum { REG_EAX = 11 }; +#define REG_EAX REG_EAX +enum { REG_TRAPNO = 12 }; +#define REG_TRAPNO REG_TRAPNO +enum { REG_ERR = 13 }; +#define REG_ERR REG_ERR +enum { REG_EIP = 14 }; +#define REG_EIP REG_EIP +enum { REG_CS = 15 }; +#define REG_CS REG_CS +enum { REG_EFL = 16 }; +#define REG_EFL REG_EFL +enum { REG_UESP = 17 }; +#define REG_UESP REG_UESP +enum { REG_SS = 18 }; +#define REG_SS REG_SS +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +typedef int greg_t, gregset_t[19]; +typedef struct _fpstate { + unsigned long cw, sw, tag, ipoff, cssel, dataoff, datasel; + struct { + unsigned short significand[4], exponent; + } _st[8]; + unsigned long status; +} *fpregset_t; +struct sigcontext { + unsigned short gs, __gsh, fs, __fsh, es, __esh, ds, __dsh; + unsigned long edi, esi, ebp, esp, ebx, edx, ecx, eax; + unsigned long trapno, err, eip; + unsigned short cs, __csh; + unsigned long eflags, esp_at_signal; + unsigned short ss, __ssh; + struct _fpstate *fpstate; + unsigned long oldmask, cr2; +}; +typedef struct { + gregset_t gregs; + fpregset_t fpregs; + unsigned long oldmask, cr2; +} mcontext_t; +#else +typedef struct { + unsigned __space[22]; +} mcontext_t; +#endif + +struct sigaltstack { + void *ss_sp; + int ss_flags; + size_t ss_size; +}; + +typedef struct __ucontext { + unsigned long uc_flags; + struct __ucontext *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; + unsigned long __fpregs_mem[28]; +} ucontext_t; + +#define SA_NOCLDSTOP 1 +#define SA_NOCLDWAIT 2 +#define SA_SIGINFO 4 +#define SA_ONSTACK 0x08000000 +#define SA_RESTART 0x10000000 +#define SA_NODEFER 0x40000000 +#define SA_RESETHAND 0x80000000 +#define SA_RESTORER 0x04000000 + +#endif + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +#define SIGABRT 6 +#define SIGIOT SIGABRT +#define SIGBUS 7 +#define SIGFPE 8 +#define SIGKILL 9 +#define SIGUSR1 10 +#define SIGSEGV 11 +#define SIGUSR2 12 +#define SIGPIPE 13 +#define SIGALRM 14 +#define SIGTERM 15 +#define SIGSTKFLT 16 +#define SIGCHLD 17 +#define SIGCONT 18 +#define SIGSTOP 19 +#define SIGTSTP 20 +#define SIGTTIN 21 +#define SIGTTOU 22 +#define SIGURG 23 +#define SIGXCPU 24 +#define SIGXFSZ 25 +#define SIGVTALRM 26 +#define SIGPROF 27 +#define SIGWINCH 28 +#define SIGIO 29 +#define SIGPOLL 29 +#define SIGPWR 30 +#define SIGSYS 31 +#define SIGUNUSED SIGSYS + +#define _NSIG 65 \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/stat.h b/lib/libc/include/x86-linux-musl/bits/stat.h new file mode 100644 index 0000000000..3bf02b3756 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/stat.h @@ -0,0 +1,25 @@ +/* copied from kernel definition, but with padding replaced + * by the corresponding correctly-sized userspace types. */ + +struct stat { + dev_t st_dev; + int __st_dev_padding; + long __st_ino_truncated; + mode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + int __st_rdev_padding; + off_t st_size; + blksize_t st_blksize; + blkcnt_t st_blocks; + struct { + long tv_sec; + long tv_nsec; + } __st_atim32, __st_mtim32, __st_ctim32; + ino_t st_ino; + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; +}; \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/stdint.h b/lib/libc/include/x86-linux-musl/bits/stdint.h new file mode 100644 index 0000000000..b70a87dc9d --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/stdint.h @@ -0,0 +1,20 @@ +typedef int32_t int_fast16_t; +typedef int32_t int_fast32_t; +typedef uint32_t uint_fast16_t; +typedef uint32_t uint_fast32_t; + +#define INT_FAST16_MIN INT32_MIN +#define INT_FAST32_MIN INT32_MIN + +#define INT_FAST16_MAX INT32_MAX +#define INT_FAST32_MAX INT32_MAX + +#define UINT_FAST16_MAX UINT32_MAX +#define UINT_FAST32_MAX UINT32_MAX + +#define INTPTR_MIN INT32_MIN +#define INTPTR_MAX INT32_MAX +#define UINTPTR_MAX UINT32_MAX +#define PTRDIFF_MIN INT32_MIN +#define PTRDIFF_MAX INT32_MAX +#define SIZE_MAX UINT32_MAX \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/syscall.h b/lib/libc/include/x86-linux-musl/bits/syscall.h new file mode 100644 index 0000000000..37130cf3f0 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/syscall.h @@ -0,0 +1,875 @@ +#define __NR_restart_syscall 0 +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_waitpid 7 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 +#define __NR_execve 11 +#define __NR_chdir 12 +#define __NR_time 13 +#define __NR_mknod 14 +#define __NR_chmod 15 +#define __NR_lchown 16 +#define __NR_break 17 +#define __NR_oldstat 18 +#define __NR_lseek 19 +#define __NR_getpid 20 +#define __NR_mount 21 +#define __NR_umount 22 +#define __NR_setuid 23 +#define __NR_getuid 24 +#define __NR_stime 25 +#define __NR_ptrace 26 +#define __NR_alarm 27 +#define __NR_oldfstat 28 +#define __NR_pause 29 +#define __NR_utime 30 +#define __NR_stty 31 +#define __NR_gtty 32 +#define __NR_access 33 +#define __NR_nice 34 +#define __NR_ftime 35 +#define __NR_sync 36 +#define __NR_kill 37 +#define __NR_rename 38 +#define __NR_mkdir 39 +#define __NR_rmdir 40 +#define __NR_dup 41 +#define __NR_pipe 42 +#define __NR_times 43 +#define __NR_prof 44 +#define __NR_brk 45 +#define __NR_setgid 46 +#define __NR_getgid 47 +#define __NR_signal 48 +#define __NR_geteuid 49 +#define __NR_getegid 50 +#define __NR_acct 51 +#define __NR_umount2 52 +#define __NR_lock 53 +#define __NR_ioctl 54 +#define __NR_fcntl 55 +#define __NR_mpx 56 +#define __NR_setpgid 57 +#define __NR_ulimit 58 +#define __NR_oldolduname 59 +#define __NR_umask 60 +#define __NR_chroot 61 +#define __NR_ustat 62 +#define __NR_dup2 63 +#define __NR_getppid 64 +#define __NR_getpgrp 65 +#define __NR_setsid 66 +#define __NR_sigaction 67 +#define __NR_sgetmask 68 +#define __NR_ssetmask 69 +#define __NR_setreuid 70 +#define __NR_setregid 71 +#define __NR_sigsuspend 72 +#define __NR_sigpending 73 +#define __NR_sethostname 74 +#define __NR_setrlimit 75 +#define __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */ +#define __NR_getrusage 77 +#define __NR_gettimeofday_time32 78 +#define __NR_settimeofday_time32 79 +#define __NR_getgroups 80 +#define __NR_setgroups 81 +#define __NR_select 82 +#define __NR_symlink 83 +#define __NR_oldlstat 84 +#define __NR_readlink 85 +#define __NR_uselib 86 +#define __NR_swapon 87 +#define __NR_reboot 88 +#define __NR_readdir 89 +#define __NR_mmap 90 +#define __NR_munmap 91 +#define __NR_truncate 92 +#define __NR_ftruncate 93 +#define __NR_fchmod 94 +#define __NR_fchown 95 +#define __NR_getpriority 96 +#define __NR_setpriority 97 +#define __NR_profil 98 +#define __NR_statfs 99 +#define __NR_fstatfs 100 +#define __NR_ioperm 101 +#define __NR_socketcall 102 +#define __NR_syslog 103 +#define __NR_setitimer 104 +#define __NR_getitimer 105 +#define __NR_stat 106 +#define __NR_lstat 107 +#define __NR_fstat 108 +#define __NR_olduname 109 +#define __NR_iopl 110 +#define __NR_vhangup 111 +#define __NR_idle 112 +#define __NR_vm86old 113 +#define __NR_wait4 114 +#define __NR_swapoff 115 +#define __NR_sysinfo 116 +#define __NR_ipc 117 +#define __NR_fsync 118 +#define __NR_sigreturn 119 +#define __NR_clone 120 +#define __NR_setdomainname 121 +#define __NR_uname 122 +#define __NR_modify_ldt 123 +#define __NR_adjtimex 124 +#define __NR_mprotect 125 +#define __NR_sigprocmask 126 +#define __NR_create_module 127 +#define __NR_init_module 128 +#define __NR_delete_module 129 +#define __NR_get_kernel_syms 130 +#define __NR_quotactl 131 +#define __NR_getpgid 132 +#define __NR_fchdir 133 +#define __NR_bdflush 134 +#define __NR_sysfs 135 +#define __NR_personality 136 +#define __NR_afs_syscall 137 +#define __NR_setfsuid 138 +#define __NR_setfsgid 139 +#define __NR__llseek 140 +#define __NR_getdents 141 +#define __NR__newselect 142 +#define __NR_flock 143 +#define __NR_msync 144 +#define __NR_readv 145 +#define __NR_writev 146 +#define __NR_getsid 147 +#define __NR_fdatasync 148 +#define __NR__sysctl 149 +#define __NR_mlock 150 +#define __NR_munlock 151 +#define __NR_mlockall 152 +#define __NR_munlockall 153 +#define __NR_sched_setparam 154 +#define __NR_sched_getparam 155 +#define __NR_sched_setscheduler 156 +#define __NR_sched_getscheduler 157 +#define __NR_sched_yield 158 +#define __NR_sched_get_priority_max 159 +#define __NR_sched_get_priority_min 160 +#define __NR_sched_rr_get_interval 161 +#define __NR_nanosleep 162 +#define __NR_mremap 163 +#define __NR_setresuid 164 +#define __NR_getresuid 165 +#define __NR_vm86 166 +#define __NR_query_module 167 +#define __NR_poll 168 +#define __NR_nfsservctl 169 +#define __NR_setresgid 170 +#define __NR_getresgid 171 +#define __NR_prctl 172 +#define __NR_rt_sigreturn 173 +#define __NR_rt_sigaction 174 +#define __NR_rt_sigprocmask 175 +#define __NR_rt_sigpending 176 +#define __NR_rt_sigtimedwait 177 +#define __NR_rt_sigqueueinfo 178 +#define __NR_rt_sigsuspend 179 +#define __NR_pread64 180 +#define __NR_pwrite64 181 +#define __NR_chown 182 +#define __NR_getcwd 183 +#define __NR_capget 184 +#define __NR_capset 185 +#define __NR_sigaltstack 186 +#define __NR_sendfile 187 +#define __NR_getpmsg 188 +#define __NR_putpmsg 189 +#define __NR_vfork 190 +#define __NR_ugetrlimit 191 +#define __NR_mmap2 192 +#define __NR_truncate64 193 +#define __NR_ftruncate64 194 +#define __NR_stat64 195 +#define __NR_lstat64 196 +#define __NR_fstat64 197 +#define __NR_lchown32 198 +#define __NR_getuid32 199 +#define __NR_getgid32 200 +#define __NR_geteuid32 201 +#define __NR_getegid32 202 +#define __NR_setreuid32 203 +#define __NR_setregid32 204 +#define __NR_getgroups32 205 +#define __NR_setgroups32 206 +#define __NR_fchown32 207 +#define __NR_setresuid32 208 +#define __NR_getresuid32 209 +#define __NR_setresgid32 210 +#define __NR_getresgid32 211 +#define __NR_chown32 212 +#define __NR_setuid32 213 +#define __NR_setgid32 214 +#define __NR_setfsuid32 215 +#define __NR_setfsgid32 216 +#define __NR_pivot_root 217 +#define __NR_mincore 218 +#define __NR_madvise 219 +#define __NR_getdents64 220 +#define __NR_fcntl64 221 +/* 223 is unused */ +#define __NR_gettid 224 +#define __NR_readahead 225 +#define __NR_setxattr 226 +#define __NR_lsetxattr 227 +#define __NR_fsetxattr 228 +#define __NR_getxattr 229 +#define __NR_lgetxattr 230 +#define __NR_fgetxattr 231 +#define __NR_listxattr 232 +#define __NR_llistxattr 233 +#define __NR_flistxattr 234 +#define __NR_removexattr 235 +#define __NR_lremovexattr 236 +#define __NR_fremovexattr 237 +#define __NR_tkill 238 +#define __NR_sendfile64 239 +#define __NR_futex 240 +#define __NR_sched_setaffinity 241 +#define __NR_sched_getaffinity 242 +#define __NR_set_thread_area 243 +#define __NR_get_thread_area 244 +#define __NR_io_setup 245 +#define __NR_io_destroy 246 +#define __NR_io_getevents 247 +#define __NR_io_submit 248 +#define __NR_io_cancel 249 +#define __NR_fadvise64 250 +/* 251 is available for reuse (was briefly sys_set_zone_reclaim) */ +#define __NR_exit_group 252 +#define __NR_lookup_dcookie 253 +#define __NR_epoll_create 254 +#define __NR_epoll_ctl 255 +#define __NR_epoll_wait 256 +#define __NR_remap_file_pages 257 +#define __NR_set_tid_address 258 +#define __NR_timer_create 259 +#define __NR_timer_settime32 (__NR_timer_create+1) +#define __NR_timer_gettime32 (__NR_timer_create+2) +#define __NR_timer_getoverrun (__NR_timer_create+3) +#define __NR_timer_delete (__NR_timer_create+4) +#define __NR_clock_settime32 (__NR_timer_create+5) +#define __NR_clock_gettime32 (__NR_timer_create+6) +#define __NR_clock_getres_time32 (__NR_timer_create+7) +#define __NR_clock_nanosleep_time32 (__NR_timer_create+8) +#define __NR_statfs64 268 +#define __NR_fstatfs64 269 +#define __NR_tgkill 270 +#define __NR_utimes 271 +#define __NR_fadvise64_64 272 +#define __NR_vserver 273 +#define __NR_mbind 274 +#define __NR_get_mempolicy 275 +#define __NR_set_mempolicy 276 +#define __NR_mq_open 277 +#define __NR_mq_unlink (__NR_mq_open+1) +#define __NR_mq_timedsend (__NR_mq_open+2) +#define __NR_mq_timedreceive (__NR_mq_open+3) +#define __NR_mq_notify (__NR_mq_open+4) +#define __NR_mq_getsetattr (__NR_mq_open+5) +#define __NR_kexec_load 283 +#define __NR_waitid 284 +/* #define __NR_sys_setaltroot 285 */ +#define __NR_add_key 286 +#define __NR_request_key 287 +#define __NR_keyctl 288 +#define __NR_ioprio_set 289 +#define __NR_ioprio_get 290 +#define __NR_inotify_init 291 +#define __NR_inotify_add_watch 292 +#define __NR_inotify_rm_watch 293 +#define __NR_migrate_pages 294 +#define __NR_openat 295 +#define __NR_mkdirat 296 +#define __NR_mknodat 297 +#define __NR_fchownat 298 +#define __NR_futimesat 299 +#define __NR_fstatat64 300 +#define __NR_unlinkat 301 +#define __NR_renameat 302 +#define __NR_linkat 303 +#define __NR_symlinkat 304 +#define __NR_readlinkat 305 +#define __NR_fchmodat 306 +#define __NR_faccessat 307 +#define __NR_pselect6 308 +#define __NR_ppoll 309 +#define __NR_unshare 310 +#define __NR_set_robust_list 311 +#define __NR_get_robust_list 312 +#define __NR_splice 313 +#define __NR_sync_file_range 314 +#define __NR_tee 315 +#define __NR_vmsplice 316 +#define __NR_move_pages 317 +#define __NR_getcpu 318 +#define __NR_epoll_pwait 319 +#define __NR_utimensat 320 +#define __NR_signalfd 321 +#define __NR_timerfd_create 322 +#define __NR_eventfd 323 +#define __NR_fallocate 324 +#define __NR_timerfd_settime32 325 +#define __NR_timerfd_gettime32 326 +#define __NR_signalfd4 327 +#define __NR_eventfd2 328 +#define __NR_epoll_create1 329 +#define __NR_dup3 330 +#define __NR_pipe2 331 +#define __NR_inotify_init1 332 +#define __NR_preadv 333 +#define __NR_pwritev 334 +#define __NR_rt_tgsigqueueinfo 335 +#define __NR_perf_event_open 336 +#define __NR_recvmmsg 337 +#define __NR_fanotify_init 338 +#define __NR_fanotify_mark 339 +#define __NR_prlimit64 340 +#define __NR_name_to_handle_at 341 +#define __NR_open_by_handle_at 342 +#define __NR_clock_adjtime 343 +#define __NR_syncfs 344 +#define __NR_sendmmsg 345 +#define __NR_setns 346 +#define __NR_process_vm_readv 347 +#define __NR_process_vm_writev 348 +#define __NR_kcmp 349 +#define __NR_finit_module 350 +#define __NR_sched_setattr 351 +#define __NR_sched_getattr 352 +#define __NR_renameat2 353 +#define __NR_seccomp 354 +#define __NR_getrandom 355 +#define __NR_memfd_create 356 +#define __NR_bpf 357 +#define __NR_execveat 358 +#define __NR_socket 359 +#define __NR_socketpair 360 +#define __NR_bind 361 +#define __NR_connect 362 +#define __NR_listen 363 +#define __NR_accept4 364 +#define __NR_getsockopt 365 +#define __NR_setsockopt 366 +#define __NR_getsockname 367 +#define __NR_getpeername 368 +#define __NR_sendto 369 +#define __NR_sendmsg 370 +#define __NR_recvfrom 371 +#define __NR_recvmsg 372 +#define __NR_shutdown 373 +#define __NR_userfaultfd 374 +#define __NR_membarrier 375 +#define __NR_mlock2 376 +#define __NR_copy_file_range 377 +#define __NR_preadv2 378 +#define __NR_pwritev2 379 +#define __NR_pkey_mprotect 380 +#define __NR_pkey_alloc 381 +#define __NR_pkey_free 382 +#define __NR_statx 383 +#define __NR_arch_prctl 384 +#define __NR_io_pgetevents 385 +#define __NR_rseq 386 +#define __NR_semget 393 +#define __NR_semctl 394 +#define __NR_shmget 395 +#define __NR_shmctl 396 +#define __NR_shmat 397 +#define __NR_shmdt 398 +#define __NR_msgget 399 +#define __NR_msgsnd 400 +#define __NR_msgrcv 401 +#define __NR_msgctl 402 +#define __NR_clock_gettime64 403 +#define __NR_clock_settime64 404 +#define __NR_clock_adjtime64 405 +#define __NR_clock_getres_time64 406 +#define __NR_clock_nanosleep_time64 407 +#define __NR_timer_gettime64 408 +#define __NR_timer_settime64 409 +#define __NR_timerfd_gettime64 410 +#define __NR_timerfd_settime64 411 +#define __NR_utimensat_time64 412 +#define __NR_pselect6_time64 413 +#define __NR_ppoll_time64 414 +#define __NR_io_pgetevents_time64 416 +#define __NR_recvmmsg_time64 417 +#define __NR_mq_timedsend_time64 418 +#define __NR_mq_timedreceive_time64 419 +#define __NR_semtimedop_time64 420 +#define __NR_rt_sigtimedwait_time64 421 +#define __NR_futex_time64 422 +#define __NR_sched_rr_get_interval_time64 423 +#define __NR_pidfd_send_signal 424 +#define __NR_io_uring_setup 425 +#define __NR_io_uring_enter 426 +#define __NR_io_uring_register 427 +#define __NR_open_tree 428 +#define __NR_move_mount 429 +#define __NR_fsopen 430 +#define __NR_fsconfig 431 +#define __NR_fsmount 432 +#define __NR_fspick 433 +#define __NR_pidfd_open 434 +#define __NR_clone3 435 +#define __NR_close_range 436 +#define __NR_openat2 437 +#define __NR_pidfd_getfd 438 +#define __NR_faccessat2 439 +#define __NR_process_madvise 440 +#define __NR_epoll_pwait2 441 +#define __NR_mount_setattr 442 +#define __NR_landlock_create_ruleset 444 +#define __NR_landlock_add_rule 445 +#define __NR_landlock_restrict_self 446 + +#define SYS_restart_syscall 0 +#define SYS_exit 1 +#define SYS_fork 2 +#define SYS_read 3 +#define SYS_write 4 +#define SYS_open 5 +#define SYS_close 6 +#define SYS_waitpid 7 +#define SYS_creat 8 +#define SYS_link 9 +#define SYS_unlink 10 +#define SYS_execve 11 +#define SYS_chdir 12 +#define SYS_time 13 +#define SYS_mknod 14 +#define SYS_chmod 15 +#define SYS_lchown 16 +#define SYS_break 17 +#define SYS_oldstat 18 +#define SYS_lseek 19 +#define SYS_getpid 20 +#define SYS_mount 21 +#define SYS_umount 22 +#define SYS_setuid 23 +#define SYS_getuid 24 +#define SYS_stime 25 +#define SYS_ptrace 26 +#define SYS_alarm 27 +#define SYS_oldfstat 28 +#define SYS_pause 29 +#define SYS_utime 30 +#define SYS_stty 31 +#define SYS_gtty 32 +#define SYS_access 33 +#define SYS_nice 34 +#define SYS_ftime 35 +#define SYS_sync 36 +#define SYS_kill 37 +#define SYS_rename 38 +#define SYS_mkdir 39 +#define SYS_rmdir 40 +#define SYS_dup 41 +#define SYS_pipe 42 +#define SYS_times 43 +#define SYS_prof 44 +#define SYS_brk 45 +#define SYS_setgid 46 +#define SYS_getgid 47 +#define SYS_signal 48 +#define SYS_geteuid 49 +#define SYS_getegid 50 +#define SYS_acct 51 +#define SYS_umount2 52 +#define SYS_lock 53 +#define SYS_ioctl 54 +#define SYS_fcntl 55 +#define SYS_mpx 56 +#define SYS_setpgid 57 +#define SYS_ulimit 58 +#define SYS_oldolduname 59 +#define SYS_umask 60 +#define SYS_chroot 61 +#define SYS_ustat 62 +#define SYS_dup2 63 +#define SYS_getppid 64 +#define SYS_getpgrp 65 +#define SYS_setsid 66 +#define SYS_sigaction 67 +#define SYS_sgetmask 68 +#define SYS_ssetmask 69 +#define SYS_setreuid 70 +#define SYS_setregid 71 +#define SYS_sigsuspend 72 +#define SYS_sigpending 73 +#define SYS_sethostname 74 +#define SYS_setrlimit 75 +#define SYS_getrlimit 76 /* Back compatible 2Gig limited rlimit */ +#define SYS_getrusage 77 +#define SYS_gettimeofday_time32 78 +#define SYS_settimeofday_time32 79 +#define SYS_getgroups 80 +#define SYS_setgroups 81 +#define SYS_select 82 +#define SYS_symlink 83 +#define SYS_oldlstat 84 +#define SYS_readlink 85 +#define SYS_uselib 86 +#define SYS_swapon 87 +#define SYS_reboot 88 +#define SYS_readdir 89 +#define SYS_mmap 90 +#define SYS_munmap 91 +#define SYS_truncate 92 +#define SYS_ftruncate 93 +#define SYS_fchmod 94 +#define SYS_fchown 95 +#define SYS_getpriority 96 +#define SYS_setpriority 97 +#define SYS_profil 98 +#define SYS_statfs 99 +#define SYS_fstatfs 100 +#define SYS_ioperm 101 +#define SYS_socketcall 102 +#define SYS_syslog 103 +#define SYS_setitimer 104 +#define SYS_getitimer 105 +#define SYS_stat 106 +#define SYS_lstat 107 +#define SYS_fstat 108 +#define SYS_olduname 109 +#define SYS_iopl 110 +#define SYS_vhangup 111 +#define SYS_idle 112 +#define SYS_vm86old 113 +#define SYS_wait4 114 +#define SYS_swapoff 115 +#define SYS_sysinfo 116 +#define SYS_ipc 117 +#define SYS_fsync 118 +#define SYS_sigreturn 119 +#define SYS_clone 120 +#define SYS_setdomainname 121 +#define SYS_uname 122 +#define SYS_modify_ldt 123 +#define SYS_adjtimex 124 +#define SYS_mprotect 125 +#define SYS_sigprocmask 126 +#define SYS_create_module 127 +#define SYS_init_module 128 +#define SYS_delete_module 129 +#define SYS_get_kernel_syms 130 +#define SYS_quotactl 131 +#define SYS_getpgid 132 +#define SYS_fchdir 133 +#define SYS_bdflush 134 +#define SYS_sysfs 135 +#define SYS_personality 136 +#define SYS_afs_syscall 137 +#define SYS_setfsuid 138 +#define SYS_setfsgid 139 +#define SYS__llseek 140 +#define SYS_getdents 141 +#define SYS__newselect 142 +#define SYS_flock 143 +#define SYS_msync 144 +#define SYS_readv 145 +#define SYS_writev 146 +#define SYS_getsid 147 +#define SYS_fdatasync 148 +#define SYS__sysctl 149 +#define SYS_mlock 150 +#define SYS_munlock 151 +#define SYS_mlockall 152 +#define SYS_munlockall 153 +#define SYS_sched_setparam 154 +#define SYS_sched_getparam 155 +#define SYS_sched_setscheduler 156 +#define SYS_sched_getscheduler 157 +#define SYS_sched_yield 158 +#define SYS_sched_get_priority_max 159 +#define SYS_sched_get_priority_min 160 +#define SYS_sched_rr_get_interval 161 +#define SYS_nanosleep 162 +#define SYS_mremap 163 +#define SYS_setresuid 164 +#define SYS_getresuid 165 +#define SYS_vm86 166 +#define SYS_query_module 167 +#define SYS_poll 168 +#define SYS_nfsservctl 169 +#define SYS_setresgid 170 +#define SYS_getresgid 171 +#define SYS_prctl 172 +#define SYS_rt_sigreturn 173 +#define SYS_rt_sigaction 174 +#define SYS_rt_sigprocmask 175 +#define SYS_rt_sigpending 176 +#define SYS_rt_sigtimedwait 177 +#define SYS_rt_sigqueueinfo 178 +#define SYS_rt_sigsuspend 179 +#define SYS_pread64 180 +#define SYS_pwrite64 181 +#define SYS_chown 182 +#define SYS_getcwd 183 +#define SYS_capget 184 +#define SYS_capset 185 +#define SYS_sigaltstack 186 +#define SYS_sendfile 187 +#define SYS_getpmsg 188 +#define SYS_putpmsg 189 +#define SYS_vfork 190 +#define SYS_ugetrlimit 191 +#define SYS_mmap2 192 +#define SYS_truncate64 193 +#define SYS_ftruncate64 194 +#define SYS_stat64 195 +#define SYS_lstat64 196 +#define SYS_fstat64 197 +#define SYS_lchown32 198 +#define SYS_getuid32 199 +#define SYS_getgid32 200 +#define SYS_geteuid32 201 +#define SYS_getegid32 202 +#define SYS_setreuid32 203 +#define SYS_setregid32 204 +#define SYS_getgroups32 205 +#define SYS_setgroups32 206 +#define SYS_fchown32 207 +#define SYS_setresuid32 208 +#define SYS_getresuid32 209 +#define SYS_setresgid32 210 +#define SYS_getresgid32 211 +#define SYS_chown32 212 +#define SYS_setuid32 213 +#define SYS_setgid32 214 +#define SYS_setfsuid32 215 +#define SYS_setfsgid32 216 +#define SYS_pivot_root 217 +#define SYS_mincore 218 +#define SYS_madvise 219 +#define SYS_getdents64 220 +#define SYS_fcntl64 221 +#define SYS_gettid 224 +#define SYS_readahead 225 +#define SYS_setxattr 226 +#define SYS_lsetxattr 227 +#define SYS_fsetxattr 228 +#define SYS_getxattr 229 +#define SYS_lgetxattr 230 +#define SYS_fgetxattr 231 +#define SYS_listxattr 232 +#define SYS_llistxattr 233 +#define SYS_flistxattr 234 +#define SYS_removexattr 235 +#define SYS_lremovexattr 236 +#define SYS_fremovexattr 237 +#define SYS_tkill 238 +#define SYS_sendfile64 239 +#define SYS_futex 240 +#define SYS_sched_setaffinity 241 +#define SYS_sched_getaffinity 242 +#define SYS_set_thread_area 243 +#define SYS_get_thread_area 244 +#define SYS_io_setup 245 +#define SYS_io_destroy 246 +#define SYS_io_getevents 247 +#define SYS_io_submit 248 +#define SYS_io_cancel 249 +#define SYS_fadvise64 250 +#define SYS_exit_group 252 +#define SYS_lookup_dcookie 253 +#define SYS_epoll_create 254 +#define SYS_epoll_ctl 255 +#define SYS_epoll_wait 256 +#define SYS_remap_file_pages 257 +#define SYS_set_tid_address 258 +#define SYS_timer_create 259 +#define SYS_timer_settime32 (__NR_timer_create+1) +#define SYS_timer_gettime32 (__NR_timer_create+2) +#define SYS_timer_getoverrun (__NR_timer_create+3) +#define SYS_timer_delete (__NR_timer_create+4) +#define SYS_clock_settime32 (__NR_timer_create+5) +#define SYS_clock_gettime32 (__NR_timer_create+6) +#define SYS_clock_getres_time32 (__NR_timer_create+7) +#define SYS_clock_nanosleep_time32 (__NR_timer_create+8) +#define SYS_statfs64 268 +#define SYS_fstatfs64 269 +#define SYS_tgkill 270 +#define SYS_utimes 271 +#define SYS_fadvise64_64 272 +#define SYS_vserver 273 +#define SYS_mbind 274 +#define SYS_get_mempolicy 275 +#define SYS_set_mempolicy 276 +#define SYS_mq_open 277 +#define SYS_mq_unlink (__NR_mq_open+1) +#define SYS_mq_timedsend (__NR_mq_open+2) +#define SYS_mq_timedreceive (__NR_mq_open+3) +#define SYS_mq_notify (__NR_mq_open+4) +#define SYS_mq_getsetattr (__NR_mq_open+5) +#define SYS_kexec_load 283 +#define SYS_waitid 284 +/* #define SYS_sys_setaltroot 285 */ +#define SYS_add_key 286 +#define SYS_request_key 287 +#define SYS_keyctl 288 +#define SYS_ioprio_set 289 +#define SYS_ioprio_get 290 +#define SYS_inotify_init 291 +#define SYS_inotify_add_watch 292 +#define SYS_inotify_rm_watch 293 +#define SYS_migrate_pages 294 +#define SYS_openat 295 +#define SYS_mkdirat 296 +#define SYS_mknodat 297 +#define SYS_fchownat 298 +#define SYS_futimesat 299 +#define SYS_fstatat64 300 +#define SYS_unlinkat 301 +#define SYS_renameat 302 +#define SYS_linkat 303 +#define SYS_symlinkat 304 +#define SYS_readlinkat 305 +#define SYS_fchmodat 306 +#define SYS_faccessat 307 +#define SYS_pselect6 308 +#define SYS_ppoll 309 +#define SYS_unshare 310 +#define SYS_set_robust_list 311 +#define SYS_get_robust_list 312 +#define SYS_splice 313 +#define SYS_sync_file_range 314 +#define SYS_tee 315 +#define SYS_vmsplice 316 +#define SYS_move_pages 317 +#define SYS_getcpu 318 +#define SYS_epoll_pwait 319 +#define SYS_utimensat 320 +#define SYS_signalfd 321 +#define SYS_timerfd_create 322 +#define SYS_eventfd 323 +#define SYS_fallocate 324 +#define SYS_timerfd_settime32 325 +#define SYS_timerfd_gettime32 326 +#define SYS_signalfd4 327 +#define SYS_eventfd2 328 +#define SYS_epoll_create1 329 +#define SYS_dup3 330 +#define SYS_pipe2 331 +#define SYS_inotify_init1 332 +#define SYS_preadv 333 +#define SYS_pwritev 334 +#define SYS_rt_tgsigqueueinfo 335 +#define SYS_perf_event_open 336 +#define SYS_recvmmsg 337 +#define SYS_fanotify_init 338 +#define SYS_fanotify_mark 339 +#define SYS_prlimit64 340 +#define SYS_name_to_handle_at 341 +#define SYS_open_by_handle_at 342 +#define SYS_clock_adjtime 343 +#define SYS_syncfs 344 +#define SYS_sendmmsg 345 +#define SYS_setns 346 +#define SYS_process_vm_readv 347 +#define SYS_process_vm_writev 348 +#define SYS_kcmp 349 +#define SYS_finit_module 350 +#define SYS_sched_setattr 351 +#define SYS_sched_getattr 352 +#define SYS_renameat2 353 +#define SYS_seccomp 354 +#define SYS_getrandom 355 +#define SYS_memfd_create 356 +#define SYS_bpf 357 +#define SYS_execveat 358 +#define SYS_socket 359 +#define SYS_socketpair 360 +#define SYS_bind 361 +#define SYS_connect 362 +#define SYS_listen 363 +#define SYS_accept4 364 +#define SYS_getsockopt 365 +#define SYS_setsockopt 366 +#define SYS_getsockname 367 +#define SYS_getpeername 368 +#define SYS_sendto 369 +#define SYS_sendmsg 370 +#define SYS_recvfrom 371 +#define SYS_recvmsg 372 +#define SYS_shutdown 373 +#define SYS_userfaultfd 374 +#define SYS_membarrier 375 +#define SYS_mlock2 376 +#define SYS_copy_file_range 377 +#define SYS_preadv2 378 +#define SYS_pwritev2 379 +#define SYS_pkey_mprotect 380 +#define SYS_pkey_alloc 381 +#define SYS_pkey_free 382 +#define SYS_statx 383 +#define SYS_arch_prctl 384 +#define SYS_io_pgetevents 385 +#define SYS_rseq 386 +#define SYS_semget 393 +#define SYS_semctl 394 +#define SYS_shmget 395 +#define SYS_shmctl 396 +#define SYS_shmat 397 +#define SYS_shmdt 398 +#define SYS_msgget 399 +#define SYS_msgsnd 400 +#define SYS_msgrcv 401 +#define SYS_msgctl 402 +#define SYS_clock_gettime64 403 +#define SYS_clock_settime64 404 +#define SYS_clock_adjtime64 405 +#define SYS_clock_getres_time64 406 +#define SYS_clock_nanosleep_time64 407 +#define SYS_timer_gettime64 408 +#define SYS_timer_settime64 409 +#define SYS_timerfd_gettime64 410 +#define SYS_timerfd_settime64 411 +#define SYS_utimensat_time64 412 +#define SYS_pselect6_time64 413 +#define SYS_ppoll_time64 414 +#define SYS_io_pgetevents_time64 416 +#define SYS_recvmmsg_time64 417 +#define SYS_mq_timedsend_time64 418 +#define SYS_mq_timedreceive_time64 419 +#define SYS_semtimedop_time64 420 +#define SYS_rt_sigtimedwait_time64 421 +#define SYS_futex_time64 422 +#define SYS_sched_rr_get_interval_time64 423 +#define SYS_pidfd_send_signal 424 +#define SYS_io_uring_setup 425 +#define SYS_io_uring_enter 426 +#define SYS_io_uring_register 427 +#define SYS_open_tree 428 +#define SYS_move_mount 429 +#define SYS_fsopen 430 +#define SYS_fsconfig 431 +#define SYS_fsmount 432 +#define SYS_fspick 433 +#define SYS_pidfd_open 434 +#define SYS_clone3 435 +#define SYS_close_range 436 +#define SYS_openat2 437 +#define SYS_pidfd_getfd 438 +#define SYS_faccessat2 439 +#define SYS_process_madvise 440 +#define SYS_epoll_pwait2 441 +#define SYS_mount_setattr 442 +#define SYS_landlock_create_ruleset 444 +#define SYS_landlock_add_rule 445 +#define SYS_landlock_restrict_self 446 \ No newline at end of file diff --git a/lib/libc/include/x86-linux-musl/bits/user.h b/lib/libc/include/x86-linux-musl/bits/user.h new file mode 100644 index 0000000000..834532d4e3 --- /dev/null +++ b/lib/libc/include/x86-linux-musl/bits/user.h @@ -0,0 +1,44 @@ +#undef __WORDSIZE +#define __WORDSIZE 32 + +typedef struct user_fpregs_struct { + long cwd, swd, twd, fip, fcs, foo, fos, st_space[20]; +} elf_fpregset_t; + +typedef struct user_fpxregs_struct { + unsigned short cwd, swd, twd, fop; + long fip, fcs, foo, fos, mxcsr, reserved; + long st_space[32], xmm_space[32], padding[56]; +} elf_fpxregset_t; + +struct user_regs_struct { + long ebx, ecx, edx, esi, edi, ebp, eax, xds, xes, xfs, xgs; + long orig_eax, eip, xcs, eflags, esp, xss; +}; + +#define ELF_NGREG 17 +typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; + +struct user { + struct user_regs_struct regs; + int u_fpvalid; + struct user_fpregs_struct i387; + unsigned long u_tsize; + unsigned long u_dsize; + unsigned long u_ssize; + unsigned long start_code; + unsigned long start_stack; + long signal; + int reserved; + struct user_regs_struct *u_ar0; + struct user_fpregs_struct *u_fpstate; + unsigned long magic; + char u_comm[32]; + int u_debugreg[8]; +}; + +#define PAGE_MASK (~(PAGESIZE-1)) +#define NBPG PAGESIZE +#define UPAGES 1 +#define HOST_TEXT_START_ADDR (u.start_code) +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) \ No newline at end of file -- cgit v1.2.3 From a5d8c310eef494594ae29a2319a5baf496c3434f Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 19 Jun 2023 14:22:17 -0700 Subject: musl: update src files to v1.2.4 --- lib/libc/musl/arch/arm/syscall_arch.h | 7 + lib/libc/musl/arch/i386/arch.mak | 1 - lib/libc/musl/arch/m68k/arch.mak | 1 - lib/libc/musl/arch/mips/arch.mak | 1 - lib/libc/musl/arch/mips/bits/signal.h | 1 - lib/libc/musl/arch/mips/ksigaction.h | 5 +- lib/libc/musl/arch/mips/reloc.h | 1 + lib/libc/musl/arch/mips64/bits/signal.h | 1 - lib/libc/musl/arch/mips64/ksigaction.h | 2 +- lib/libc/musl/arch/mips64/reloc.h | 1 + lib/libc/musl/arch/powerpc/arch.mak | 1 - lib/libc/musl/arch/riscv64/bits/signal.h | 1 - lib/libc/musl/compat/time32/__xstat.c | 8 +- lib/libc/musl/compat/time32/aio_suspend_time32.c | 2 - lib/libc/musl/compat/time32/fstat_time32.c | 2 - lib/libc/musl/compat/time32/fstatat_time32.c | 2 - lib/libc/musl/compat/time32/lstat_time32.c | 2 - lib/libc/musl/compat/time32/stat_time32.c | 2 - lib/libc/musl/include/aio.h | 2 +- lib/libc/musl/include/arpa/nameser.h | 71 +++++++++ lib/libc/musl/include/dirent.h | 2 +- lib/libc/musl/include/elf.h | 9 +- lib/libc/musl/include/fcntl.h | 2 +- lib/libc/musl/include/ftw.h | 2 +- lib/libc/musl/include/glob.h | 2 +- lib/libc/musl/include/netdb.h | 1 + lib/libc/musl/include/sched.h | 2 +- lib/libc/musl/include/stdio.h | 2 +- lib/libc/musl/include/stdlib.h | 4 +- lib/libc/musl/include/string.h | 2 +- lib/libc/musl/include/strings.h | 1 + lib/libc/musl/include/sys/mman.h | 2 +- lib/libc/musl/include/sys/resource.h | 2 +- lib/libc/musl/include/sys/sendfile.h | 2 +- lib/libc/musl/include/sys/stat.h | 2 +- lib/libc/musl/include/sys/statfs.h | 2 +- lib/libc/musl/include/sys/statvfs.h | 2 +- lib/libc/musl/include/sys/types.h | 2 +- lib/libc/musl/include/sys/uio.h | 2 +- lib/libc/musl/include/sys/wait.h | 2 +- lib/libc/musl/include/unistd.h | 6 +- lib/libc/musl/src/aio/aio.c | 32 ++-- lib/libc/musl/src/aio/aio_suspend.c | 6 +- lib/libc/musl/src/aio/lio_listio.c | 2 - lib/libc/musl/src/conf/confstr.c | 2 +- lib/libc/musl/src/conf/sysconf.c | 13 ++ lib/libc/musl/src/dirent/alphasort.c | 2 - lib/libc/musl/src/dirent/readdir.c | 2 - lib/libc/musl/src/dirent/readdir_r.c | 2 - lib/libc/musl/src/dirent/scandir.c | 2 - lib/libc/musl/src/dirent/versionsort.c | 3 - lib/libc/musl/src/fcntl/creat.c | 2 - lib/libc/musl/src/fcntl/open.c | 2 - lib/libc/musl/src/fcntl/openat.c | 2 - lib/libc/musl/src/fcntl/posix_fadvise.c | 2 - lib/libc/musl/src/fcntl/posix_fallocate.c | 2 - lib/libc/musl/src/include/sys/stat.h | 9 ++ lib/libc/musl/src/internal/dynlink.h | 6 +- lib/libc/musl/src/internal/fork_impl.h | 2 +- lib/libc/musl/src/internal/ksigaction.h | 5 + lib/libc/musl/src/internal/syscall.h | 26 ++-- lib/libc/musl/src/internal/version.h | 2 +- lib/libc/musl/src/ipc/semtimedop.c | 3 +- lib/libc/musl/src/ldso/dlerror.c | 34 +++-- lib/libc/musl/src/legacy/ftw.c | 2 - lib/libc/musl/src/linux/epoll.c | 1 + lib/libc/musl/src/linux/fallocate.c | 3 - lib/libc/musl/src/linux/getdents.c | 2 - lib/libc/musl/src/linux/membarrier.c | 2 +- lib/libc/musl/src/linux/prlimit.c | 3 - lib/libc/musl/src/linux/sendfile.c | 2 - lib/libc/musl/src/linux/wait4.c | 2 +- lib/libc/musl/src/malloc/mallocng/free.c | 2 +- lib/libc/musl/src/malloc/mallocng/glue.h | 2 + lib/libc/musl/src/math/logf.c | 2 +- lib/libc/musl/src/misc/getopt.c | 3 +- lib/libc/musl/src/misc/getrlimit.c | 8 +- lib/libc/musl/src/misc/lockf.c | 2 - lib/libc/musl/src/misc/mntent.c | 12 +- lib/libc/musl/src/misc/nftw.c | 6 +- lib/libc/musl/src/misc/setrlimit.c | 8 +- lib/libc/musl/src/mman/mmap.c | 2 - lib/libc/musl/src/mq/mq_notify.c | 47 ++++-- lib/libc/musl/src/network/accept4.c | 4 + lib/libc/musl/src/network/dns_parse.c | 10 +- lib/libc/musl/src/network/gai_strerror.c | 2 +- lib/libc/musl/src/network/getaddrinfo.c | 7 +- lib/libc/musl/src/network/gethostbyaddr.c | 2 +- lib/libc/musl/src/network/gethostbyaddr_r.c | 5 +- lib/libc/musl/src/network/gethostbyname2.c | 2 +- lib/libc/musl/src/network/gethostbyname2_r.c | 6 +- lib/libc/musl/src/network/getifaddrs.c | 14 +- lib/libc/musl/src/network/getnameinfo.c | 5 +- lib/libc/musl/src/network/getservbyport_r.c | 4 +- lib/libc/musl/src/network/inet_pton.c | 1 + lib/libc/musl/src/network/lookup.h | 2 +- lib/libc/musl/src/network/lookup_ipliteral.c | 4 +- lib/libc/musl/src/network/lookup_name.c | 50 ++++--- lib/libc/musl/src/network/netlink.h | 2 +- lib/libc/musl/src/network/res_mkquery.c | 1 + lib/libc/musl/src/network/res_msend.c | 183 ++++++++++++++++++++--- lib/libc/musl/src/network/res_send.c | 10 +- lib/libc/musl/src/network/sendmsg.c | 7 +- lib/libc/musl/src/process/_Fork.c | 3 +- lib/libc/musl/src/process/aarch64/vfork.s | 9 ++ lib/libc/musl/src/process/fork.c | 8 +- lib/libc/musl/src/process/riscv64/vfork.s | 12 ++ lib/libc/musl/src/regex/glob.c | 3 - lib/libc/musl/src/search/hsearch.c | 4 +- lib/libc/musl/src/select/poll.c | 9 +- lib/libc/musl/src/select/select.c | 1 + lib/libc/musl/src/setjmp/powerpc/longjmp.S | 8 +- lib/libc/musl/src/signal/mips/restore.s | 15 -- lib/libc/musl/src/signal/mips64/restore.s | 11 -- lib/libc/musl/src/signal/mipsn32/restore.s | 11 -- lib/libc/musl/src/signal/sigaction.c | 5 +- lib/libc/musl/src/stat/__xstat.c | 5 - lib/libc/musl/src/stat/fchmodat.c | 15 +- lib/libc/musl/src/stat/fstat.c | 8 +- lib/libc/musl/src/stat/fstatat.c | 16 +- lib/libc/musl/src/stat/lstat.c | 4 - lib/libc/musl/src/stat/stat.c | 4 - lib/libc/musl/src/stat/statvfs.c | 5 - lib/libc/musl/src/stdio/fgetpos.c | 2 - lib/libc/musl/src/stdio/fgets.c | 5 +- lib/libc/musl/src/stdio/fopen.c | 2 - lib/libc/musl/src/stdio/freopen.c | 4 +- lib/libc/musl/src/stdio/fseek.c | 2 - lib/libc/musl/src/stdio/fsetpos.c | 2 - lib/libc/musl/src/stdio/ftell.c | 2 - lib/libc/musl/src/stdio/open_wmemstream.c | 6 +- lib/libc/musl/src/stdio/tempnam.c | 8 +- lib/libc/musl/src/stdio/tmpfile.c | 2 - lib/libc/musl/src/stdio/tmpnam.c | 8 +- lib/libc/musl/src/stdio/vfprintf.c | 23 +-- lib/libc/musl/src/stdio/vfwprintf.c | 39 +++-- lib/libc/musl/src/stdio/vswprintf.c | 1 + lib/libc/musl/src/stdlib/qsort_nr.c | 2 +- lib/libc/musl/src/string/strverscmp.c | 6 +- lib/libc/musl/src/string/wcscmp.c | 2 +- lib/libc/musl/src/string/wcsncmp.c | 2 +- lib/libc/musl/src/string/wmemcmp.c | 2 +- lib/libc/musl/src/temp/__randname.c | 3 +- lib/libc/musl/src/temp/mkostemp.c | 2 - lib/libc/musl/src/temp/mkostemps.c | 1 - lib/libc/musl/src/temp/mkstemp.c | 2 - lib/libc/musl/src/temp/mkstemps.c | 2 - lib/libc/musl/src/thread/pthread_atfork.c | 8 +- lib/libc/musl/src/thread/pthread_cancel.c | 9 +- lib/libc/musl/src/thread/pthread_create.c | 16 +- lib/libc/musl/src/thread/pthread_detach.c | 8 +- lib/libc/musl/src/thread/pthread_key_create.c | 8 + lib/libc/musl/src/thread/sem_getvalue.c | 3 +- lib/libc/musl/src/thread/sem_post.c | 12 +- lib/libc/musl/src/thread/sem_timedwait.c | 10 +- lib/libc/musl/src/thread/sem_trywait.c | 6 +- lib/libc/musl/src/thread/synccall.c | 2 +- lib/libc/musl/src/time/__map_file.c | 5 +- lib/libc/musl/src/time/clock_getcpuclockid.c | 1 + lib/libc/musl/src/time/clock_gettime.c | 7 + lib/libc/musl/src/time/timer_create.c | 6 +- lib/libc/musl/src/unistd/dup3.c | 6 +- lib/libc/musl/src/unistd/ftruncate.c | 2 - lib/libc/musl/src/unistd/lseek.c | 1 - lib/libc/musl/src/unistd/mipsn32/lseek.c | 1 - lib/libc/musl/src/unistd/pipe2.c | 1 + lib/libc/musl/src/unistd/pread.c | 2 - lib/libc/musl/src/unistd/preadv.c | 2 - lib/libc/musl/src/unistd/pwrite.c | 2 - lib/libc/musl/src/unistd/pwritev.c | 2 - lib/libc/musl/src/unistd/truncate.c | 2 - lib/libc/musl/src/unistd/x32/lseek.c | 1 - src/musl.zig | 5 +- 173 files changed, 735 insertions(+), 441 deletions(-) delete mode 100644 lib/libc/musl/arch/i386/arch.mak delete mode 100644 lib/libc/musl/arch/m68k/arch.mak delete mode 100644 lib/libc/musl/arch/mips/arch.mak delete mode 100644 lib/libc/musl/arch/powerpc/arch.mak create mode 100644 lib/libc/musl/src/include/sys/stat.h create mode 100644 lib/libc/musl/src/process/aarch64/vfork.s create mode 100644 lib/libc/musl/src/process/riscv64/vfork.s delete mode 100644 lib/libc/musl/src/signal/mips/restore.s delete mode 100644 lib/libc/musl/src/signal/mips64/restore.s delete mode 100644 lib/libc/musl/src/signal/mipsn32/restore.s (limited to 'lib/libc') diff --git a/lib/libc/musl/arch/arm/syscall_arch.h b/lib/libc/musl/arch/arm/syscall_arch.h index a877b2cff1..624e992e1a 100644 --- a/lib/libc/musl/arch/arm/syscall_arch.h +++ b/lib/libc/musl/arch/arm/syscall_arch.h @@ -101,3 +101,10 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo #define SYSCALL_FADVISE_6_ARG #define SYSCALL_IPC_BROKEN_MODE + +#define VDSO_USEFUL +#define VDSO_CGT32_SYM "__vdso_clock_gettime" +#define VDSO_CGT32_VER "LINUX_2.6" +#define VDSO_CGT_SYM "__vdso_clock_gettime64" +#define VDSO_CGT_VER "LINUX_2.6" +#define VDSO_CGT_WORKAROUND 1 diff --git a/lib/libc/musl/arch/i386/arch.mak b/lib/libc/musl/arch/i386/arch.mak deleted file mode 100644 index aa4d05ceff..0000000000 --- a/lib/libc/musl/arch/i386/arch.mak +++ /dev/null @@ -1 +0,0 @@ -COMPAT_SRC_DIRS = compat/time32 diff --git a/lib/libc/musl/arch/m68k/arch.mak b/lib/libc/musl/arch/m68k/arch.mak deleted file mode 100644 index aa4d05ceff..0000000000 --- a/lib/libc/musl/arch/m68k/arch.mak +++ /dev/null @@ -1 +0,0 @@ -COMPAT_SRC_DIRS = compat/time32 diff --git a/lib/libc/musl/arch/mips/arch.mak b/lib/libc/musl/arch/mips/arch.mak deleted file mode 100644 index aa4d05ceff..0000000000 --- a/lib/libc/musl/arch/mips/arch.mak +++ /dev/null @@ -1 +0,0 @@ -COMPAT_SRC_DIRS = compat/time32 diff --git a/lib/libc/musl/arch/mips/bits/signal.h b/lib/libc/musl/arch/mips/bits/signal.h index 1b69e7625e..a3b3857ae7 100644 --- a/lib/libc/musl/arch/mips/bits/signal.h +++ b/lib/libc/musl/arch/mips/bits/signal.h @@ -66,7 +66,6 @@ typedef struct __ucontext { #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 -#define SA_RESTORER 0x04000000 #undef SIG_BLOCK #undef SIG_UNBLOCK diff --git a/lib/libc/musl/arch/mips/ksigaction.h b/lib/libc/musl/arch/mips/ksigaction.h index 63fdfab00b..485abf756d 100644 --- a/lib/libc/musl/arch/mips/ksigaction.h +++ b/lib/libc/musl/arch/mips/ksigaction.h @@ -4,10 +4,7 @@ struct k_sigaction { unsigned flags; void (*handler)(int); unsigned long mask[4]; - /* The following field is past the end of the structure the - * kernel will read or write, and exists only to avoid having - * mips-specific preprocessor conditionals in sigaction.c. */ - void (*restorer)(); + void *unused; }; hidden void __restore(), __restore_rt(); diff --git a/lib/libc/musl/arch/mips/reloc.h b/lib/libc/musl/arch/mips/reloc.h index 88d236390e..f4023b1681 100644 --- a/lib/libc/musl/arch/mips/reloc.h +++ b/lib/libc/musl/arch/mips/reloc.h @@ -29,6 +29,7 @@ #define NEED_MIPS_GOT_RELOCS 1 #define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP +#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL #define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT)) #define CRTJMP(pc,sp) __asm__ __volatile__( \ diff --git a/lib/libc/musl/arch/mips64/bits/signal.h b/lib/libc/musl/arch/mips64/bits/signal.h index 4f91c9fc80..ffec7fd014 100644 --- a/lib/libc/musl/arch/mips64/bits/signal.h +++ b/lib/libc/musl/arch/mips64/bits/signal.h @@ -85,7 +85,6 @@ typedef struct __ucontext { #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 -#define SA_RESTORER 0x04000000 #undef SIG_BLOCK #undef SIG_UNBLOCK diff --git a/lib/libc/musl/arch/mips64/ksigaction.h b/lib/libc/musl/arch/mips64/ksigaction.h index c16e4731d8..b4d0fa5f9c 100644 --- a/lib/libc/musl/arch/mips64/ksigaction.h +++ b/lib/libc/musl/arch/mips64/ksigaction.h @@ -4,7 +4,7 @@ struct k_sigaction { unsigned flags; void (*handler)(int); unsigned long mask[2]; - void (*restorer)(); + void *unused; }; hidden void __restore(), __restore_rt(); diff --git a/lib/libc/musl/arch/mips64/reloc.h b/lib/libc/musl/arch/mips64/reloc.h index fdb5edc9ca..145d8b0b28 100644 --- a/lib/libc/musl/arch/mips64/reloc.h +++ b/lib/libc/musl/arch/mips64/reloc.h @@ -38,6 +38,7 @@ #define NEED_MIPS_GOT_RELOCS 1 #define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP +#define DT_DEBUG_INDIRECT_REL DT_MIPS_RLD_MAP_REL #define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT)) #define CRTJMP(pc,sp) __asm__ __volatile__( \ diff --git a/lib/libc/musl/arch/powerpc/arch.mak b/lib/libc/musl/arch/powerpc/arch.mak deleted file mode 100644 index aa4d05ceff..0000000000 --- a/lib/libc/musl/arch/powerpc/arch.mak +++ /dev/null @@ -1 +0,0 @@ -COMPAT_SRC_DIRS = compat/time32 diff --git a/lib/libc/musl/arch/riscv64/bits/signal.h b/lib/libc/musl/arch/riscv64/bits/signal.h index 287367db73..fd6157a396 100644 --- a/lib/libc/musl/arch/riscv64/bits/signal.h +++ b/lib/libc/musl/arch/riscv64/bits/signal.h @@ -76,7 +76,6 @@ typedef struct __ucontext #define SA_RESTART 0x10000000 #define SA_NODEFER 0x40000000 #define SA_RESETHAND 0x80000000 -#define SA_RESTORER 0x04000000 #endif diff --git a/lib/libc/musl/compat/time32/__xstat.c b/lib/libc/musl/compat/time32/__xstat.c index acfbd3cc52..e52b5deb2a 100644 --- a/lib/libc/musl/compat/time32/__xstat.c +++ b/lib/libc/musl/compat/time32/__xstat.c @@ -3,22 +3,22 @@ struct stat32; -int __fxstat64(int ver, int fd, struct stat32 *buf) +int __fxstat(int ver, int fd, struct stat32 *buf) { return __fstat_time32(fd, buf); } -int __fxstatat64(int ver, int fd, const char *path, struct stat32 *buf, int flag) +int __fxstatat(int ver, int fd, const char *path, struct stat32 *buf, int flag) { return __fstatat_time32(fd, path, buf, flag); } -int __lxstat64(int ver, const char *path, struct stat32 *buf) +int __lxstat(int ver, const char *path, struct stat32 *buf) { return __lstat_time32(path, buf); } -int __xstat64(int ver, const char *path, struct stat32 *buf) +int __xstat(int ver, const char *path, struct stat32 *buf) { return __stat_time32(path, buf); } diff --git a/lib/libc/musl/compat/time32/aio_suspend_time32.c b/lib/libc/musl/compat/time32/aio_suspend_time32.c index ed5119bd7d..d99cb651d8 100644 --- a/lib/libc/musl/compat/time32/aio_suspend_time32.c +++ b/lib/libc/musl/compat/time32/aio_suspend_time32.c @@ -7,5 +7,3 @@ int __aio_suspend_time32(const struct aiocb *const cbs[], int cnt, const struct return aio_suspend(cbs, cnt, ts32 ? (&(struct timespec){ .tv_sec = ts32->tv_sec, .tv_nsec = ts32->tv_nsec}) : 0); } - -weak_alias(aio_suspend, aio_suspend64); diff --git a/lib/libc/musl/compat/time32/fstat_time32.c b/lib/libc/musl/compat/time32/fstat_time32.c index 3e08439887..e5d52022d6 100644 --- a/lib/libc/musl/compat/time32/fstat_time32.c +++ b/lib/libc/musl/compat/time32/fstat_time32.c @@ -13,5 +13,3 @@ int __fstat_time32(int fd, struct stat32 *restrict st32) if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim)); return r; } - -weak_alias(fstat, fstat64); diff --git a/lib/libc/musl/compat/time32/fstatat_time32.c b/lib/libc/musl/compat/time32/fstatat_time32.c index 85dcb008ed..31d42e6360 100644 --- a/lib/libc/musl/compat/time32/fstatat_time32.c +++ b/lib/libc/musl/compat/time32/fstatat_time32.c @@ -13,5 +13,3 @@ int __fstatat_time32(int fd, const char *restrict path, struct stat32 *restrict if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim)); return r; } - -weak_alias(fstatat, fstatat64); diff --git a/lib/libc/musl/compat/time32/lstat_time32.c b/lib/libc/musl/compat/time32/lstat_time32.c index c1257a1449..28cb5a0b98 100644 --- a/lib/libc/musl/compat/time32/lstat_time32.c +++ b/lib/libc/musl/compat/time32/lstat_time32.c @@ -13,5 +13,3 @@ int __lstat_time32(const char *restrict path, struct stat32 *restrict st32) if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim)); return r; } - -weak_alias(lstat, lstat64); diff --git a/lib/libc/musl/compat/time32/stat_time32.c b/lib/libc/musl/compat/time32/stat_time32.c index 8c6121dadd..b154b0f9f0 100644 --- a/lib/libc/musl/compat/time32/stat_time32.c +++ b/lib/libc/musl/compat/time32/stat_time32.c @@ -13,5 +13,3 @@ int __stat_time32(const char *restrict path, struct stat32 *restrict st32) if (!r) memcpy(st32, &st, offsetof(struct stat, st_atim)); return r; } - -weak_alias(stat, stat64); diff --git a/lib/libc/musl/include/aio.h b/lib/libc/musl/include/aio.h index 453c41b748..a938fcad5d 100644 --- a/lib/libc/musl/include/aio.h +++ b/lib/libc/musl/include/aio.h @@ -49,7 +49,7 @@ int aio_fsync(int, struct aiocb *); int lio_listio(int, struct aiocb *__restrict const *__restrict, int, struct sigevent *__restrict); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define aiocb64 aiocb #define aio_read64 aio_read #define aio_write64 aio_write diff --git a/lib/libc/musl/include/arpa/nameser.h b/lib/libc/musl/include/arpa/nameser.h index 581925a433..9c1327a1f5 100644 --- a/lib/libc/musl/include/arpa/nameser.h +++ b/lib/libc/musl/include/arpa/nameser.h @@ -188,6 +188,36 @@ typedef enum __ns_type { ns_t_sink = 40, ns_t_opt = 41, ns_t_apl = 42, + ns_t_ds = 43, + ns_t_sshfp = 44, + ns_t_ipseckey = 45, + ns_t_rrsig = 46, + ns_t_nsec = 47, + ns_t_dnskey = 48, + ns_t_dhcid = 49, + ns_t_nsec3 = 50, + ns_t_nsec3param = 51, + ns_t_tlsa = 52, + ns_t_smimea = 53, + ns_t_hip = 55, + ns_t_ninfo = 56, + ns_t_rkey = 57, + ns_t_talink = 58, + ns_t_cds = 59, + ns_t_cdnskey = 60, + ns_t_openpgpkey = 61, + ns_t_csync = 62, + ns_t_spf = 99, + ns_t_uinfo = 100, + ns_t_uid = 101, + ns_t_gid = 102, + ns_t_unspec = 103, + ns_t_nid = 104, + ns_t_l32 = 105, + ns_t_l64 = 106, + ns_t_lp = 107, + ns_t_eui48 = 108, + ns_t_eui64 = 109, ns_t_tkey = 249, ns_t_tsig = 250, ns_t_ixfr = 251, @@ -196,6 +226,11 @@ typedef enum __ns_type { ns_t_maila = 254, ns_t_any = 255, ns_t_zxfr = 256, + ns_t_uri = 256, + ns_t_caa = 257, + ns_t_avc = 258, + ns_t_ta = 32768, + ns_t_dlv = 32769, ns_t_max = 65536 } ns_type; @@ -430,12 +465,48 @@ typedef struct { #define T_NAPTR ns_t_naptr #define T_A6 ns_t_a6 #define T_DNAME ns_t_dname +#define T_DS ns_t_ds +#define T_SSHFP ns_t_sshfp +#define T_IPSECKEY ns_t_ipseckey +#define T_RRSIG ns_t_rrsig +#define T_NSEC ns_t_nsec +#define T_DNSKEY ns_t_dnskey +#define T_DHCID ns_t_dhcid +#define T_NSEC3 ns_t_nsec3 +#define T_NSEC3PARAM ns_t_nsec3param +#define T_TLSA ns_t_tlsa +#define T_SMIMEA ns_t_smimea +#define T_HIP ns_t_hip +#define T_NINFO ns_t_ninfo +#define T_RKEY ns_t_rkey +#define T_TALINK ns_t_talink +#define T_CDS ns_t_cds +#define T_CDNSKEY ns_t_cdnskey +#define T_OPENPGPKEY ns_t_openpgpkey +#define T_CSYNC ns_t_csync +#define T_SPF ns_t_spf +#define T_UINFO ns_t_uinfo +#define T_UID ns_t_uid +#define T_GID ns_t_gid +#define T_UNSPEC ns_t_unspec +#define T_NID ns_t_nid +#define T_L32 ns_t_l32 +#define T_L64 ns_t_l64 +#define T_LP ns_t_lp +#define T_EUI48 ns_t_eui48 +#define T_EUI64 ns_t_eui64 +#define T_TKEY ns_t_tkey #define T_TSIG ns_t_tsig #define T_IXFR ns_t_ixfr #define T_AXFR ns_t_axfr #define T_MAILB ns_t_mailb #define T_MAILA ns_t_maila #define T_ANY ns_t_any +#define T_URI ns_t_uri +#define T_CAA ns_t_caa +#define T_AVC ns_t_avc +#define T_TA ns_t_ta +#define T_DLV ns_t_dlv #define C_IN ns_c_in #define C_CHAOS ns_c_chaos diff --git a/lib/libc/musl/include/dirent.h b/lib/libc/musl/include/dirent.h index 650ecf646a..2d8fffb23f 100644 --- a/lib/libc/musl/include/dirent.h +++ b/lib/libc/musl/include/dirent.h @@ -56,7 +56,7 @@ int getdents(int, struct dirent *, size_t); int versionsort(const struct dirent **, const struct dirent **); #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define dirent64 dirent #define readdir64 readdir #define readdir64_r readdir_r diff --git a/lib/libc/musl/include/elf.h b/lib/libc/musl/include/elf.h index 86e2f0bb7d..23f2c4bc1b 100644 --- a/lib/libc/musl/include/elf.h +++ b/lib/libc/musl/include/elf.h @@ -385,7 +385,8 @@ typedef struct { #define SHT_PREINIT_ARRAY 16 #define SHT_GROUP 17 #define SHT_SYMTAB_SHNDX 18 -#define SHT_NUM 19 +#define SHT_RELR 19 +#define SHT_NUM 20 #define SHT_LOOS 0x60000000 #define SHT_GNU_ATTRIBUTES 0x6ffffff5 #define SHT_GNU_HASH 0x6ffffff6 @@ -436,6 +437,7 @@ typedef struct { } Elf64_Chdr; #define ELFCOMPRESS_ZLIB 1 +#define ELFCOMPRESS_ZSTD 2 #define ELFCOMPRESS_LOOS 0x60000000 #define ELFCOMPRESS_HIOS 0x6fffffff #define ELFCOMPRESS_LOPROC 0x70000000 @@ -754,7 +756,10 @@ typedef struct { #define DT_PREINIT_ARRAY 32 #define DT_PREINIT_ARRAYSZ 33 #define DT_SYMTAB_SHNDX 34 -#define DT_NUM 35 +#define DT_RELRSZ 35 +#define DT_RELR 36 +#define DT_RELRENT 37 +#define DT_NUM 38 #define DT_LOOS 0x6000000d #define DT_HIOS 0x6ffff000 #define DT_LOPROC 0x70000000 diff --git a/lib/libc/musl/include/fcntl.h b/lib/libc/musl/include/fcntl.h index b664cdc441..515f255d41 100644 --- a/lib/libc/musl/include/fcntl.h +++ b/lib/libc/musl/include/fcntl.h @@ -195,7 +195,7 @@ ssize_t tee(int, int, size_t, unsigned); #define loff_t off_t #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define F_GETLK64 F_GETLK #define F_SETLK64 F_SETLK #define F_SETLKW64 F_SETLKW diff --git a/lib/libc/musl/include/ftw.h b/lib/libc/musl/include/ftw.h index b15c062a83..d0445e8ad2 100644 --- a/lib/libc/musl/include/ftw.h +++ b/lib/libc/musl/include/ftw.h @@ -29,7 +29,7 @@ struct FTW { int ftw(const char *, int (*)(const char *, const struct stat *, int), int); int nftw(const char *, int (*)(const char *, const struct stat *, int, struct FTW *), int, int); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define ftw64 ftw #define nftw64 nftw #endif diff --git a/lib/libc/musl/include/glob.h b/lib/libc/musl/include/glob.h index 4a562a206d..fed0674535 100644 --- a/lib/libc/musl/include/glob.h +++ b/lib/libc/musl/include/glob.h @@ -39,7 +39,7 @@ void globfree(glob_t *); #define GLOB_NOMATCH 3 #define GLOB_NOSYS 4 -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define glob64 glob #define globfree64 globfree #define glob64_t glob_t diff --git a/lib/libc/musl/include/netdb.h b/lib/libc/musl/include/netdb.h index d096c78183..3af065e2b6 100644 --- a/lib/libc/musl/include/netdb.h +++ b/lib/libc/musl/include/netdb.h @@ -44,6 +44,7 @@ struct addrinfo { #define EAI_NONAME -2 #define EAI_AGAIN -3 #define EAI_FAIL -4 +#define EAI_NODATA -5 #define EAI_FAMILY -6 #define EAI_SOCKTYPE -7 #define EAI_SERVICE -8 diff --git a/lib/libc/musl/include/sched.h b/lib/libc/musl/include/sched.h index fda4b48460..204c34f567 100644 --- a/lib/libc/musl/include/sched.h +++ b/lib/libc/musl/include/sched.h @@ -124,7 +124,7 @@ __CPU_op_func_S(XOR, ^) #define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n))) #define CPU_FREE(set) free(set) -#define CPU_SETSIZE 128 +#define CPU_SETSIZE 1024 #define CPU_SET(i, set) CPU_SET_S(i,sizeof(cpu_set_t),set) #define CPU_CLR(i, set) CPU_CLR_S(i,sizeof(cpu_set_t),set) diff --git a/lib/libc/musl/include/stdio.h b/lib/libc/musl/include/stdio.h index d1ed01f03f..cb85861851 100644 --- a/lib/libc/musl/include/stdio.h +++ b/lib/libc/musl/include/stdio.h @@ -205,7 +205,7 @@ typedef struct _IO_cookie_io_functions_t { FILE *fopencookie(void *, const char *, cookie_io_functions_t); #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define tmpfile64 tmpfile #define fopen64 fopen #define freopen64 freopen diff --git a/lib/libc/musl/include/stdlib.h b/lib/libc/musl/include/stdlib.h index b507ca33b4..475190bfa2 100644 --- a/lib/libc/musl/include/stdlib.h +++ b/lib/libc/musl/include/stdlib.h @@ -95,7 +95,7 @@ size_t __ctype_get_mb_cur_max(void); #define WTERMSIG(s) ((s) & 0x7f) #define WSTOPSIG(s) WEXITSTATUS(s) #define WIFEXITED(s) (!WTERMSIG(s)) -#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00) +#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001U)>>8) > 0x7f00) #define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu) int posix_memalign (void **, size_t, size_t); @@ -163,7 +163,7 @@ double strtod_l(const char *__restrict, char **__restrict, struct __locale_struc long double strtold_l(const char *__restrict, char **__restrict, struct __locale_struct *); #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define mkstemp64 mkstemp #define mkostemp64 mkostemp #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) diff --git a/lib/libc/musl/include/string.h b/lib/libc/musl/include/string.h index 43ad0942ed..db73d2a920 100644 --- a/lib/libc/musl/include/string.h +++ b/lib/libc/musl/include/string.h @@ -73,6 +73,7 @@ char *strsignal(int); char *strerror_l (int, locale_t); int strcoll_l (const char *, const char *, locale_t); size_t strxfrm_l (char *__restrict, const char *__restrict, size_t, locale_t); +void *memmem(const void *, size_t, const void *, size_t); #endif #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ @@ -92,7 +93,6 @@ void explicit_bzero (void *, size_t); int strverscmp (const char *, const char *); char *strchrnul(const char *, int); char *strcasestr(const char *, const char *); -void *memmem(const void *, size_t, const void *, size_t); void *memrchr(const void *, int, size_t); void *mempcpy(void *, const void *, size_t); #ifndef __cplusplus diff --git a/lib/libc/musl/include/strings.h b/lib/libc/musl/include/strings.h index db0960b4eb..b7a5ea0893 100644 --- a/lib/libc/musl/include/strings.h +++ b/lib/libc/musl/include/strings.h @@ -5,6 +5,7 @@ extern "C" { #endif +#include #define __NEED_size_t #define __NEED_locale_t diff --git a/lib/libc/musl/include/sys/mman.h b/lib/libc/musl/include/sys/mman.h index 80a3baae23..3d5d0f9c23 100644 --- a/lib/libc/musl/include/sys/mman.h +++ b/lib/libc/musl/include/sys/mman.h @@ -141,7 +141,7 @@ int mincore (void *, size_t, unsigned char *); int shm_open (const char *, int, mode_t); int shm_unlink (const char *); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define mmap64 mmap #define off64_t off_t #endif diff --git a/lib/libc/musl/include/sys/resource.h b/lib/libc/musl/include/sys/resource.h index 3068328d09..e8bfbe1f08 100644 --- a/lib/libc/musl/include/sys/resource.h +++ b/lib/libc/musl/include/sys/resource.h @@ -95,7 +95,7 @@ int prlimit(pid_t, int, const struct rlimit *, struct rlimit *); #define RLIM_NLIMITS RLIMIT_NLIMITS -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define RLIM64_INFINITY RLIM_INFINITY #define RLIM64_SAVED_CUR RLIM_SAVED_CUR #define RLIM64_SAVED_MAX RLIM_SAVED_MAX diff --git a/lib/libc/musl/include/sys/sendfile.h b/lib/libc/musl/include/sys/sendfile.h index e7570d8e5c..253a041b12 100644 --- a/lib/libc/musl/include/sys/sendfile.h +++ b/lib/libc/musl/include/sys/sendfile.h @@ -10,7 +10,7 @@ extern "C" { ssize_t sendfile(int, int, off_t *, size_t); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define sendfile64 sendfile #define off64_t off_t #endif diff --git a/lib/libc/musl/include/sys/stat.h b/lib/libc/musl/include/sys/stat.h index 10d446c463..e6d0049c3d 100644 --- a/lib/libc/musl/include/sys/stat.h +++ b/lib/libc/musl/include/sys/stat.h @@ -98,7 +98,7 @@ int lchmod(const char *, mode_t); #define S_IEXEC S_IXUSR #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define stat64 stat #define fstat64 fstat #define lstat64 lstat diff --git a/lib/libc/musl/include/sys/statfs.h b/lib/libc/musl/include/sys/statfs.h index 6f4c6230f7..7a2e11cd56 100644 --- a/lib/libc/musl/include/sys/statfs.h +++ b/lib/libc/musl/include/sys/statfs.h @@ -18,7 +18,7 @@ typedef struct __fsid_t { int statfs (const char *, struct statfs *); int fstatfs (int, struct statfs *); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define statfs64 statfs #define fstatfs64 fstatfs #define fsblkcnt64_t fsblkcnt_t diff --git a/lib/libc/musl/include/sys/statvfs.h b/lib/libc/musl/include/sys/statvfs.h index 793490b6dc..57a6b8068e 100644 --- a/lib/libc/musl/include/sys/statvfs.h +++ b/lib/libc/musl/include/sys/statvfs.h @@ -42,7 +42,7 @@ int fstatvfs (int, struct statvfs *); #define ST_NODIRATIME 2048 #define ST_RELATIME 4096 -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define statvfs64 statvfs #define fstatvfs64 fstatvfs #define fsblkcnt64_t fsblkcnt_t diff --git a/lib/libc/musl/include/sys/types.h b/lib/libc/musl/include/sys/types.h index 0c35541da0..3363374fd3 100644 --- a/lib/libc/musl/include/sys/types.h +++ b/lib/libc/musl/include/sys/types.h @@ -71,7 +71,7 @@ typedef unsigned long long u_quad_t; #include #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define blkcnt64_t blkcnt_t #define fsblkcnt64_t fsblkcnt_t #define fsfilcnt64_t fsfilcnt_t diff --git a/lib/libc/musl/include/sys/uio.h b/lib/libc/musl/include/sys/uio.h index 00f73a2f05..90e5939ed0 100644 --- a/lib/libc/musl/include/sys/uio.h +++ b/lib/libc/musl/include/sys/uio.h @@ -29,7 +29,7 @@ ssize_t writev (int, const struct iovec *, int); #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) ssize_t preadv (int, const struct iovec *, int, off_t); ssize_t pwritev (int, const struct iovec *, int, off_t); -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define preadv64 preadv #define pwritev64 pwritev #define off64_t off_t diff --git a/lib/libc/musl/include/sys/wait.h b/lib/libc/musl/include/sys/wait.h index d4b1f2e185..8ced671b9a 100644 --- a/lib/libc/musl/include/sys/wait.h +++ b/lib/libc/musl/include/sys/wait.h @@ -50,7 +50,7 @@ pid_t wait4 (pid_t, int *, int, struct rusage *); #define WSTOPSIG(s) WEXITSTATUS(s) #define WCOREDUMP(s) ((s) & 0x80) #define WIFEXITED(s) (!WTERMSIG(s)) -#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00) +#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001U)>>8) > 0x7f00) #define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu) #define WIFCONTINUED(s) ((s) == 0xffff) diff --git a/lib/libc/musl/include/unistd.h b/lib/libc/musl/include/unistd.h index 212263a7e8..5bc7f7982f 100644 --- a/lib/libc/musl/include/unistd.h +++ b/lib/libc/musl/include/unistd.h @@ -198,7 +198,7 @@ ssize_t copy_file_range(int, off_t *, int, off_t *, size_t, unsigned); pid_t gettid(void); #endif -#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#if defined(_LARGEFILE64_SOURCE) #define lseek64 lseek #define pread64 pread #define pwrite64 pwrite @@ -425,6 +425,8 @@ pid_t gettid(void); #define _SC_XOPEN_STREAMS 246 #define _SC_THREAD_ROBUST_PRIO_INHERIT 247 #define _SC_THREAD_ROBUST_PRIO_PROTECT 248 +#define _SC_MINSIGSTKSZ 249 +#define _SC_SIGSTKSZ 250 #define _CS_PATH 0 #define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS 1 @@ -467,6 +469,8 @@ pid_t gettid(void); #define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS 1147 #define _CS_V6_ENV 1148 #define _CS_V7_ENV 1149 +#define _CS_POSIX_V7_THREADS_CFLAGS 1150 +#define _CS_POSIX_V7_THREADS_LDFLAGS 1151 #ifdef __cplusplus } diff --git a/lib/libc/musl/src/aio/aio.c b/lib/libc/musl/src/aio/aio.c index a1a3e7914b..d7e063bf93 100644 --- a/lib/libc/musl/src/aio/aio.c +++ b/lib/libc/musl/src/aio/aio.c @@ -82,6 +82,8 @@ static size_t io_thread_stack_size; static struct aio_queue *__aio_get_queue(int fd, int need) { + sigset_t allmask, origmask; + int masked = 0; if (fd < 0) { errno = EBADF; return 0; @@ -93,6 +95,9 @@ static struct aio_queue *__aio_get_queue(int fd, int need) if ((!map || !map[a] || !map[a][b] || !map[a][b][c] || !(q=map[a][b][c][d])) && need) { pthread_rwlock_unlock(&maplock); if (fcntl(fd, F_GETFD) < 0) return 0; + sigfillset(&allmask); + masked = 1; + pthread_sigmask(SIG_BLOCK, &allmask, &origmask); pthread_rwlock_wrlock(&maplock); if (!io_thread_stack_size) { unsigned long val = __getauxval(AT_MINSIGSTKSZ); @@ -119,6 +124,7 @@ static struct aio_queue *__aio_get_queue(int fd, int need) if (q) pthread_mutex_lock(&q->lock); out: pthread_rwlock_unlock(&maplock); + if (masked) pthread_sigmask(SIG_SETMASK, &origmask, 0); return q; } @@ -401,18 +407,26 @@ void __aio_atfork(int who) if (who<0) { pthread_rwlock_rdlock(&maplock); return; + } else if (!who) { + pthread_rwlock_unlock(&maplock); + return; } - if (who>0 && map) for (int a=0; a<(-1U/2+1)>>24; a++) + aio_fd_cnt = 0; + if (pthread_rwlock_tryrdlock(&maplock)) { + /* Obtaining lock may fail if _Fork was called nor via + * fork. In this case, no further aio is possible from + * child and we can just null out map so __aio_close + * does not attempt to do anything. */ + map = 0; + return; + } + if (map) for (int a=0; a<(-1U/2+1)>>24; a++) if (map[a]) for (int b=0; b<256; b++) if (map[a][b]) for (int c=0; c<256; c++) if (map[a][b][c]) for (int d=0; d<256; d++) map[a][b][c][d] = 0; - pthread_rwlock_unlock(&maplock); + /* Re-initialize the rwlock rather than unlocking since there + * may have been more than one reference on it in the parent. + * We are not a lock holder anyway; the thread in the parent was. */ + pthread_rwlock_init(&maplock, 0); } - -weak_alias(aio_cancel, aio_cancel64); -weak_alias(aio_error, aio_error64); -weak_alias(aio_fsync, aio_fsync64); -weak_alias(aio_read, aio_read64); -weak_alias(aio_write, aio_write64); -weak_alias(aio_return, aio_return64); diff --git a/lib/libc/musl/src/aio/aio_suspend.c b/lib/libc/musl/src/aio/aio_suspend.c index 1c1060e340..1f0c9aaaa1 100644 --- a/lib/libc/musl/src/aio/aio_suspend.c +++ b/lib/libc/musl/src/aio/aio_suspend.c @@ -9,7 +9,7 @@ int aio_suspend(const struct aiocb *const cbs[], int cnt, const struct timespec { int i, tid = 0, ret, expect = 0; struct timespec at; - volatile int dummy_fut, *pfut; + volatile int dummy_fut = 0, *pfut; int nzcnt = 0; const struct aiocb *cb = 0; @@ -73,7 +73,3 @@ int aio_suspend(const struct aiocb *const cbs[], int cnt, const struct timespec } } } - -#if !_REDIR_TIME64 -weak_alias(aio_suspend, aio_suspend64); -#endif diff --git a/lib/libc/musl/src/aio/lio_listio.c b/lib/libc/musl/src/aio/lio_listio.c index 0799c15d8b..a672812f47 100644 --- a/lib/libc/musl/src/aio/lio_listio.c +++ b/lib/libc/musl/src/aio/lio_listio.c @@ -139,5 +139,3 @@ int lio_listio(int mode, struct aiocb *restrict const *restrict cbs, int cnt, st return 0; } - -weak_alias(lio_listio, lio_listio64); diff --git a/lib/libc/musl/src/conf/confstr.c b/lib/libc/musl/src/conf/confstr.c index 02cb1aa252..3d4172846d 100644 --- a/lib/libc/musl/src/conf/confstr.c +++ b/lib/libc/musl/src/conf/confstr.c @@ -7,7 +7,7 @@ size_t confstr(int name, char *buf, size_t len) const char *s = ""; if (!name) { s = "/bin:/usr/bin"; - } else if ((name&~4U)!=1 && name-_CS_POSIX_V6_ILP32_OFF32_CFLAGS>33U) { + } else if ((name&~4U)!=1 && name-_CS_POSIX_V6_ILP32_OFF32_CFLAGS>35U) { errno = EINVAL; return 0; } diff --git a/lib/libc/musl/src/conf/sysconf.c b/lib/libc/musl/src/conf/sysconf.c index 3baaed3226..60d3e74535 100644 --- a/lib/libc/musl/src/conf/sysconf.c +++ b/lib/libc/musl/src/conf/sysconf.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "syscall.h" #include "libc.h" @@ -19,6 +20,8 @@ #define JT_AVPHYS_PAGES JT(9) #define JT_ZERO JT(10) #define JT_DELAYTIMER_MAX JT(11) +#define JT_MINSIGSTKSZ JT(12) +#define JT_SIGSTKSZ JT(13) #define RLIM(x) (-32768|(RLIMIT_ ## x)) @@ -165,6 +168,9 @@ long sysconf(int name) [_SC_XOPEN_STREAMS] = JT_ZERO, [_SC_THREAD_ROBUST_PRIO_INHERIT] = -1, [_SC_THREAD_ROBUST_PRIO_PROTECT] = -1, + + [_SC_MINSIGSTKSZ] = JT_MINSIGSTKSZ, + [_SC_SIGSTKSZ] = JT_SIGSTKSZ, }; if (name >= sizeof(values)/sizeof(values[0]) || !values[name]) { @@ -212,6 +218,13 @@ long sysconf(int name) mem *= si.mem_unit; mem /= PAGE_SIZE; return (mem > LONG_MAX) ? LONG_MAX : mem; + case JT_MINSIGSTKSZ & 255: + case JT_SIGSTKSZ & 255: ; + long val = __getauxval(AT_MINSIGSTKSZ); + if (val < MINSIGSTKSZ) val = MINSIGSTKSZ; + if (values[name] == JT_SIGSTKSZ) + val += SIGSTKSZ - MINSIGSTKSZ; + return val; case JT_ZERO & 255: return 0; } diff --git a/lib/libc/musl/src/dirent/alphasort.c b/lib/libc/musl/src/dirent/alphasort.c index bee672ebda..ab2624e2cc 100644 --- a/lib/libc/musl/src/dirent/alphasort.c +++ b/lib/libc/musl/src/dirent/alphasort.c @@ -5,5 +5,3 @@ int alphasort(const struct dirent **a, const struct dirent **b) { return strcoll((*a)->d_name, (*b)->d_name); } - -weak_alias(alphasort, alphasort64); diff --git a/lib/libc/musl/src/dirent/readdir.c b/lib/libc/musl/src/dirent/readdir.c index 569fc70577..5a03b36352 100644 --- a/lib/libc/musl/src/dirent/readdir.c +++ b/lib/libc/musl/src/dirent/readdir.c @@ -25,5 +25,3 @@ struct dirent *readdir(DIR *dir) dir->tell = de->d_off; return de; } - -weak_alias(readdir, readdir64); diff --git a/lib/libc/musl/src/dirent/readdir_r.c b/lib/libc/musl/src/dirent/readdir_r.c index e2a818f36a..0d5de5f56d 100644 --- a/lib/libc/musl/src/dirent/readdir_r.c +++ b/lib/libc/musl/src/dirent/readdir_r.c @@ -25,5 +25,3 @@ int readdir_r(DIR *restrict dir, struct dirent *restrict buf, struct dirent **re *result = buf; return 0; } - -weak_alias(readdir_r, readdir64_r); diff --git a/lib/libc/musl/src/dirent/scandir.c b/lib/libc/musl/src/dirent/scandir.c index 7ee195dd8a..7456b9b8bc 100644 --- a/lib/libc/musl/src/dirent/scandir.c +++ b/lib/libc/musl/src/dirent/scandir.c @@ -43,5 +43,3 @@ int scandir(const char *path, struct dirent ***res, *res = names; return cnt; } - -weak_alias(scandir, scandir64); diff --git a/lib/libc/musl/src/dirent/versionsort.c b/lib/libc/musl/src/dirent/versionsort.c index d4c489230a..9769610518 100644 --- a/lib/libc/musl/src/dirent/versionsort.c +++ b/lib/libc/musl/src/dirent/versionsort.c @@ -6,6 +6,3 @@ int versionsort(const struct dirent **a, const struct dirent **b) { return strverscmp((*a)->d_name, (*b)->d_name); } - -#undef versionsort64 -weak_alias(versionsort, versionsort64); diff --git a/lib/libc/musl/src/fcntl/creat.c b/lib/libc/musl/src/fcntl/creat.c index 8f8aab6463..c9c43910d8 100644 --- a/lib/libc/musl/src/fcntl/creat.c +++ b/lib/libc/musl/src/fcntl/creat.c @@ -4,5 +4,3 @@ int creat(const char *filename, mode_t mode) { return open(filename, O_CREAT|O_WRONLY|O_TRUNC, mode); } - -weak_alias(creat, creat64); diff --git a/lib/libc/musl/src/fcntl/open.c b/lib/libc/musl/src/fcntl/open.c index 1d817a2d6c..4c3c82759c 100644 --- a/lib/libc/musl/src/fcntl/open.c +++ b/lib/libc/musl/src/fcntl/open.c @@ -19,5 +19,3 @@ int open(const char *filename, int flags, ...) return __syscall_ret(fd); } - -weak_alias(open, open64); diff --git a/lib/libc/musl/src/fcntl/openat.c b/lib/libc/musl/src/fcntl/openat.c index ad165ec323..83a9e0d008 100644 --- a/lib/libc/musl/src/fcntl/openat.c +++ b/lib/libc/musl/src/fcntl/openat.c @@ -15,5 +15,3 @@ int openat(int fd, const char *filename, int flags, ...) return syscall_cp(SYS_openat, fd, filename, flags|O_LARGEFILE, mode); } - -weak_alias(openat, openat64); diff --git a/lib/libc/musl/src/fcntl/posix_fadvise.c b/lib/libc/musl/src/fcntl/posix_fadvise.c index 75b8e1aed8..07346d21ae 100644 --- a/lib/libc/musl/src/fcntl/posix_fadvise.c +++ b/lib/libc/musl/src/fcntl/posix_fadvise.c @@ -14,5 +14,3 @@ int posix_fadvise(int fd, off_t base, off_t len, int advice) __SYSCALL_LL_E(len), advice); #endif } - -weak_alias(posix_fadvise, posix_fadvise64); diff --git a/lib/libc/musl/src/fcntl/posix_fallocate.c b/lib/libc/musl/src/fcntl/posix_fallocate.c index c57a24aef4..80a65cbfd6 100644 --- a/lib/libc/musl/src/fcntl/posix_fallocate.c +++ b/lib/libc/musl/src/fcntl/posix_fallocate.c @@ -6,5 +6,3 @@ int posix_fallocate(int fd, off_t base, off_t len) return -__syscall(SYS_fallocate, fd, 0, __SYSCALL_LL_E(base), __SYSCALL_LL_E(len)); } - -weak_alias(posix_fallocate, posix_fallocate64); diff --git a/lib/libc/musl/src/include/sys/stat.h b/lib/libc/musl/src/include/sys/stat.h new file mode 100644 index 0000000000..59339beecb --- /dev/null +++ b/lib/libc/musl/src/include/sys/stat.h @@ -0,0 +1,9 @@ +#ifndef SYS_STAT_H +#define SYS_STAT_H + +#include "../../../include/sys/stat.h" + +hidden int __fstat(int, struct stat *); +hidden int __fstatat(int, const char *restrict, struct stat *restrict, int); + +#endif diff --git a/lib/libc/musl/src/internal/dynlink.h b/lib/libc/musl/src/internal/dynlink.h index 51c0639ff4..06f41d0985 100644 --- a/lib/libc/musl/src/internal/dynlink.h +++ b/lib/libc/musl/src/internal/dynlink.h @@ -92,8 +92,12 @@ struct fdpic_dummy_loadmap { #define DT_DEBUG_INDIRECT 0 #endif +#ifndef DT_DEBUG_INDIRECT_REL +#define DT_DEBUG_INDIRECT_REL 0 +#endif + #define AUX_CNT 32 -#define DYN_CNT 32 +#define DYN_CNT 37 typedef void (*stage2_func)(unsigned char *, size_t *); diff --git a/lib/libc/musl/src/internal/fork_impl.h b/lib/libc/musl/src/internal/fork_impl.h index 5892c13bf9..354e733b91 100644 --- a/lib/libc/musl/src/internal/fork_impl.h +++ b/lib/libc/musl/src/internal/fork_impl.h @@ -2,7 +2,6 @@ extern hidden volatile int *const __at_quick_exit_lockptr; extern hidden volatile int *const __atexit_lockptr; -extern hidden volatile int *const __dlerror_lockptr; extern hidden volatile int *const __gettext_lockptr; extern hidden volatile int *const __locale_lockptr; extern hidden volatile int *const __random_lockptr; @@ -17,3 +16,4 @@ extern hidden volatile int *const __vmlock_lockptr; hidden void __malloc_atfork(int); hidden void __ldso_atfork(int); +hidden void __pthread_key_atfork(int); diff --git a/lib/libc/musl/src/internal/ksigaction.h b/lib/libc/musl/src/internal/ksigaction.h index 8ebd593835..ef333f33cc 100644 --- a/lib/libc/musl/src/internal/ksigaction.h +++ b/lib/libc/musl/src/internal/ksigaction.h @@ -6,8 +6,13 @@ struct k_sigaction { void (*handler)(int); unsigned long flags; +#ifdef SA_RESTORER void (*restorer)(void); +#endif unsigned mask[2]; +#ifndef SA_RESTORER + void *unused; +#endif }; hidden void __restore(), __restore_rt(); diff --git a/lib/libc/musl/src/internal/syscall.h b/lib/libc/musl/src/internal/syscall.h index d5f294d437..4a44615706 100644 --- a/lib/libc/musl/src/internal/syscall.h +++ b/lib/libc/musl/src/internal/syscall.h @@ -58,7 +58,7 @@ hidden long __syscall_ret(unsigned long), #define __syscall_cp(...) __SYSCALL_DISP(__syscall_cp,__VA_ARGS__) #define syscall_cp(...) __syscall_ret(__syscall_cp(__VA_ARGS__)) -static inline long __alt_socketcall(int sys, int sock, int cp, long a, long b, long c, long d, long e, long f) +static inline long __alt_socketcall(int sys, int sock, int cp, syscall_arg_t a, syscall_arg_t b, syscall_arg_t c, syscall_arg_t d, syscall_arg_t e, syscall_arg_t f) { long r; if (cp) r = __syscall_cp(sys, a, b, c, d, e, f); @@ -71,9 +71,9 @@ static inline long __alt_socketcall(int sys, int sock, int cp, long a, long b, l return r; } #define __socketcall(nm, a, b, c, d, e, f) __alt_socketcall(SYS_##nm, __SC_##nm, 0, \ - (long)(a), (long)(b), (long)(c), (long)(d), (long)(e), (long)(f)) + __scc(a), __scc(b), __scc(c), __scc(d), __scc(e), __scc(f)) #define __socketcall_cp(nm, a, b, c, d, e, f) __alt_socketcall(SYS_##nm, __SC_##nm, 1, \ - (long)(a), (long)(b), (long)(c), (long)(d), (long)(e), (long)(f)) + __scc(a), __scc(b), __scc(c), __scc(d), __scc(e), __scc(f)) /* fixup legacy 16-bit junk */ @@ -201,43 +201,43 @@ static inline long __alt_socketcall(int sys, int sock, int cp, long a, long b, l #define SYS_sendfile SYS_sendfile64 #endif -#ifndef SYS_timer_settime +#ifdef SYS_timer_settime32 #define SYS_timer_settime SYS_timer_settime32 #endif -#ifndef SYS_timer_gettime +#ifdef SYS_timer_gettime32 #define SYS_timer_gettime SYS_timer_gettime32 #endif -#ifndef SYS_timerfd_settime +#ifdef SYS_timerfd_settime32 #define SYS_timerfd_settime SYS_timerfd_settime32 #endif -#ifndef SYS_timerfd_gettime +#ifdef SYS_timerfd_gettime32 #define SYS_timerfd_gettime SYS_timerfd_gettime32 #endif -#ifndef SYS_clock_settime +#ifdef SYS_clock_settime32 #define SYS_clock_settime SYS_clock_settime32 #endif -#ifndef SYS_clock_gettime +#ifdef SYS_clock_gettime32 #define SYS_clock_gettime SYS_clock_gettime32 #endif -#ifndef SYS_clock_getres +#ifdef SYS_clock_getres_time32 #define SYS_clock_getres SYS_clock_getres_time32 #endif -#ifndef SYS_clock_nanosleep +#ifdef SYS_clock_nanosleep_time32 #define SYS_clock_nanosleep SYS_clock_nanosleep_time32 #endif -#ifndef SYS_gettimeofday +#ifdef SYS_gettimeofday_time32 #define SYS_gettimeofday SYS_gettimeofday_time32 #endif -#ifndef SYS_settimeofday +#ifdef SYS_settimeofday_time32 #define SYS_settimeofday SYS_settimeofday_time32 #endif diff --git a/lib/libc/musl/src/internal/version.h b/lib/libc/musl/src/internal/version.h index a9327dd446..36bfc49c87 100644 --- a/lib/libc/musl/src/internal/version.h +++ b/lib/libc/musl/src/internal/version.h @@ -1 +1 @@ -#define VERSION "1.2.3" +#define VERSION "1.2.4" diff --git a/lib/libc/musl/src/ipc/semtimedop.c b/lib/libc/musl/src/ipc/semtimedop.c index 1632e7b03f..a104af2189 100644 --- a/lib/libc/musl/src/ipc/semtimedop.c +++ b/lib/libc/musl/src/ipc/semtimedop.c @@ -7,7 +7,8 @@ #define IS32BIT(x) !((x)+0x80000000ULL>>32) #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) -#if !defined(SYS_semtimedop) && !defined(SYS_ipc) +#if !defined(SYS_semtimedop) && !defined(SYS_ipc) || \ + SYS_semtimedop == SYS_semtimedop_time64 #define NO_TIME32 1 #else #define NO_TIME32 0 diff --git a/lib/libc/musl/src/ldso/dlerror.c b/lib/libc/musl/src/ldso/dlerror.c index afe59253ea..dae0f3a9b2 100644 --- a/lib/libc/musl/src/ldso/dlerror.c +++ b/lib/libc/musl/src/ldso/dlerror.c @@ -3,8 +3,7 @@ #include #include "pthread_impl.h" #include "dynlink.h" -#include "lock.h" -#include "fork_impl.h" +#include "atomic.h" #define malloc __libc_malloc #define calloc __libc_calloc @@ -23,28 +22,31 @@ char *dlerror() return s; } -static volatile int freebuf_queue_lock[1]; -static void **freebuf_queue; -volatile int *const __dlerror_lockptr = freebuf_queue_lock; +/* Atomic singly-linked list, used to store list of thread-local dlerror + * buffers for deferred free. They cannot be freed at thread exit time + * because, by the time it's known they can be freed, the exiting thread + * is in a highly restrictive context where it cannot call (even the + * libc-internal) free. It also can't take locks; thus the atomic list. */ + +static void *volatile freebuf_queue; void __dl_thread_cleanup(void) { pthread_t self = __pthread_self(); - if (self->dlerror_buf && self->dlerror_buf != (void *)-1) { - LOCK(freebuf_queue_lock); - void **p = (void **)self->dlerror_buf; - *p = freebuf_queue; - freebuf_queue = p; - UNLOCK(freebuf_queue_lock); - } + if (!self->dlerror_buf || self->dlerror_buf == (void *)-1) + return; + void *h; + do { + h = freebuf_queue; + *(void **)self->dlerror_buf = h; + } while (a_cas_p(&freebuf_queue, h, self->dlerror_buf) != h); } hidden void __dl_vseterr(const char *fmt, va_list ap) { - LOCK(freebuf_queue_lock); - void **q = freebuf_queue; - freebuf_queue = 0; - UNLOCK(freebuf_queue_lock); + void **q; + do q = freebuf_queue; + while (q && a_cas_p(&freebuf_queue, q, 0) != q); while (q) { void **p = *q; diff --git a/lib/libc/musl/src/legacy/ftw.c b/lib/libc/musl/src/legacy/ftw.c index 506bd29ced..e757fc6f0c 100644 --- a/lib/libc/musl/src/legacy/ftw.c +++ b/lib/libc/musl/src/legacy/ftw.c @@ -7,5 +7,3 @@ int ftw(const char *path, int (*fn)(const char *, const struct stat *, int), int * actually undefined, but works on all real-world machines. */ return nftw(path, (int (*)())fn, fd_limit, FTW_PHYS); } - -weak_alias(ftw, ftw64); diff --git a/lib/libc/musl/src/linux/epoll.c b/lib/libc/musl/src/linux/epoll.c index 93baa8147e..e56e8f4c82 100644 --- a/lib/libc/musl/src/linux/epoll.c +++ b/lib/libc/musl/src/linux/epoll.c @@ -5,6 +5,7 @@ int epoll_create(int size) { + if (size<=0) return __syscall_ret(-EINVAL); return epoll_create1(0); } diff --git a/lib/libc/musl/src/linux/fallocate.c b/lib/libc/musl/src/linux/fallocate.c index 7d68bc8f64..9146350e3c 100644 --- a/lib/libc/musl/src/linux/fallocate.c +++ b/lib/libc/musl/src/linux/fallocate.c @@ -7,6 +7,3 @@ int fallocate(int fd, int mode, off_t base, off_t len) return syscall(SYS_fallocate, fd, mode, __SYSCALL_LL_E(base), __SYSCALL_LL_E(len)); } - -#undef fallocate64 -weak_alias(fallocate, fallocate64); diff --git a/lib/libc/musl/src/linux/getdents.c b/lib/libc/musl/src/linux/getdents.c index 796c1e5c92..97f76e1479 100644 --- a/lib/libc/musl/src/linux/getdents.c +++ b/lib/libc/musl/src/linux/getdents.c @@ -8,5 +8,3 @@ int getdents(int fd, struct dirent *buf, size_t len) if (len>INT_MAX) len = INT_MAX; return syscall(SYS_getdents, fd, buf, len); } - -weak_alias(getdents, getdents64); diff --git a/lib/libc/musl/src/linux/membarrier.c b/lib/libc/musl/src/linux/membarrier.c index 343f7360ee..f64fe7e189 100644 --- a/lib/libc/musl/src/linux/membarrier.c +++ b/lib/libc/musl/src/linux/membarrier.c @@ -35,7 +35,7 @@ int __membarrier(int cmd, int flags) __tl_lock(); sem_init(&barrier_sem, 0, 0); struct sigaction sa = { - .sa_flags = SA_RESTART, + .sa_flags = SA_RESTART | SA_ONSTACK, .sa_handler = bcast_barrier }; memset(&sa.sa_mask, -1, sizeof sa.sa_mask); diff --git a/lib/libc/musl/src/linux/prlimit.c b/lib/libc/musl/src/linux/prlimit.c index 3df9ffba7a..fcf45aaba5 100644 --- a/lib/libc/musl/src/linux/prlimit.c +++ b/lib/libc/musl/src/linux/prlimit.c @@ -21,6 +21,3 @@ int prlimit(pid_t pid, int resource, const struct rlimit *new_limit, struct rlim } return r; } - -#undef prlimit64 -weak_alias(prlimit, prlimit64); diff --git a/lib/libc/musl/src/linux/sendfile.c b/lib/libc/musl/src/linux/sendfile.c index 9afe6dd61c..fc1577d343 100644 --- a/lib/libc/musl/src/linux/sendfile.c +++ b/lib/libc/musl/src/linux/sendfile.c @@ -5,5 +5,3 @@ ssize_t sendfile(int out_fd, int in_fd, off_t *ofs, size_t count) { return syscall(SYS_sendfile, out_fd, in_fd, ofs, count); } - -weak_alias(sendfile, sendfile64); diff --git a/lib/libc/musl/src/linux/wait4.c b/lib/libc/musl/src/linux/wait4.c index 83650e34a8..ff2e3e6649 100644 --- a/lib/libc/musl/src/linux/wait4.c +++ b/lib/libc/musl/src/linux/wait4.c @@ -12,7 +12,7 @@ pid_t wait4(pid_t pid, int *status, int options, struct rusage *ru) if (ru) { long long kru64[18]; r = __syscall(SYS_wait4_time64, pid, status, options, kru64); - if (!r) { + if (r > 0) { ru->ru_utime = (struct timeval) { .tv_sec = kru64[0], .tv_usec = kru64[1] }; ru->ru_stime = (struct timeval) diff --git a/lib/libc/musl/src/malloc/mallocng/free.c b/lib/libc/musl/src/malloc/mallocng/free.c index 418a085c18..43f32aade8 100644 --- a/lib/libc/musl/src/malloc/mallocng/free.c +++ b/lib/libc/musl/src/malloc/mallocng/free.c @@ -119,7 +119,7 @@ void free(void *p) if (((uintptr_t)(start-1) ^ (uintptr_t)end) >= 2*PGSZ && g->last_idx) { unsigned char *base = start + (-(uintptr_t)start & (PGSZ-1)); size_t len = (end-base) & -PGSZ; - if (len) { + if (len && USE_MADV_FREE) { int e = errno; madvise(base, len, MADV_FREE); errno = e; diff --git a/lib/libc/musl/src/malloc/mallocng/glue.h b/lib/libc/musl/src/malloc/mallocng/glue.h index 151c48b804..77f4c812b2 100644 --- a/lib/libc/musl/src/malloc/mallocng/glue.h +++ b/lib/libc/musl/src/malloc/mallocng/glue.h @@ -24,6 +24,8 @@ #define realloc __libc_realloc #define free __libc_free +#define USE_MADV_FREE 0 + #if USE_REAL_ASSERT #include #else diff --git a/lib/libc/musl/src/math/logf.c b/lib/libc/musl/src/math/logf.c index 7ee5d7fe62..e4c2237caa 100644 --- a/lib/libc/musl/src/math/logf.c +++ b/lib/libc/musl/src/math/logf.c @@ -53,7 +53,7 @@ float logf(float x) tmp = ix - OFF; i = (tmp >> (23 - LOGF_TABLE_BITS)) % N; k = (int32_t)tmp >> 23; /* arithmetic shift */ - iz = ix - (tmp & 0x1ff << 23); + iz = ix - (tmp & 0xff800000); invc = T[i].invc; logc = T[i].logc; z = (double_t)asfloat(iz); diff --git a/lib/libc/musl/src/misc/getopt.c b/lib/libc/musl/src/misc/getopt.c index c3f6699559..b02b81c343 100644 --- a/lib/libc/musl/src/misc/getopt.c +++ b/lib/libc/musl/src/misc/getopt.c @@ -87,7 +87,8 @@ int getopt(int argc, char * const argv[], const char *optstring) if (optstring[i] == ':') { optarg = 0; if (optstring[i+1] != ':' || optpos) { - optarg = argv[optind++] + optpos; + optarg = argv[optind++]; + if (optpos) optarg += optpos; optpos = 0; } if (optind > argc) { diff --git a/lib/libc/musl/src/misc/getrlimit.c b/lib/libc/musl/src/misc/getrlimit.c index 2ab2f0f4fa..a5558d8151 100644 --- a/lib/libc/musl/src/misc/getrlimit.c +++ b/lib/libc/musl/src/misc/getrlimit.c @@ -6,12 +6,13 @@ int getrlimit(int resource, struct rlimit *rlim) { - unsigned long k_rlim[2]; int ret = syscall(SYS_prlimit64, 0, resource, 0, rlim); if (!ret) { FIX(rlim->rlim_cur); FIX(rlim->rlim_max); } +#ifdef SYS_getrlimit + unsigned long k_rlim[2]; if (!ret || errno != ENOSYS) return ret; if (syscall(SYS_getrlimit, resource, k_rlim) < 0) @@ -21,6 +22,7 @@ int getrlimit(int resource, struct rlimit *rlim) FIX(rlim->rlim_cur); FIX(rlim->rlim_max); return 0; +#else + return ret; +#endif } - -weak_alias(getrlimit, getrlimit64); diff --git a/lib/libc/musl/src/misc/lockf.c b/lib/libc/musl/src/misc/lockf.c index 16a80bec13..0162442b0b 100644 --- a/lib/libc/musl/src/misc/lockf.c +++ b/lib/libc/musl/src/misc/lockf.c @@ -28,5 +28,3 @@ int lockf(int fd, int op, off_t size) errno = EINVAL; return -1; } - -weak_alias(lockf, lockf64); diff --git a/lib/libc/musl/src/misc/mntent.c b/lib/libc/musl/src/misc/mntent.c index eabb8200bf..d404fbe392 100644 --- a/lib/libc/musl/src/misc/mntent.c +++ b/lib/libc/musl/src/misc/mntent.c @@ -2,6 +2,7 @@ #include #include #include +#include static char *internal_buf; static size_t internal_bufsize; @@ -21,7 +22,8 @@ int endmntent(FILE *f) struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int buflen) { - int cnt, n[8], use_internal = (linebuf == SENTINEL); + int n[8], use_internal = (linebuf == SENTINEL); + size_t len, i; mnt->mnt_freq = 0; mnt->mnt_passno = 0; @@ -39,10 +41,14 @@ struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int bufle errno = ERANGE; return 0; } - cnt = sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d", + + len = strlen(linebuf); + if (len > INT_MAX) continue; + for (i = 0; i < sizeof n / sizeof *n; i++) n[i] = len; + sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%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 (cnt < 2 || linebuf[n[0]] == '#'); + } while (linebuf[n[0]] == '#' || n[1]==len); linebuf[n[1]] = 0; linebuf[n[3]] = 0; diff --git a/lib/libc/musl/src/misc/nftw.c b/lib/libc/musl/src/misc/nftw.c index 8dcff7fefd..71bc62eecd 100644 --- a/lib/libc/musl/src/misc/nftw.c +++ b/lib/libc/musl/src/misc/nftw.c @@ -31,6 +31,8 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, int err; struct FTW lev; + st.st_dev = st.st_ino = 0; + if ((flags & FTW_PHYS) ? lstat(path, &st) : stat(path, &st) < 0) { if (!(flags & FTW_PHYS) && errno==ENOENT && !lstat(path, &st)) type = FTW_SLN; @@ -46,7 +48,7 @@ static int do_nftw(char *path, int (*fn)(const char *, const struct stat *, int, type = FTW_F; } - if ((flags & FTW_MOUNT) && h && st.st_dev != h->dev) + if ((flags & FTW_MOUNT) && h && type != FTW_NS && st.st_dev != h->dev) return 0; new.chain = h; @@ -138,5 +140,3 @@ int nftw(const char *path, int (*fn)(const char *, const struct stat *, int, str pthread_setcancelstate(cs, 0); return r; } - -weak_alias(nftw, nftw64); diff --git a/lib/libc/musl/src/misc/setrlimit.c b/lib/libc/musl/src/misc/setrlimit.c index 8340aee096..edb413fa78 100644 --- a/lib/libc/musl/src/misc/setrlimit.c +++ b/lib/libc/musl/src/misc/setrlimit.c @@ -12,12 +12,14 @@ struct ctx { int err; }; +#ifdef SYS_setrlimit static void do_setrlimit(void *p) { struct ctx *c = p; if (c->err>0) return; c->err = -__syscall(SYS_setrlimit, c->res, c->lim); } +#endif int setrlimit(int resource, const struct rlimit *rlim) { @@ -29,6 +31,7 @@ int setrlimit(int resource, const struct rlimit *rlim) rlim = &tmp; } int ret = __syscall(SYS_prlimit64, 0, resource, rlim, 0); +#ifdef SYS_setrlimit if (ret != -ENOSYS) return __syscall_ret(ret); struct ctx c = { @@ -42,6 +45,7 @@ int setrlimit(int resource, const struct rlimit *rlim) return -1; } return 0; +#else + return __syscall_ret(ret); +#endif } - -weak_alias(setrlimit, setrlimit64); diff --git a/lib/libc/musl/src/mman/mmap.c b/lib/libc/musl/src/mman/mmap.c index eff88d82a8..43e5e02941 100644 --- a/lib/libc/musl/src/mman/mmap.c +++ b/lib/libc/musl/src/mman/mmap.c @@ -37,5 +37,3 @@ void *__mmap(void *start, size_t len, int prot, int flags, int fd, off_t off) } weak_alias(__mmap, mmap); - -weak_alias(mmap, mmap64); diff --git a/lib/libc/musl/src/mq/mq_notify.c b/lib/libc/musl/src/mq/mq_notify.c index 221591c73a..0e1e6c7ab7 100644 --- a/lib/libc/musl/src/mq/mq_notify.c +++ b/lib/libc/musl/src/mq/mq_notify.c @@ -4,11 +4,14 @@ #include #include #include +#include #include "syscall.h" struct args { - pthread_barrier_t barrier; + sem_t sem; int sock; + mqd_t mqd; + int err; const struct sigevent *sev; }; @@ -20,8 +23,19 @@ static void *start(void *p) int s = args->sock; void (*func)(union sigval) = args->sev->sigev_notify_function; union sigval val = args->sev->sigev_value; + struct sigevent sev2; + static const char zeros[32]; + int err; + + sev2.sigev_notify = SIGEV_THREAD; + sev2.sigev_signo = s; + sev2.sigev_value.sival_ptr = (void *)&zeros; + + args->err = err = -__syscall(SYS_mq_notify, args->mqd, &sev2); + sem_post(&args->sem); + if (err) return 0; - pthread_barrier_wait(&args->barrier); + pthread_detach(pthread_self()); n = recv(s, buf, sizeof(buf), MSG_NOSIGNAL|MSG_WAITALL); close(s); if (n==sizeof buf && buf[sizeof buf - 1] == 1) @@ -35,8 +49,8 @@ int mq_notify(mqd_t mqd, const struct sigevent *sev) pthread_attr_t attr; pthread_t td; int s; - struct sigevent sev2; - static const char zeros[32]; + int cs; + sigset_t allmask, origmask; if (!sev || sev->sigev_notify != SIGEV_THREAD) return syscall(SYS_mq_notify, mqd, sev); @@ -44,30 +58,35 @@ int mq_notify(mqd_t mqd, const struct sigevent *sev) s = socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, 0); if (s < 0) return -1; args.sock = s; + args.mqd = mqd; if (sev->sigev_notify_attributes) attr = *sev->sigev_notify_attributes; else pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - pthread_barrier_init(&args.barrier, 0, 2); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + sem_init(&args.sem, 0, 0); + sigfillset(&allmask); + pthread_sigmask(SIG_BLOCK, &allmask, &origmask); if (pthread_create(&td, &attr, start, &args)) { __syscall(SYS_close, s); + pthread_sigmask(SIG_SETMASK, &origmask, 0); errno = EAGAIN; return -1; } + pthread_sigmask(SIG_SETMASK, &origmask, 0); - pthread_barrier_wait(&args.barrier); - pthread_barrier_destroy(&args.barrier); - - sev2.sigev_notify = SIGEV_THREAD; - sev2.sigev_signo = s; - sev2.sigev_value.sival_ptr = (void *)&zeros; + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); + sem_wait(&args.sem); + sem_destroy(&args.sem); - if (syscall(SYS_mq_notify, mqd, &sev2) < 0) { - pthread_cancel(td); + if (args.err) { __syscall(SYS_close, s); + pthread_join(td, 0); + pthread_setcancelstate(cs, 0); + errno = args.err; return -1; } + pthread_setcancelstate(cs, 0); return 0; } diff --git a/lib/libc/musl/src/network/accept4.c b/lib/libc/musl/src/network/accept4.c index 59ab1726bd..765a38edc3 100644 --- a/lib/libc/musl/src/network/accept4.c +++ b/lib/libc/musl/src/network/accept4.c @@ -9,6 +9,10 @@ int accept4(int fd, struct sockaddr *restrict addr, socklen_t *restrict len, int if (!flg) return accept(fd, addr, len); int ret = socketcall_cp(accept4, fd, addr, len, flg, 0, 0); if (ret>=0 || (errno != ENOSYS && errno != EINVAL)) return ret; + if (flg & ~(SOCK_CLOEXEC|SOCK_NONBLOCK)) { + errno = EINVAL; + return -1; + } ret = accept(fd, addr, len); if (ret<0) return ret; if (flg & SOCK_CLOEXEC) diff --git a/lib/libc/musl/src/network/dns_parse.c b/lib/libc/musl/src/network/dns_parse.c index e6ee19d9a6..7f83e791ab 100644 --- a/lib/libc/musl/src/network/dns_parse.c +++ b/lib/libc/musl/src/network/dns_parse.c @@ -1,7 +1,7 @@ #include #include "lookup.h" -int __dns_parse(const unsigned char *r, int rlen, int (*callback)(void *, int, const void *, int, const void *), void *ctx) +int __dns_parse(const unsigned char *r, int rlen, int (*callback)(void *, int, const void *, int, const void *, int), void *ctx) { int qdcount, ancount; const unsigned char *p; @@ -15,18 +15,18 @@ int __dns_parse(const unsigned char *r, int rlen, int (*callback)(void *, int, c if (qdcount+ancount > 64) return -1; while (qdcount--) { while (p-r < rlen && *p-1U < 127) p++; - if (*p>193 || (*p==193 && p[1]>254) || p>r+rlen-6) + if (p>r+rlen-6 || *p>193 || (*p==193 && p[1]>254)) return -1; p += 5 + !!*p; } while (ancount--) { while (p-r < rlen && *p-1U < 127) p++; - if (*p>193 || (*p==193 && p[1]>254) || p>r+rlen-6) + if (p>r+rlen-12 || *p>193 || (*p==193 && p[1]>254)) return -1; p += 1 + !!*p; len = p[8]*256 + p[9]; - if (p+len > r+rlen) return -1; - if (callback(ctx, p[1], p+10, len, r) < 0) return -1; + if (len+10 > r+rlen-p) return -1; + if (callback(ctx, p[1], p+10, len, r, rlen) < 0) return -1; p += 10 + len; } return 0; diff --git a/lib/libc/musl/src/network/gai_strerror.c b/lib/libc/musl/src/network/gai_strerror.c index 9596580e9f..56b7150313 100644 --- a/lib/libc/musl/src/network/gai_strerror.c +++ b/lib/libc/musl/src/network/gai_strerror.c @@ -6,7 +6,7 @@ static const char msgs[] = "Name does not resolve\0" "Try again\0" "Non-recoverable error\0" - "Unknown error\0" + "Name has no usable address\0" "Unrecognized address family or invalid length\0" "Unrecognized socket type\0" "Unrecognized service\0" diff --git a/lib/libc/musl/src/network/getaddrinfo.c b/lib/libc/musl/src/network/getaddrinfo.c index efaab30682..64ad259aca 100644 --- a/lib/libc/musl/src/network/getaddrinfo.c +++ b/lib/libc/musl/src/network/getaddrinfo.c @@ -16,6 +16,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru char canon[256], *outcanon; int nservs, naddrs, nais, canon_len, i, j, k; int family = AF_UNSPEC, flags = 0, proto = 0, socktype = 0; + int no_family = 0; struct aibuf *out; if (!host && !serv) return EAI_NONAME; @@ -66,9 +67,11 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru pthread_setcancelstate( PTHREAD_CANCEL_DISABLE, &cs); int r = connect(s, ta[i], tl[i]); + int saved_errno = errno; pthread_setcancelstate(cs, 0); close(s); if (!r) continue; + errno = saved_errno; } switch (errno) { case EADDRNOTAVAIL: @@ -80,7 +83,7 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru default: return EAI_SYSTEM; } - if (family == tf[i]) return EAI_NONAME; + if (family == tf[i]) no_family = 1; family = tf[1-i]; } } @@ -91,6 +94,8 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru naddrs = __lookup_name(addrs, canon, host, family, flags); if (naddrs < 0) return naddrs; + if (no_family) return EAI_NODATA; + nais = nservs * naddrs; canon_len = strlen(canon); out = calloc(1, nais * sizeof(*out) + canon_len + 1); diff --git a/lib/libc/musl/src/network/gethostbyaddr.c b/lib/libc/musl/src/network/gethostbyaddr.c index 598e2241a9..c3cacaac14 100644 --- a/lib/libc/musl/src/network/gethostbyaddr.c +++ b/lib/libc/musl/src/network/gethostbyaddr.c @@ -20,5 +20,5 @@ struct hostent *gethostbyaddr(const void *a, socklen_t l, int af) err = gethostbyaddr_r(a, l, af, h, (void *)(h+1), size-sizeof *h, &res, &h_errno); } while (err == ERANGE); - return err ? 0 : h; + return res; } diff --git a/lib/libc/musl/src/network/gethostbyaddr_r.c b/lib/libc/musl/src/network/gethostbyaddr_r.c index 0f1e61aa0c..ceaf3935cf 100644 --- a/lib/libc/musl/src/network/gethostbyaddr_r.c +++ b/lib/libc/musl/src/network/gethostbyaddr_r.c @@ -54,9 +54,10 @@ int gethostbyaddr_r(const void *a, socklen_t l, int af, case EAI_OVERFLOW: return ERANGE; default: - case EAI_MEMORY: - case EAI_SYSTEM: case EAI_FAIL: + *err = NO_RECOVERY; + return EBADMSG; + case EAI_SYSTEM: *err = NO_RECOVERY; return errno; case 0: diff --git a/lib/libc/musl/src/network/gethostbyname2.c b/lib/libc/musl/src/network/gethostbyname2.c index dc9d6621be..bd0da7f806 100644 --- a/lib/libc/musl/src/network/gethostbyname2.c +++ b/lib/libc/musl/src/network/gethostbyname2.c @@ -21,5 +21,5 @@ struct hostent *gethostbyname2(const char *name, int af) err = gethostbyname2_r(name, af, h, (void *)(h+1), size-sizeof *h, &res, &h_errno); } while (err == ERANGE); - return err ? 0 : h; + return res; } diff --git a/lib/libc/musl/src/network/gethostbyname2_r.c b/lib/libc/musl/src/network/gethostbyname2_r.c index fc8948776d..a5eb67fe6d 100644 --- a/lib/libc/musl/src/network/gethostbyname2_r.c +++ b/lib/libc/musl/src/network/gethostbyname2_r.c @@ -22,7 +22,10 @@ int gethostbyname2_r(const char *name, int af, if (cnt<0) switch (cnt) { case EAI_NONAME: *err = HOST_NOT_FOUND; - return ENOENT; + return 0; + case EAI_NODATA: + *err = NO_DATA; + return 0; case EAI_AGAIN: *err = TRY_AGAIN; return EAGAIN; @@ -30,7 +33,6 @@ int gethostbyname2_r(const char *name, int af, case EAI_FAIL: *err = NO_RECOVERY; return EBADMSG; - case EAI_MEMORY: case EAI_SYSTEM: *err = NO_RECOVERY; return errno; diff --git a/lib/libc/musl/src/network/getifaddrs.c b/lib/libc/musl/src/network/getifaddrs.c index fed75bd8d9..74df4d6c6a 100644 --- a/lib/libc/musl/src/network/getifaddrs.c +++ b/lib/libc/musl/src/network/getifaddrs.c @@ -39,8 +39,8 @@ struct ifaddrs_storage { }; struct ifaddrs_ctx { - struct ifaddrs_storage *first; - struct ifaddrs_storage *last; + struct ifaddrs *first; + struct ifaddrs *last; struct ifaddrs_storage *hash[IFADDRS_HASH_SIZE]; }; @@ -195,9 +195,9 @@ static int netlink_msg_to_ifaddr(void *pctx, struct nlmsghdr *h) } if (ifs->ifa.ifa_name) { - if (!ctx->first) ctx->first = ifs; - if (ctx->last) ctx->last->ifa.ifa_next = &ifs->ifa; - ctx->last = ifs; + if (!ctx->first) ctx->first = &ifs->ifa; + if (ctx->last) ctx->last->ifa_next = &ifs->ifa; + ctx->last = &ifs->ifa; } else { free(ifs); } @@ -210,7 +210,7 @@ int getifaddrs(struct ifaddrs **ifap) int r; memset(ctx, 0, sizeof *ctx); r = __rtnetlink_enumerate(AF_UNSPEC, AF_UNSPEC, netlink_msg_to_ifaddr, ctx); - if (r == 0) *ifap = &ctx->first->ifa; - else freeifaddrs(&ctx->first->ifa); + if (r == 0) *ifap = ctx->first; + else freeifaddrs(ctx->first); return r; } diff --git a/lib/libc/musl/src/network/getnameinfo.c b/lib/libc/musl/src/network/getnameinfo.c index 949e18115a..7abe0fa9b9 100644 --- a/lib/libc/musl/src/network/getnameinfo.c +++ b/lib/libc/musl/src/network/getnameinfo.c @@ -58,6 +58,7 @@ static void reverse_hosts(char *buf, const unsigned char *a, unsigned scopeid, i if ((p=strchr(line, '#'))) *p++='\n', *p=0; for (p=line; *p && !isspace(*p); p++); + if (!*p) continue; *p++ = 0; if (__lookup_ipliteral(&iplit, line, AF_UNSPEC)<=0) continue; @@ -108,10 +109,10 @@ static void reverse_services(char *buf, int port, int dgram) __fclose_ca(f); } -static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet) +static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet, int plen) { if (rr != RR_PTR) return 0; - if (__dn_expand(packet, (const unsigned char *)packet + 512, + if (__dn_expand(packet, (const unsigned char *)packet + plen, data, c, 256) <= 0) *(char *)c = 0; return 0; diff --git a/lib/libc/musl/src/network/getservbyport_r.c b/lib/libc/musl/src/network/getservbyport_r.c index b7f21c6b39..e4cc3079c1 100644 --- a/lib/libc/musl/src/network/getservbyport_r.c +++ b/lib/libc/musl/src/network/getservbyport_r.c @@ -26,7 +26,7 @@ int getservbyport_r(int port, const char *prots, /* Align buffer */ i = (uintptr_t)buf & sizeof(char *)-1; if (!i) i = sizeof(char *); - if (buflen < 3*sizeof(char *)-i) + if (buflen <= 3*sizeof(char *)-i) return ERANGE; buf += sizeof(char *)-i; buflen -= sizeof(char *)-i; @@ -46,6 +46,8 @@ int getservbyport_r(int port, const char *prots, case EAI_MEMORY: case EAI_SYSTEM: return ENOMEM; + case EAI_OVERFLOW: + return ERANGE; default: return ENOENT; case 0: diff --git a/lib/libc/musl/src/network/inet_pton.c b/lib/libc/musl/src/network/inet_pton.c index d36c368917..bcbdd9ef29 100644 --- a/lib/libc/musl/src/network/inet_pton.c +++ b/lib/libc/musl/src/network/inet_pton.c @@ -54,6 +54,7 @@ int inet_pton(int af, const char *restrict s, void *restrict a0) if (s[j]!='.' || (i<6 && brk<0)) return 0; need_v4=1; i++; + ip[i&7]=0; break; } s += j+1; diff --git a/lib/libc/musl/src/network/lookup.h b/lib/libc/musl/src/network/lookup.h index ef66272567..54b2f8b5bf 100644 --- a/lib/libc/musl/src/network/lookup.h +++ b/lib/libc/musl/src/network/lookup.h @@ -50,6 +50,6 @@ hidden int __lookup_ipliteral(struct address buf[static 1], const char *name, in hidden int __get_resolv_conf(struct resolvconf *, char *, size_t); hidden int __res_msend_rc(int, const unsigned char *const *, const int *, unsigned char *const *, int *, int, const struct resolvconf *); -hidden int __dns_parse(const unsigned char *, int, int (*)(void *, int, const void *, int, const void *), void *); +hidden int __dns_parse(const unsigned char *, int, int (*)(void *, int, const void *, int, const void *, int), void *); #endif diff --git a/lib/libc/musl/src/network/lookup_ipliteral.c b/lib/libc/musl/src/network/lookup_ipliteral.c index 2fddab7373..1e76620656 100644 --- a/lib/libc/musl/src/network/lookup_ipliteral.c +++ b/lib/libc/musl/src/network/lookup_ipliteral.c @@ -15,7 +15,7 @@ int __lookup_ipliteral(struct address buf[static 1], const char *name, int famil struct in6_addr a6; if (__inet_aton(name, &a4) > 0) { if (family == AF_INET6) /* wrong family */ - return EAI_NONAME; + return EAI_NODATA; memcpy(&buf[0].addr, &a4, sizeof a4); buf[0].family = AF_INET; buf[0].scopeid = 0; @@ -34,7 +34,7 @@ int __lookup_ipliteral(struct address buf[static 1], const char *name, int famil if (inet_pton(AF_INET6, name, &a6) <= 0) return 0; if (family == AF_INET) /* wrong family */ - return EAI_NONAME; + return EAI_NODATA; memcpy(&buf[0].addr, &a6, sizeof a6); buf[0].family = AF_INET6; diff --git a/lib/libc/musl/src/network/lookup_name.c b/lib/libc/musl/src/network/lookup_name.c index aa558c197a..4281482efb 100644 --- a/lib/libc/musl/src/network/lookup_name.c +++ b/lib/libc/musl/src/network/lookup_name.c @@ -79,7 +79,7 @@ static int name_from_hosts(struct address buf[static MAXADDRS], char canon[stati case 0: continue; default: - badfam = EAI_NONAME; + badfam = EAI_NODATA; break; } @@ -102,45 +102,50 @@ struct dpc_ctx { struct address *addrs; char *canon; int cnt; + int rrtype; }; #define RR_A 1 #define RR_CNAME 5 #define RR_AAAA 28 -static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet) +#define ABUF_SIZE 768 + +static int dns_parse_callback(void *c, int rr, const void *data, int len, const void *packet, int plen) { char tmp[256]; + int family; struct dpc_ctx *ctx = c; - if (ctx->cnt >= MAXADDRS) return -1; + if (rr == RR_CNAME) { + if (__dn_expand(packet, (const unsigned char *)packet + plen, + data, tmp, sizeof tmp) > 0 && is_valid_hostname(tmp)) + strcpy(ctx->canon, tmp); + return 0; + } + if (ctx->cnt >= MAXADDRS) return 0; + if (rr != ctx->rrtype) return 0; switch (rr) { case RR_A: if (len != 4) return -1; - ctx->addrs[ctx->cnt].family = AF_INET; - ctx->addrs[ctx->cnt].scopeid = 0; - memcpy(ctx->addrs[ctx->cnt++].addr, data, 4); + family = AF_INET; break; case RR_AAAA: if (len != 16) return -1; - ctx->addrs[ctx->cnt].family = AF_INET6; - ctx->addrs[ctx->cnt].scopeid = 0; - memcpy(ctx->addrs[ctx->cnt++].addr, data, 16); - break; - case RR_CNAME: - if (__dn_expand(packet, (const unsigned char *)packet + 512, - data, tmp, sizeof tmp) > 0 && is_valid_hostname(tmp)) - strcpy(ctx->canon, tmp); + family = AF_INET6; break; } + ctx->addrs[ctx->cnt].family = family; + ctx->addrs[ctx->cnt].scopeid = 0; + memcpy(ctx->addrs[ctx->cnt++].addr, data, len); return 0; } static int name_from_dns(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family, const struct resolvconf *conf) { - unsigned char qbuf[2][280], abuf[2][512]; + unsigned char qbuf[2][280], abuf[2][ABUF_SIZE]; const unsigned char *qp[2] = { qbuf[0], qbuf[1] }; unsigned char *ap[2] = { abuf[0], abuf[1] }; - int qlens[2], alens[2]; + int qlens[2], alens[2], qtypes[2]; int i, nq = 0; struct dpc_ctx ctx = { .addrs = buf, .canon = canon }; static const struct { int af; int rr; } afrr[2] = { @@ -153,8 +158,12 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static qlens[nq] = __res_mkquery(0, name, 1, afrr[i].rr, 0, 0, 0, qbuf[nq], sizeof *qbuf); if (qlens[nq] == -1) - return EAI_NONAME; + return 0; + qtypes[nq] = afrr[i].rr; qbuf[nq][3] = 0; /* don't need AD flag */ + /* Ensure query IDs are distinct. */ + if (nq && qbuf[nq][0] == qbuf[0][0]) + qbuf[nq][0]++; nq++; } } @@ -168,11 +177,14 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static if ((abuf[i][3] & 15) != 0) return EAI_FAIL; } - for (i=0; i=0; i--) { + ctx.rrtype = qtypes[i]; + if (alens[i] > sizeof(abuf[i])) alens[i] = sizeof abuf[i]; __dns_parse(abuf[i], alens[i], dns_parse_callback, &ctx); + } if (ctx.cnt) return ctx.cnt; - return EAI_NONAME; + return EAI_NODATA; } static int name_from_dns_search(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family) diff --git a/lib/libc/musl/src/network/netlink.h b/lib/libc/musl/src/network/netlink.h index 38acb17892..873fabe2b8 100644 --- a/lib/libc/musl/src/network/netlink.h +++ b/lib/libc/musl/src/network/netlink.h @@ -86,7 +86,7 @@ struct ifaddrmsg { #define RTA_DATALEN(rta) ((rta)->rta_len-sizeof(struct rtattr)) #define RTA_DATAEND(rta) ((char*)(rta)+(rta)->rta_len) #define RTA_NEXT(rta) (struct rtattr*)((char*)(rta)+NETLINK_ALIGN((rta)->rta_len)) -#define RTA_OK(nlh,end) ((char*)(end)-(char*)(rta) >= sizeof(struct rtattr)) +#define RTA_OK(rta,end) ((char*)(end)-(char*)(rta) >= sizeof(struct rtattr)) #define NLMSG_RTA(nlh,len) ((void*)((char*)(nlh)+sizeof(struct nlmsghdr)+NETLINK_ALIGN(len))) #define NLMSG_RTAOK(rta,nlh) RTA_OK(rta,NLMSG_DATAEND(nlh)) diff --git a/lib/libc/musl/src/network/res_mkquery.c b/lib/libc/musl/src/network/res_mkquery.c index 33f50cb933..614bf7864b 100644 --- a/lib/libc/musl/src/network/res_mkquery.c +++ b/lib/libc/musl/src/network/res_mkquery.c @@ -13,6 +13,7 @@ int __res_mkquery(int op, const char *dname, int class, int type, int n; if (l && dname[l-1]=='.') l--; + if (l && dname[l-1]=='.') return -1; n = 17+l+!!l; if (l>253 || buflen15u || class>255u || type>255u) return -1; diff --git a/lib/libc/musl/src/network/res_msend.c b/lib/libc/musl/src/network/res_msend.c index 3e018009eb..86c2fcf4ff 100644 --- a/lib/libc/musl/src/network/res_msend.c +++ b/lib/libc/musl/src/network/res_msend.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -16,17 +17,65 @@ static void cleanup(void *p) { - __syscall(SYS_close, (intptr_t)p); + struct pollfd *pfd = p; + for (int i=0; pfd[i].fd >= -1; i++) + if (pfd[i].fd >= 0) __syscall(SYS_close, pfd[i].fd); } static unsigned long mtime() { struct timespec ts; - clock_gettime(CLOCK_REALTIME, &ts); + if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0 && errno == ENOSYS) + clock_gettime(CLOCK_REALTIME, &ts); return (unsigned long)ts.tv_sec * 1000 + ts.tv_nsec / 1000000; } +static int start_tcp(struct pollfd *pfd, int family, const void *sa, socklen_t sl, const unsigned char *q, int ql) +{ + struct msghdr mh = { + .msg_name = (void *)sa, + .msg_namelen = sl, + .msg_iovlen = 2, + .msg_iov = (struct iovec [2]){ + { .iov_base = (uint8_t[]){ ql>>8, ql }, .iov_len = 2 }, + { .iov_base = (void *)q, .iov_len = ql } } + }; + int r; + int fd = socket(family, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); + pfd->fd = fd; + pfd->events = POLLOUT; + if (!setsockopt(fd, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, + &(int){1}, sizeof(int))) { + r = sendmsg(fd, &mh, MSG_FASTOPEN|MSG_NOSIGNAL); + if (r == ql+2) pfd->events = POLLIN; + if (r >= 0) return r; + if (errno == EINPROGRESS) return 0; + } + r = connect(fd, sa, sl); + if (!r || errno == EINPROGRESS) return 0; + close(fd); + pfd->fd = -1; + return -1; +} + +static void step_mh(struct msghdr *mh, size_t n) +{ + /* Adjust iovec in msghdr to skip first n bytes. */ + while (mh->msg_iovlen && n >= mh->msg_iov->iov_len) { + n -= mh->msg_iov->iov_len; + mh->msg_iov++; + mh->msg_iovlen--; + } + if (!mh->msg_iovlen) return; + mh->msg_iov->iov_base = (char *)mh->msg_iov->iov_base + n; + mh->msg_iov->iov_len -= n; +} + +/* Internal contract for __res_msend[_rc]: asize must be >=512, nqueries + * must be sufficiently small to be safe as VLA size. In practice it's + * either 1 or 2, anyway. */ + int __res_msend_rc(int nqueries, const unsigned char *const *queries, const int *qlens, unsigned char *const *answers, int *alens, int asize, const struct resolvconf *conf) @@ -44,7 +93,10 @@ int __res_msend_rc(int nqueries, const unsigned char *const *queries, int next; int i, j; int cs; - struct pollfd pfd; + struct pollfd pfd[nqueries+2]; + int qpos[nqueries], apos[nqueries]; + unsigned char alen_buf[nqueries][2]; + int r; unsigned long t0, t1, t2; pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); @@ -68,29 +120,22 @@ int __res_msend_rc(int nqueries, const unsigned char *const *queries, } /* Get local address and open/bind a socket */ - sa.sin.sin_family = family; fd = socket(family, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); /* Handle case where system lacks IPv6 support */ if (fd < 0 && family == AF_INET6 && errno == EAFNOSUPPORT) { + for (i=0; ins[nns].family == AF_INET6; i++); + if (i==nns) { + pthread_setcancelstate(cs, 0); + return -1; + } fd = socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); family = AF_INET; + sl = sizeof sa.sin; } - if (fd < 0 || bind(fd, (void *)&sa, sl) < 0) { - if (fd >= 0) close(fd); - pthread_setcancelstate(cs, 0); - return -1; - } - - /* Past this point, there are no errors. Each individual query will - * yield either no reply (indicated by zero length) or an answer - * packet which is up to the caller to interpret. */ - - pthread_cleanup_push(cleanup, (void *)(intptr_t)fd); - pthread_setcancelstate(cs, 0); /* Convert any IPv4 addresses in a mixed environment to v4-mapped */ - if (family == AF_INET6) { + if (fd >= 0 && family == AF_INET6) { setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &(int){0}, sizeof 0); for (i=0; i= 0) close(fd); + pthread_setcancelstate(cs, 0); + return -1; + } + + /* Past this point, there are no errors. Each individual query will + * yield either no reply (indicated by zero length) or an answer + * packet which is up to the caller to interpret. */ + + for (i=0; i0; i++); + if (i==nqueries) break; + if (t2-t1 >= retry_interval) { /* Query all configured namservers in parallel */ for (i=0; i= 0) { + while (next < nqueries) { + struct msghdr mh = { + .msg_name = (void *)&sa, + .msg_namelen = sl, + .msg_iovlen = 1, + .msg_iov = (struct iovec []){ + { .iov_base = (void *)answers[next], + .iov_len = asize } + } + }; + rlen = recvmsg(fd, &mh, 0); + if (rlen < 0) break; /* Ignore non-identifiable packets */ if (rlen < 4) continue; @@ -170,12 +247,72 @@ int __res_msend_rc(int nqueries, const unsigned char *const *queries, else memcpy(answers[i], answers[next], rlen); - if (next == nqueries) goto out; + /* Ignore further UDP if all slots full or TCP-mode */ + if (next == nqueries) pfd[nqueries].events = 0; + + /* If answer is truncated (TC bit), fallback to TCP */ + if ((answers[i][2] & 2) || (mh.msg_flags & MSG_TRUNC)) { + alens[i] = -1; + pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, 0); + r = start_tcp(pfd+i, family, ns+j, sl, queries[i], qlens[i]); + pthread_setcancelstate(cs, 0); + if (r >= 0) { + qpos[i] = r; + apos[i] = 0; + } + continue; + } + } + + for (i=0; i>8, qlens[i] }, .iov_len = 2 }, + { .iov_base = (void *)queries[i], .iov_len = qlens[i] } } + }; + step_mh(&mh, qpos[i]); + r = sendmsg(pfd[i].fd, &mh, MSG_NOSIGNAL); + if (r < 0) goto out; + qpos[i] += r; + if (qpos[i] == qlens[i]+2) + pfd[i].events = POLLIN; + } + + for (i=0; i +#include int __res_send(const unsigned char *msg, int msglen, unsigned char *answer, int anslen) { - int r = __res_msend(1, &msg, &msglen, &answer, &anslen, anslen); + int r; + if (anslen < 512) { + unsigned char buf[512]; + r = __res_send(msg, msglen, buf, sizeof buf); + if (r >= 0) memcpy(answer, buf, r < anslen ? r : anslen); + return r; + } + r = __res_msend(1, &msg, &msglen, &answer, &anslen, anslen); return r<0 || !anslen ? -1 : anslen; } diff --git a/lib/libc/musl/src/network/sendmsg.c b/lib/libc/musl/src/network/sendmsg.c index 80cc5f41f6..acdfdf2924 100644 --- a/lib/libc/musl/src/network/sendmsg.c +++ b/lib/libc/musl/src/network/sendmsg.c @@ -8,13 +8,16 @@ ssize_t sendmsg(int fd, const struct msghdr *msg, int flags) { #if LONG_MAX > INT_MAX struct msghdr h; - struct cmsghdr chbuf[1024/sizeof(struct cmsghdr)+1], *c; + /* Kernels before 2.6.38 set SCM_MAX_FD to 255, allocate enough + * space to support an SCM_RIGHTS ancillary message with 255 fds. + * Kernels since 2.6.38 set SCM_MAX_FD to 253. */ + struct cmsghdr chbuf[CMSG_SPACE(255*sizeof(int))/sizeof(struct cmsghdr)+1], *c; if (msg) { h = *msg; h.__pad1 = h.__pad2 = 0; msg = &h; if (h.msg_controllen) { - if (h.msg_controllen > 1024) { + if (h.msg_controllen > sizeof chbuf) { errno = ENOMEM; return -1; } diff --git a/lib/libc/musl/src/process/_Fork.c b/lib/libc/musl/src/process/_Fork.c index da06386815..fb0fdc2c83 100644 --- a/lib/libc/musl/src/process/_Fork.c +++ b/lib/libc/musl/src/process/_Fork.c @@ -14,7 +14,6 @@ pid_t _Fork(void) pid_t ret; sigset_t set; __block_all_sigs(&set); - __aio_atfork(-1); LOCK(__abort_lock); #ifdef SYS_fork ret = __syscall(SYS_fork); @@ -32,7 +31,7 @@ pid_t _Fork(void) if (libc.need_locks) libc.need_locks = -1; } UNLOCK(__abort_lock); - __aio_atfork(!ret); + if (!ret) __aio_atfork(1); __restore_sigs(&set); return __syscall_ret(ret); } diff --git a/lib/libc/musl/src/process/aarch64/vfork.s b/lib/libc/musl/src/process/aarch64/vfork.s new file mode 100644 index 0000000000..429bec8cb8 --- /dev/null +++ b/lib/libc/musl/src/process/aarch64/vfork.s @@ -0,0 +1,9 @@ +.global vfork +.type vfork,%function +vfork: + mov x8, 220 // SYS_clone + mov x0, 0x4111 // SIGCHLD | CLONE_VM | CLONE_VFORK + mov x1, 0 + svc 0 + .hidden __syscall_ret + b __syscall_ret diff --git a/lib/libc/musl/src/process/fork.c b/lib/libc/musl/src/process/fork.c index 54bc289202..56f1931331 100644 --- a/lib/libc/musl/src/process/fork.c +++ b/lib/libc/musl/src/process/fork.c @@ -9,7 +9,6 @@ static volatile int *const dummy_lockptr = 0; weak_alias(dummy_lockptr, __at_quick_exit_lockptr); weak_alias(dummy_lockptr, __atexit_lockptr); -weak_alias(dummy_lockptr, __dlerror_lockptr); weak_alias(dummy_lockptr, __gettext_lockptr); weak_alias(dummy_lockptr, __locale_lockptr); weak_alias(dummy_lockptr, __random_lockptr); @@ -24,7 +23,6 @@ weak_alias(dummy_lockptr, __vmlock_lockptr); static volatile int *const *const atfork_locks[] = { &__at_quick_exit_lockptr, &__atexit_lockptr, - &__dlerror_lockptr, &__gettext_lockptr, &__locale_lockptr, &__random_lockptr, @@ -38,6 +36,8 @@ static volatile int *const *const atfork_locks[] = { static void dummy(int x) { } weak_alias(dummy, __fork_handler); weak_alias(dummy, __malloc_atfork); +weak_alias(dummy, __aio_atfork); +weak_alias(dummy, __pthread_key_atfork); weak_alias(dummy, __ldso_atfork); static void dummy_0(void) { } @@ -52,6 +52,8 @@ pid_t fork(void) int need_locks = libc.need_locks > 0; if (need_locks) { __ldso_atfork(-1); + __pthread_key_atfork(-1); + __aio_atfork(-1); __inhibit_ptc(); for (int i=0; igl_pathc = 0; g->gl_pathv = NULL; } - -weak_alias(glob, glob64); -weak_alias(globfree, globfree64); diff --git a/lib/libc/musl/src/search/hsearch.c b/lib/libc/musl/src/search/hsearch.c index b3ac8796e7..2634a67f42 100644 --- a/lib/libc/musl/src/search/hsearch.c +++ b/lib/libc/musl/src/search/hsearch.c @@ -41,9 +41,9 @@ static int resize(size_t nel, struct hsearch_data *htab) { size_t newsize; size_t i, j; + size_t oldsize = htab->__tab->mask + 1; ENTRY *e, *newe; ENTRY *oldtab = htab->__tab->entries; - ENTRY *oldend = htab->__tab->entries + htab->__tab->mask + 1; if (nel > MAXSIZE) nel = MAXSIZE; @@ -56,7 +56,7 @@ static int resize(size_t nel, struct hsearch_data *htab) htab->__tab->mask = newsize - 1; if (!oldtab) return 1; - for (e = oldtab; e < oldend; e++) + for (e = oldtab; e < oldtab + oldsize; e++) if (e->key) { for (i=keyhash(e->key),j=1; ; i+=j++) { newe = htab->__tab->entries + (i & htab->__tab->mask); diff --git a/lib/libc/musl/src/select/poll.c b/lib/libc/musl/src/select/poll.c index c84c8a999c..7883dfab47 100644 --- a/lib/libc/musl/src/select/poll.c +++ b/lib/libc/musl/src/select/poll.c @@ -8,8 +8,13 @@ int poll(struct pollfd *fds, nfds_t n, int timeout) #ifdef SYS_poll return syscall_cp(SYS_poll, fds, n, timeout); #else +#if SYS_ppoll_time64 == SYS_ppoll + typedef long long ppoll_ts_t[2]; +#else + typedef long ppoll_ts_t[2]; +#endif return syscall_cp(SYS_ppoll, fds, n, timeout>=0 ? - &((struct timespec){ .tv_sec = timeout/1000, - .tv_nsec = timeout%1000*1000000 }) : 0, 0, _NSIG/8); + ((ppoll_ts_t){ timeout/1000, timeout%1000*1000000 }) : 0, + 0, _NSIG/8); #endif } diff --git a/lib/libc/musl/src/select/select.c b/lib/libc/musl/src/select/select.c index 8a78688403..f1d72863c6 100644 --- a/lib/libc/musl/src/select/select.c +++ b/lib/libc/musl/src/select/select.c @@ -33,6 +33,7 @@ int select(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict ((syscall_arg_t[]){ 0, _NSIG/8 })); if (SYS_pselect6 == SYS_pselect6_time64 || r!=-ENOSYS) return __syscall_ret(r); + s = CLAMP(s); #endif #ifdef SYS_select return syscall_cp(SYS_select, n, rfds, wfds, efds, diff --git a/lib/libc/musl/src/setjmp/powerpc/longjmp.S b/lib/libc/musl/src/setjmp/powerpc/longjmp.S index 611389fed9..465e4cd792 100644 --- a/lib/libc/musl/src/setjmp/powerpc/longjmp.S +++ b/lib/libc/musl/src/setjmp/powerpc/longjmp.S @@ -42,10 +42,10 @@ longjmp: bl 1f .hidden __hwcap .long __hwcap-. -1: mflr 4 - lwz 5, 0(4) - lwzx 4, 4, 5 - andis. 4, 4, 0x80 +1: mflr 6 + lwz 5, 0(6) + lwzx 6, 6, 5 + andis. 6, 6, 0x80 beq 1f .long 0x11c35b01 /* evldd 14,88(3) */ .long 0x11e36301 /* ... */ diff --git a/lib/libc/musl/src/signal/mips/restore.s b/lib/libc/musl/src/signal/mips/restore.s deleted file mode 100644 index b6dadce071..0000000000 --- a/lib/libc/musl/src/signal/mips/restore.s +++ /dev/null @@ -1,15 +0,0 @@ -.set noreorder - -.global __restore_rt -.hidden __restore_rt -.type __restore_rt,@function -__restore_rt: - li $2, 4193 - syscall - -.global __restore -.hidden __restore -.type __restore,@function -__restore: - li $2, 4119 - syscall diff --git a/lib/libc/musl/src/signal/mips64/restore.s b/lib/libc/musl/src/signal/mips64/restore.s deleted file mode 100644 index 401f8e7322..0000000000 --- a/lib/libc/musl/src/signal/mips64/restore.s +++ /dev/null @@ -1,11 +0,0 @@ -.set noreorder -.global __restore_rt -.global __restore -.hidden __restore_rt -.hidden __restore -.type __restore_rt,@function -.type __restore,@function -__restore_rt: -__restore: - li $2,5211 - syscall diff --git a/lib/libc/musl/src/signal/mipsn32/restore.s b/lib/libc/musl/src/signal/mipsn32/restore.s deleted file mode 100644 index 4cd4e1b4e4..0000000000 --- a/lib/libc/musl/src/signal/mipsn32/restore.s +++ /dev/null @@ -1,11 +0,0 @@ -.set noreorder -.global __restore_rt -.global __restore -.hidden __restore_rt -.hidden __restore -.type __restore_rt,@function -.type __restore,@function -__restore_rt: -__restore: - li $2,6211 - syscall diff --git a/lib/libc/musl/src/signal/sigaction.c b/lib/libc/musl/src/signal/sigaction.c index 2203471b24..e45308fae5 100644 --- a/lib/libc/musl/src/signal/sigaction.c +++ b/lib/libc/musl/src/signal/sigaction.c @@ -44,8 +44,11 @@ int __libc_sigaction(int sig, const struct sigaction *restrict sa, struct sigact } } ksa.handler = sa->sa_handler; - ksa.flags = sa->sa_flags | SA_RESTORER; + ksa.flags = sa->sa_flags; +#ifdef SA_RESTORER + ksa.flags |= SA_RESTORER; ksa.restorer = (sa->sa_flags & SA_SIGINFO) ? __restore_rt : __restore; +#endif memcpy(&ksa.mask, &sa->sa_mask, _NSIG/8); } int r = __syscall(SYS_rt_sigaction, sig, sa?&ksa:0, old?&ksa_old:0, _NSIG/8); diff --git a/lib/libc/musl/src/stat/__xstat.c b/lib/libc/musl/src/stat/__xstat.c index 630936a0fa..b4560df7cd 100644 --- a/lib/libc/musl/src/stat/__xstat.c +++ b/lib/libc/musl/src/stat/__xstat.c @@ -22,11 +22,6 @@ int __xstat(int ver, const char *path, struct stat *buf) return stat(path, buf); } -weak_alias(__fxstat, __fxstat64); -weak_alias(__fxstatat, __fxstatat64); -weak_alias(__lxstat, __lxstat64); -weak_alias(__xstat, __xstat64); - #endif int __xmknod(int ver, const char *path, mode_t mode, dev_t *dev) diff --git a/lib/libc/musl/src/stat/fchmodat.c b/lib/libc/musl/src/stat/fchmodat.c index 4ee00b0a3e..bc581050ee 100644 --- a/lib/libc/musl/src/stat/fchmodat.c +++ b/lib/libc/musl/src/stat/fchmodat.c @@ -2,7 +2,6 @@ #include #include #include "syscall.h" -#include "kstat.h" int fchmodat(int fd, const char *path, mode_t mode, int flag) { @@ -11,12 +10,12 @@ int fchmodat(int fd, const char *path, mode_t mode, int flag) if (flag != AT_SYMLINK_NOFOLLOW) return __syscall_ret(-EINVAL); - struct kstat st; + struct stat st; int ret, fd2; char proc[15+3*sizeof(int)]; - if ((ret = __syscall(SYS_fstatat, fd, path, &st, flag))) - return __syscall_ret(ret); + if (fstatat(fd, path, &st, flag)) + return -1; if (S_ISLNK(st.st_mode)) return __syscall_ret(-EOPNOTSUPP); @@ -27,12 +26,12 @@ int fchmodat(int fd, const char *path, mode_t mode, int flag) } __procfdname(proc, fd2); - ret = __syscall(SYS_fstatat, AT_FDCWD, proc, &st, 0); + ret = stat(proc, &st); if (!ret) { - if (S_ISLNK(st.st_mode)) ret = -EOPNOTSUPP; - else ret = __syscall(SYS_fchmodat, AT_FDCWD, proc, mode); + if (S_ISLNK(st.st_mode)) ret = __syscall_ret(-EOPNOTSUPP); + else ret = syscall(SYS_fchmodat, AT_FDCWD, proc, mode); } __syscall(SYS_close, fd2); - return __syscall_ret(ret); + return ret; } diff --git a/lib/libc/musl/src/stat/fstat.c b/lib/libc/musl/src/stat/fstat.c index 9bbb46decb..fd28b8ac40 100644 --- a/lib/libc/musl/src/stat/fstat.c +++ b/lib/libc/musl/src/stat/fstat.c @@ -4,12 +4,10 @@ #include #include "syscall.h" -int fstat(int fd, struct stat *st) +int __fstat(int fd, struct stat *st) { if (fd<0) return __syscall_ret(-EBADF); - return fstatat(fd, "", st, AT_EMPTY_PATH); + return __fstatat(fd, "", st, AT_EMPTY_PATH); } -#if !_REDIR_TIME64 -weak_alias(fstat, fstat64); -#endif +weak_alias(__fstat, fstat); diff --git a/lib/libc/musl/src/stat/fstatat.c b/lib/libc/musl/src/stat/fstatat.c index de165b5c97..04506375d8 100644 --- a/lib/libc/musl/src/stat/fstatat.c +++ b/lib/libc/musl/src/stat/fstatat.c @@ -6,7 +6,6 @@ #include #include #include "syscall.h" -#include "kstat.h" struct statx { uint32_t stx_mask; @@ -69,6 +68,10 @@ static int fstatat_statx(int fd, const char *restrict path, struct stat *restric return 0; } +#ifdef SYS_fstatat + +#include "kstat.h" + static int fstatat_kstat(int fd, const char *restrict path, struct stat *restrict st, int flag) { int ret; @@ -130,18 +133,21 @@ static int fstatat_kstat(int fd, const char *restrict path, struct stat *restric return 0; } +#endif -int fstatat(int fd, const char *restrict path, struct stat *restrict st, int flag) +int __fstatat(int fd, const char *restrict path, struct stat *restrict st, int flag) { int ret; +#ifdef SYS_fstatat if (sizeof((struct kstat){0}.st_atime_sec) < sizeof(time_t)) { ret = fstatat_statx(fd, path, st, flag); if (ret!=-ENOSYS) return __syscall_ret(ret); } ret = fstatat_kstat(fd, path, st, flag); +#else + ret = fstatat_statx(fd, path, st, flag); +#endif return __syscall_ret(ret); } -#if !_REDIR_TIME64 -weak_alias(fstatat, fstatat64); -#endif +weak_alias(__fstatat, fstatat); diff --git a/lib/libc/musl/src/stat/lstat.c b/lib/libc/musl/src/stat/lstat.c index 6fe004dec2..6822fcae4b 100644 --- a/lib/libc/musl/src/stat/lstat.c +++ b/lib/libc/musl/src/stat/lstat.c @@ -5,7 +5,3 @@ int lstat(const char *restrict path, struct stat *restrict buf) { return fstatat(AT_FDCWD, path, buf, AT_SYMLINK_NOFOLLOW); } - -#if !_REDIR_TIME64 -weak_alias(lstat, lstat64); -#endif diff --git a/lib/libc/musl/src/stat/stat.c b/lib/libc/musl/src/stat/stat.c index ea70efc4a0..23570e7a24 100644 --- a/lib/libc/musl/src/stat/stat.c +++ b/lib/libc/musl/src/stat/stat.c @@ -5,7 +5,3 @@ int stat(const char *restrict path, struct stat *restrict buf) { return fstatat(AT_FDCWD, path, buf, 0); } - -#if !_REDIR_TIME64 -weak_alias(stat, stat64); -#endif diff --git a/lib/libc/musl/src/stat/statvfs.c b/lib/libc/musl/src/stat/statvfs.c index f65d1b548d..bfbb5feed5 100644 --- a/lib/libc/musl/src/stat/statvfs.c +++ b/lib/libc/musl/src/stat/statvfs.c @@ -56,8 +56,3 @@ int fstatvfs(int fd, struct statvfs *buf) fixup(buf, &kbuf); return 0; } - -weak_alias(statvfs, statvfs64); -weak_alias(statfs, statfs64); -weak_alias(fstatvfs, fstatvfs64); -weak_alias(fstatfs, fstatfs64); diff --git a/lib/libc/musl/src/stdio/fgetpos.c b/lib/libc/musl/src/stdio/fgetpos.c index 50813d2c50..392f7323cf 100644 --- a/lib/libc/musl/src/stdio/fgetpos.c +++ b/lib/libc/musl/src/stdio/fgetpos.c @@ -7,5 +7,3 @@ int fgetpos(FILE *restrict f, fpos_t *restrict pos) *(long long *)pos = off; return 0; } - -weak_alias(fgetpos, fgetpos64); diff --git a/lib/libc/musl/src/stdio/fgets.c b/lib/libc/musl/src/stdio/fgets.c index 6171f398da..4a100b3937 100644 --- a/lib/libc/musl/src/stdio/fgets.c +++ b/lib/libc/musl/src/stdio/fgets.c @@ -12,13 +12,14 @@ char *fgets(char *restrict s, int n, FILE *restrict f) FLOCK(f); - if (n--<=1) { + if (n<=1) { f->mode |= f->mode-1; FUNLOCK(f); - if (n) return 0; + if (n<1) return 0; *s = 0; return s; } + n--; while (n) { if (f->rpos != f->rend) { diff --git a/lib/libc/musl/src/stdio/fopen.c b/lib/libc/musl/src/stdio/fopen.c index e1b91e12d8..80bc341e66 100644 --- a/lib/libc/musl/src/stdio/fopen.c +++ b/lib/libc/musl/src/stdio/fopen.c @@ -29,5 +29,3 @@ FILE *fopen(const char *restrict filename, const char *restrict mode) __syscall(SYS_close, fd); return 0; } - -weak_alias(fopen, fopen64); diff --git a/lib/libc/musl/src/stdio/freopen.c b/lib/libc/musl/src/stdio/freopen.c index 615d4b47bd..1641a4c5e9 100644 --- a/lib/libc/musl/src/stdio/freopen.c +++ b/lib/libc/musl/src/stdio/freopen.c @@ -40,6 +40,8 @@ FILE *freopen(const char *restrict filename, const char *restrict mode, FILE *re fclose(f2); } + f->mode = 0; + f->locale = 0; FUNLOCK(f); return f; @@ -49,5 +51,3 @@ fail: fclose(f); return NULL; } - -weak_alias(freopen, freopen64); diff --git a/lib/libc/musl/src/stdio/fseek.c b/lib/libc/musl/src/stdio/fseek.c index c07f7e9526..c7425802ce 100644 --- a/lib/libc/musl/src/stdio/fseek.c +++ b/lib/libc/musl/src/stdio/fseek.c @@ -46,5 +46,3 @@ int fseek(FILE *f, long off, int whence) } weak_alias(__fseeko, fseeko); - -weak_alias(fseeko, fseeko64); diff --git a/lib/libc/musl/src/stdio/fsetpos.c b/lib/libc/musl/src/stdio/fsetpos.c index 77ab8d8206..779cb3ccf4 100644 --- a/lib/libc/musl/src/stdio/fsetpos.c +++ b/lib/libc/musl/src/stdio/fsetpos.c @@ -4,5 +4,3 @@ int fsetpos(FILE *f, const fpos_t *pos) { return __fseeko(f, *(const long long *)pos, SEEK_SET); } - -weak_alias(fsetpos, fsetpos64); diff --git a/lib/libc/musl/src/stdio/ftell.c b/lib/libc/musl/src/stdio/ftell.c index 1a2afbbce3..1e1a08d828 100644 --- a/lib/libc/musl/src/stdio/ftell.c +++ b/lib/libc/musl/src/stdio/ftell.c @@ -37,5 +37,3 @@ long ftell(FILE *f) } weak_alias(__ftello, ftello); - -weak_alias(ftello, ftello64); diff --git a/lib/libc/musl/src/stdio/open_wmemstream.c b/lib/libc/musl/src/stdio/open_wmemstream.c index ed1b561d9c..b8ae4a790c 100644 --- a/lib/libc/musl/src/stdio/open_wmemstream.c +++ b/lib/libc/musl/src/stdio/open_wmemstream.c @@ -40,8 +40,12 @@ fail: static size_t wms_write(FILE *f, const unsigned char *buf, size_t len) { struct cookie *c = f->cookie; - size_t len2; + size_t len2 = f->wpos - f->wbase; wchar_t *newbuf; + if (len2) { + f->wpos = f->wbase; + if (wms_write(f, f->wbase, len2) < len2) return 0; + } if (len + c->pos >= c->space) { len2 = 2*c->space+1 | c->pos+len+1; if (len2 > SSIZE_MAX/4) return 0; diff --git a/lib/libc/musl/src/stdio/tempnam.c b/lib/libc/musl/src/stdio/tempnam.c index 565df6b656..0c65b1f08e 100644 --- a/lib/libc/musl/src/stdio/tempnam.c +++ b/lib/libc/musl/src/stdio/tempnam.c @@ -6,7 +6,6 @@ #include #include #include "syscall.h" -#include "kstat.h" #define MAXTRIES 100 @@ -37,11 +36,10 @@ char *tempnam(const char *dir, const char *pfx) for (try=0; try #include #include "syscall.h" -#include "kstat.h" #define MAXTRIES 100 @@ -17,11 +16,10 @@ char *tmpnam(char *buf) int r; for (try=0; tryflags & F_ERR)) __fwritex((void *)s, l, f); + if (!ferror(f)) __fwritex((void *)s, l, f); } static void pad(FILE *f, char c, int w, int l, int fl) @@ -478,8 +478,8 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, if (*s=='*') { if (isdigit(s[1]) && s[2]=='$') { l10n=1; - nl_type[s[1]-'0'] = INT; - w = nl_arg[s[1]-'0'].i; + if (!f) nl_type[s[1]-'0'] = INT, w = 0; + else w = nl_arg[s[1]-'0'].i; s+=3; } else if (!l10n) { w = f ? va_arg(*ap, int) : 0; @@ -491,8 +491,8 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, /* Read precision */ if (*s=='.' && s[1]=='*') { if (isdigit(s[2]) && s[3]=='$') { - nl_type[s[2]-'0'] = INT; - p = nl_arg[s[2]-'0'].i; + if (!f) nl_type[s[2]-'0'] = INT, p = 0; + else p = nl_arg[s[2]-'0'].i; s+=4; } else if (!l10n) { p = f ? va_arg(*ap, int) : 0; @@ -521,13 +521,18 @@ static int printf_core(FILE *f, const char *fmt, va_list *ap, union arg *nl_arg, if (st==NOARG) { if (argpos>=0) goto inval; } else { - if (argpos>=0) nl_type[argpos]=st, arg=nl_arg[argpos]; - else if (f) pop_arg(&arg, st, ap); + if (argpos>=0) { + if (!f) nl_type[argpos]=st; + else arg=nl_arg[argpos]; + } else if (f) pop_arg(&arg, st, ap); else return 0; } if (!f) continue; + /* Do not process any new directives once in error state. */ + if (ferror(f)) return -1; + z = buf + sizeof(buf); prefix = "-+ 0X0x"; pl = 0; @@ -672,7 +677,7 @@ int vfprintf(FILE *restrict f, const char *restrict fmt, va_list ap) FLOCK(f); olderr = f->flags & F_ERR; - if (f->mode < 1) f->flags &= ~F_ERR; + f->flags &= ~F_ERR; if (!f->buf_size) { saved_buf = f->buf; f->buf = internal_buf; @@ -688,7 +693,7 @@ int vfprintf(FILE *restrict f, const char *restrict fmt, va_list ap) f->buf_size = 0; f->wpos = f->wbase = f->wend = 0; } - if (f->flags & F_ERR) ret = -1; + if (ferror(f)) ret = -1; f->flags |= olderr; FUNLOCK(f); va_end(ap2); diff --git a/lib/libc/musl/src/stdio/vfwprintf.c b/lib/libc/musl/src/stdio/vfwprintf.c index 85b036c3df..5369770143 100644 --- a/lib/libc/musl/src/stdio/vfwprintf.c +++ b/lib/libc/musl/src/stdio/vfwprintf.c @@ -125,7 +125,13 @@ static void pop_arg(union arg *arg, int type, va_list *ap) static void out(FILE *f, const wchar_t *s, size_t l) { - while (l-- && !(f->flags & F_ERR)) fputwc(*s++, f); + while (l-- && !ferror(f)) fputwc(*s++, f); +} + +static void pad(FILE *f, int n, int fl) +{ + if ((fl & LEFT_ADJ) || !n || ferror(f)) return; + fprintf(f, "%*s", n, ""); } static int getint(wchar_t **s) { @@ -242,6 +248,10 @@ static int wprintf_core(FILE *f, const wchar_t *fmt, va_list *ap, union arg *nl_ } if (!f) continue; + + /* Do not process any new directives once in error state. */ + if (ferror(f)) return -1; + t = s[-1]; if (ps && (t&15)==3) t&=~32; @@ -258,25 +268,22 @@ static int wprintf_core(FILE *f, const wchar_t *fmt, va_list *ap, union arg *nl_ } continue; case 'c': + case 'C': if (w<1) w=1; - if (w>1 && !(fl&LEFT_ADJ)) fprintf(f, "%*s", w-1, ""); - fputwc(btowc(arg.i), f); - if (w>1 && (fl&LEFT_ADJ)) fprintf(f, "%*s", w-1, ""); + pad(f, w-1, fl); + out(f, &(wchar_t){t=='C' ? arg.i : btowc(arg.i)}, 1); + pad(f, w-1, fl^LEFT_ADJ); l = w; continue; - case 'C': - fputwc(arg.i, f); - l = 1; - continue; case 'S': a = arg.p; z = a + wcsnlen(a, p<0 ? INT_MAX : p); if (p<0 && *z) goto overflow; p = z-a; if (wflags & F_ERR; f->flags &= ~F_ERR; ret = wprintf_core(f, fmt, &ap2, nl_arg, nl_type); - if (f->flags & F_ERR) ret = -1; + if (ferror(f)) ret = -1; f->flags |= olderr; FUNLOCK(f); va_end(ap2); diff --git a/lib/libc/musl/src/stdio/vswprintf.c b/lib/libc/musl/src/stdio/vswprintf.c index 7f98c5c969..fc223cf2b8 100644 --- a/lib/libc/musl/src/stdio/vswprintf.c +++ b/lib/libc/musl/src/stdio/vswprintf.c @@ -18,6 +18,7 @@ static size_t sw_write(FILE *f, const unsigned char *s, size_t l) if (s!=f->wbase && sw_write(f, f->wbase, f->wpos-f->wbase)==-1) return -1; while (c->l && l && (i=mbtowc(c->ws, (void *)s, l))>=0) { + if (!i) i=1; s+=i; l-=i; c->l--; diff --git a/lib/libc/musl/src/stdlib/qsort_nr.c b/lib/libc/musl/src/stdlib/qsort_nr.c index efe7ccecd1..8ffe71d038 100644 --- a/lib/libc/musl/src/stdlib/qsort_nr.c +++ b/lib/libc/musl/src/stdlib/qsort_nr.c @@ -10,5 +10,5 @@ static int wrapper_cmp(const void *v1, const void *v2, void *cmp) void qsort(void *base, size_t nel, size_t width, cmpfun cmp) { - __qsort_r(base, nel, width, wrapper_cmp, cmp); + __qsort_r(base, nel, width, wrapper_cmp, (void *)cmp); } diff --git a/lib/libc/musl/src/string/strverscmp.c b/lib/libc/musl/src/string/strverscmp.c index 4daf276d0c..16c1da224a 100644 --- a/lib/libc/musl/src/string/strverscmp.c +++ b/lib/libc/musl/src/string/strverscmp.c @@ -18,9 +18,9 @@ int strverscmp(const char *l0, const char *r0) else if (c!='0') z=0; } - if (l[dp]!='0' && r[dp]!='0') { - /* If we're not looking at a digit sequence that began - * with a zero, longest digit string is greater. */ + if (l[dp]-'1'<9U && r[dp]-'1'<9U) { + /* If we're looking at non-degenerate digit sequences starting + * with nonzero digits, longest digit string is greater. */ for (j=i; isdigit(l[j]); j++) if (!isdigit(r[j])) return 1; if (isdigit(r[j])) return -1; diff --git a/lib/libc/musl/src/string/wcscmp.c b/lib/libc/musl/src/string/wcscmp.c index 26eeee7045..286ec3ea40 100644 --- a/lib/libc/musl/src/string/wcscmp.c +++ b/lib/libc/musl/src/string/wcscmp.c @@ -3,5 +3,5 @@ int wcscmp(const wchar_t *l, const wchar_t *r) { for (; *l==*r && *l && *r; l++, r++); - return *l - *r; + return *l < *r ? -1 : *l > *r; } diff --git a/lib/libc/musl/src/string/wcsncmp.c b/lib/libc/musl/src/string/wcsncmp.c index 4ab32a924c..2b3558bf72 100644 --- a/lib/libc/musl/src/string/wcsncmp.c +++ b/lib/libc/musl/src/string/wcsncmp.c @@ -3,5 +3,5 @@ int wcsncmp(const wchar_t *l, const wchar_t *r, size_t n) { for (; n && *l==*r && *l && *r; n--, l++, r++); - return n ? *l - *r : 0; + return n ? (*l < *r ? -1 : *l > *r) : 0; } diff --git a/lib/libc/musl/src/string/wmemcmp.c b/lib/libc/musl/src/string/wmemcmp.c index 2a193263ce..717d77b174 100644 --- a/lib/libc/musl/src/string/wmemcmp.c +++ b/lib/libc/musl/src/string/wmemcmp.c @@ -3,5 +3,5 @@ int wmemcmp(const wchar_t *l, const wchar_t *r, size_t n) { for (; n && *l==*r; n--, l++, r++); - return n ? *l-*r : 0; + return n ? (*l < *r ? -1 : *l > *r) : 0; } diff --git a/lib/libc/musl/src/temp/__randname.c b/lib/libc/musl/src/temp/__randname.c index 2bce37a0c4..e9b970f1f6 100644 --- a/lib/libc/musl/src/temp/__randname.c +++ b/lib/libc/musl/src/temp/__randname.c @@ -1,5 +1,6 @@ #include #include +#include "pthread_impl.h" /* This assumes that a check for the template size has already been made */ @@ -10,7 +11,7 @@ char *__randname(char *template) unsigned long r; __clock_gettime(CLOCK_REALTIME, &ts); - r = ts.tv_nsec*65537 ^ (uintptr_t)&ts / 16 + (uintptr_t)template; + r = ts.tv_sec + ts.tv_nsec + __pthread_self()->tid * 65537UL; for (i=0; i<6; i++, r>>=5) template[i] = 'A'+(r&15)+(r&16)*2; diff --git a/lib/libc/musl/src/temp/mkostemp.c b/lib/libc/musl/src/temp/mkostemp.c index d8dcb8052d..e3dfdd9124 100644 --- a/lib/libc/musl/src/temp/mkostemp.c +++ b/lib/libc/musl/src/temp/mkostemp.c @@ -5,5 +5,3 @@ int mkostemp(char *template, int flags) { return __mkostemps(template, 0, flags); } - -weak_alias(mkostemp, mkostemp64); diff --git a/lib/libc/musl/src/temp/mkostemps.c b/lib/libc/musl/src/temp/mkostemps.c index ef24eeae2c..093d2380d8 100644 --- a/lib/libc/musl/src/temp/mkostemps.c +++ b/lib/libc/musl/src/temp/mkostemps.c @@ -26,4 +26,3 @@ int __mkostemps(char *template, int len, int flags) } weak_alias(__mkostemps, mkostemps); -weak_alias(__mkostemps, mkostemps64); diff --git a/lib/libc/musl/src/temp/mkstemp.c b/lib/libc/musl/src/temp/mkstemp.c index 166b8afe49..76c835bb01 100644 --- a/lib/libc/musl/src/temp/mkstemp.c +++ b/lib/libc/musl/src/temp/mkstemp.c @@ -4,5 +4,3 @@ int mkstemp(char *template) { return __mkostemps(template, 0, 0); } - -weak_alias(mkstemp, mkstemp64); diff --git a/lib/libc/musl/src/temp/mkstemps.c b/lib/libc/musl/src/temp/mkstemps.c index 6b7531b5e9..f8eabfec0a 100644 --- a/lib/libc/musl/src/temp/mkstemps.c +++ b/lib/libc/musl/src/temp/mkstemps.c @@ -5,5 +5,3 @@ int mkstemps(char *template, int len) { return __mkostemps(template, len, 0); } - -weak_alias(mkstemps, mkstemps64); diff --git a/lib/libc/musl/src/thread/pthread_atfork.c b/lib/libc/musl/src/thread/pthread_atfork.c index 7649740165..26d325438c 100644 --- a/lib/libc/musl/src/thread/pthread_atfork.c +++ b/lib/libc/musl/src/thread/pthread_atfork.c @@ -1,7 +1,13 @@ #include +#include #include "libc.h" #include "lock.h" +#define malloc __libc_malloc +#define calloc undef +#define realloc undef +#define free undef + static struct atfork_funcs { void (*prepare)(void); void (*parent)(void); @@ -34,7 +40,7 @@ void __fork_handler(int who) int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)) { struct atfork_funcs *new = malloc(sizeof *new); - if (!new) return -1; + if (!new) return ENOMEM; LOCK(lock); new->next = funcs; diff --git a/lib/libc/musl/src/thread/pthread_cancel.c b/lib/libc/musl/src/thread/pthread_cancel.c index 2f9d5e975f..139a6fc84e 100644 --- a/lib/libc/musl/src/thread/pthread_cancel.c +++ b/lib/libc/musl/src/thread/pthread_cancel.c @@ -56,7 +56,12 @@ static void cancel_handler(int sig, siginfo_t *si, void *ctx) _sigaddset(&uc->uc_sigmask, SIGCANCEL); - if (self->cancelasync || pc >= (uintptr_t)__cp_begin && pc < (uintptr_t)__cp_end) { + if (self->cancelasync) { + pthread_sigmask(SIG_SETMASK, &uc->uc_sigmask, 0); + __cancel(); + } + + if (pc >= (uintptr_t)__cp_begin && pc < (uintptr_t)__cp_end) { uc->uc_mcontext.MC_PC = (uintptr_t)__cp_cancel; #ifdef CANCEL_GOT uc->uc_mcontext.MC_GOT = CANCEL_GOT; @@ -77,7 +82,7 @@ void __testcancel() static void init_cancellation() { struct sigaction sa = { - .sa_flags = SA_SIGINFO | SA_RESTART, + .sa_flags = SA_SIGINFO | SA_RESTART | SA_ONSTACK, .sa_sigaction = cancel_handler }; memset(&sa.sa_mask, -1, _NSIG/8); diff --git a/lib/libc/musl/src/thread/pthread_create.c b/lib/libc/musl/src/thread/pthread_create.c index 6f187ee89d..087f6206d5 100644 --- a/lib/libc/musl/src/thread/pthread_create.c +++ b/lib/libc/musl/src/thread/pthread_create.c @@ -107,6 +107,16 @@ _Noreturn void __pthread_exit(void *result) /* At this point we are committed to thread termination. */ + /* After the kernel thread exits, its tid may be reused. Clear it + * to prevent inadvertent use and inform functions that would use + * it that it's no longer available. At this point the killlock + * may be released, since functions that use it will consistently + * see the thread as having exited. Release it now so that no + * remaining locks (except thread list) are held if we end up + * resetting need_locks below. */ + self->tid = 0; + UNLOCK(self->killlock); + /* Process robust list in userspace to handle non-pshared mutexes * and the detached thread case where the robust list head will * be invalid when the kernel would process it. */ @@ -159,12 +169,6 @@ _Noreturn void __pthread_exit(void *result) a_store(&self->detach_state, DT_EXITED); __wake(&self->detach_state, 1, 1); - /* After the kernel thread exits, its tid may be reused. Clear it - * to prevent inadvertent use and inform functions that would use - * it that it's no longer available. */ - self->tid = 0; - UNLOCK(self->killlock); - for (;;) __syscall(SYS_exit, 0); } diff --git a/lib/libc/musl/src/thread/pthread_detach.c b/lib/libc/musl/src/thread/pthread_detach.c index 77772af2c6..d73a500e79 100644 --- a/lib/libc/musl/src/thread/pthread_detach.c +++ b/lib/libc/musl/src/thread/pthread_detach.c @@ -5,8 +5,12 @@ static int __pthread_detach(pthread_t t) { /* If the cas fails, detach state is either already-detached * or exiting/exited, and pthread_join will trap or cleanup. */ - if (a_cas(&t->detach_state, DT_JOINABLE, DT_DETACHED) != DT_JOINABLE) - return __pthread_join(t, 0); + if (a_cas(&t->detach_state, DT_JOINABLE, DT_DETACHED) != DT_JOINABLE) { + int cs; + __pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); + __pthread_join(t, 0); + __pthread_setcancelstate(cs, 0); + } return 0; } diff --git a/lib/libc/musl/src/thread/pthread_key_create.c b/lib/libc/musl/src/thread/pthread_key_create.c index d112094122..39770c7a3c 100644 --- a/lib/libc/musl/src/thread/pthread_key_create.c +++ b/lib/libc/musl/src/thread/pthread_key_create.c @@ -1,4 +1,5 @@ #include "pthread_impl.h" +#include "fork_impl.h" volatile size_t __pthread_tsd_size = sizeof(void *) * PTHREAD_KEYS_MAX; void *__pthread_tsd_main[PTHREAD_KEYS_MAX] = { 0 }; @@ -20,6 +21,13 @@ static void dummy_0(void) weak_alias(dummy_0, __tl_lock); weak_alias(dummy_0, __tl_unlock); +void __pthread_key_atfork(int who) +{ + if (who<0) __pthread_rwlock_rdlock(&key_lock); + else if (!who) __pthread_rwlock_unlock(&key_lock); + else key_lock = (pthread_rwlock_t)PTHREAD_RWLOCK_INITIALIZER; +} + int __pthread_key_create(pthread_key_t *k, void (*dtor)(void *)) { pthread_t self = __pthread_self(); diff --git a/lib/libc/musl/src/thread/sem_getvalue.c b/lib/libc/musl/src/thread/sem_getvalue.c index d9d8307177..c0b7762d3e 100644 --- a/lib/libc/musl/src/thread/sem_getvalue.c +++ b/lib/libc/musl/src/thread/sem_getvalue.c @@ -1,8 +1,9 @@ #include +#include int sem_getvalue(sem_t *restrict sem, int *restrict valp) { int val = sem->__val[0]; - *valp = val < 0 ? 0 : val; + *valp = val & SEM_VALUE_MAX; return 0; } diff --git a/lib/libc/musl/src/thread/sem_post.c b/lib/libc/musl/src/thread/sem_post.c index 31e3293d20..5c2517f236 100644 --- a/lib/libc/musl/src/thread/sem_post.c +++ b/lib/libc/musl/src/thread/sem_post.c @@ -1,17 +1,21 @@ #include +#include #include "pthread_impl.h" int sem_post(sem_t *sem) { - int val, waiters, priv = sem->__val[2]; + int val, new, waiters, priv = sem->__val[2]; do { val = sem->__val[0]; waiters = sem->__val[1]; - if (val == SEM_VALUE_MAX) { + if ((val & SEM_VALUE_MAX) == SEM_VALUE_MAX) { errno = EOVERFLOW; return -1; } - } while (a_cas(sem->__val, val, val+1+(val<0)) != val); - if (val<0 || waiters) __wake(sem->__val, 1, priv); + new = val + 1; + if (waiters <= 1) + new &= ~0x80000000; + } while (a_cas(sem->__val, val, new) != val); + if (val<0) __wake(sem->__val, waiters>1 ? 1 : -1, priv); return 0; } diff --git a/lib/libc/musl/src/thread/sem_timedwait.c b/lib/libc/musl/src/thread/sem_timedwait.c index 58d3ebfefc..aa67376c2d 100644 --- a/lib/libc/musl/src/thread/sem_timedwait.c +++ b/lib/libc/musl/src/thread/sem_timedwait.c @@ -1,4 +1,5 @@ #include +#include #include "pthread_impl.h" static void cleanup(void *p) @@ -13,14 +14,15 @@ int sem_timedwait(sem_t *restrict sem, const struct timespec *restrict at) if (!sem_trywait(sem)) return 0; int spins = 100; - while (spins-- && sem->__val[0] <= 0 && !sem->__val[1]) a_spin(); + while (spins-- && !(sem->__val[0] & SEM_VALUE_MAX) && !sem->__val[1]) + a_spin(); while (sem_trywait(sem)) { - int r; + int r, priv = sem->__val[2]; a_inc(sem->__val+1); - a_cas(sem->__val, 0, -1); + a_cas(sem->__val, 0, 0x80000000); pthread_cleanup_push(cleanup, (void *)(sem->__val+1)); - r = __timedwait_cp(sem->__val, -1, CLOCK_REALTIME, at, sem->__val[2]); + r = __timedwait_cp(sem->__val, 0x80000000, CLOCK_REALTIME, at, priv); pthread_cleanup_pop(1); if (r) { errno = r; diff --git a/lib/libc/musl/src/thread/sem_trywait.c b/lib/libc/musl/src/thread/sem_trywait.c index 04edf46b52..beb435da7c 100644 --- a/lib/libc/musl/src/thread/sem_trywait.c +++ b/lib/libc/musl/src/thread/sem_trywait.c @@ -1,12 +1,12 @@ #include +#include #include "pthread_impl.h" int sem_trywait(sem_t *sem) { int val; - while ((val=sem->__val[0]) > 0) { - int new = val-1-(val==1 && sem->__val[1]); - if (a_cas(sem->__val, val, new)==val) return 0; + while ((val=sem->__val[0]) & SEM_VALUE_MAX) { + if (a_cas(sem->__val, val, val-1)==val) return 0; } errno = EAGAIN; return -1; diff --git a/lib/libc/musl/src/thread/synccall.c b/lib/libc/musl/src/thread/synccall.c index d58c851fcf..a6b177c06f 100644 --- a/lib/libc/musl/src/thread/synccall.c +++ b/lib/libc/musl/src/thread/synccall.c @@ -45,7 +45,7 @@ void __synccall(void (*func)(void *), void *ctx) { sigset_t oldmask; int cs, i, r; - struct sigaction sa = { .sa_flags = SA_RESTART, .sa_handler = handler }; + struct sigaction sa = { .sa_flags = SA_RESTART | SA_ONSTACK, .sa_handler = handler }; pthread_t self = __pthread_self(), td; int count = 0; diff --git a/lib/libc/musl/src/time/__map_file.c b/lib/libc/musl/src/time/__map_file.c index d3cefa8284..c2b29fe81b 100644 --- a/lib/libc/musl/src/time/__map_file.c +++ b/lib/libc/musl/src/time/__map_file.c @@ -2,15 +2,14 @@ #include #include #include "syscall.h" -#include "kstat.h" const char unsigned *__map_file(const char *pathname, size_t *size) { - struct kstat st; + struct stat st; const unsigned char *map = MAP_FAILED; int fd = sys_open(pathname, O_RDONLY|O_CLOEXEC|O_NONBLOCK); if (fd < 0) return 0; - if (!syscall(SYS_fstat, fd, &st)) { + if (!__fstat(fd, &st)) { map = __mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0); *size = st.st_size; } diff --git a/lib/libc/musl/src/time/clock_getcpuclockid.c b/lib/libc/musl/src/time/clock_getcpuclockid.c index 8a0e2d4c3a..bce1e8ab29 100644 --- a/lib/libc/musl/src/time/clock_getcpuclockid.c +++ b/lib/libc/musl/src/time/clock_getcpuclockid.c @@ -8,6 +8,7 @@ int clock_getcpuclockid(pid_t pid, clockid_t *clk) struct timespec ts; clockid_t id = (-pid-1)*8U + 2; int ret = __syscall(SYS_clock_getres, id, &ts); + if (ret == -EINVAL) ret = -ESRCH; if (ret) return -ret; *clk = id; return 0; diff --git a/lib/libc/musl/src/time/clock_gettime.c b/lib/libc/musl/src/time/clock_gettime.c index 3e1d0975b1..4d2ec22f38 100644 --- a/lib/libc/musl/src/time/clock_gettime.c +++ b/lib/libc/musl/src/time/clock_gettime.c @@ -42,6 +42,9 @@ static int cgt_init(clockid_t clk, struct timespec *ts) p = cgt_time32_wrap; } } +#ifdef VDSO_CGT_WORKAROUND + if (!__vdsosym(VDSO_CGT32_VER, VDSO_CGT32_SYM)) p = 0; +#endif #endif int (*f)(clockid_t, struct timespec *) = (int (*)(clockid_t, struct timespec *))p; @@ -80,10 +83,12 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) return __syscall_ret(r); long ts32[2]; r = __syscall(SYS_clock_gettime, clk, ts32); +#ifdef SYS_gettimeofday if (r==-ENOSYS && clk==CLOCK_REALTIME) { r = __syscall(SYS_gettimeofday, ts32, 0); ts32[1] *= 1000; } +#endif if (!r) { ts->tv_sec = ts32[0]; ts->tv_nsec = ts32[1]; @@ -92,6 +97,7 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) return __syscall_ret(r); #else r = __syscall(SYS_clock_gettime, clk, ts); +#ifdef SYS_gettimeofday if (r == -ENOSYS) { if (clk == CLOCK_REALTIME) { __syscall(SYS_gettimeofday, ts, 0); @@ -100,6 +106,7 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) } r = -EINVAL; } +#endif return __syscall_ret(r); #endif } diff --git a/lib/libc/musl/src/time/timer_create.c b/lib/libc/musl/src/time/timer_create.c index 4bef239051..cd32c945b6 100644 --- a/lib/libc/musl/src/time/timer_create.c +++ b/lib/libc/musl/src/time/timer_create.c @@ -43,6 +43,8 @@ static void *start(void *arg) union sigval val = args->sev->sigev_value; pthread_barrier_wait(&args->b); + if (self->cancel) + return 0; for (;;) { siginfo_t si; while (sigwaitinfo(SIGTIMER_SET, &si) < 0); @@ -113,8 +115,10 @@ int timer_create(clockid_t clk, struct sigevent *restrict evp, timer_t *restrict ksev.sigev_signo = SIGTIMER; ksev.sigev_notify = SIGEV_THREAD_ID; ksev.sigev_tid = td->tid; - if (syscall(SYS_timer_create, clk, &ksev, &timerid) < 0) + if (syscall(SYS_timer_create, clk, &ksev, &timerid) < 0) { timerid = -1; + td->cancel = 1; + } td->timer_id = timerid; pthread_barrier_wait(&args.b); if (timerid < 0) return -1; diff --git a/lib/libc/musl/src/unistd/dup3.c b/lib/libc/musl/src/unistd/dup3.c index f919f79125..40798bdeed 100644 --- a/lib/libc/musl/src/unistd/dup3.c +++ b/lib/libc/musl/src/unistd/dup3.c @@ -9,12 +9,14 @@ int __dup3(int old, int new, int flags) int r; #ifdef SYS_dup2 if (old==new) return __syscall_ret(-EINVAL); - if (flags & O_CLOEXEC) { + if (flags) { while ((r=__syscall(SYS_dup3, old, new, flags))==-EBUSY); if (r!=-ENOSYS) return __syscall_ret(r); + if (flags & ~O_CLOEXEC) return __syscall_ret(-EINVAL); } while ((r=__syscall(SYS_dup2, old, new))==-EBUSY); - if (flags & O_CLOEXEC) __syscall(SYS_fcntl, new, F_SETFD, FD_CLOEXEC); + if (r >= 0 && (flags & O_CLOEXEC)) + __syscall(SYS_fcntl, new, F_SETFD, FD_CLOEXEC); #else while ((r=__syscall(SYS_dup3, old, new, flags))==-EBUSY); #endif diff --git a/lib/libc/musl/src/unistd/ftruncate.c b/lib/libc/musl/src/unistd/ftruncate.c index b41be0fa6f..54ff34bc3e 100644 --- a/lib/libc/musl/src/unistd/ftruncate.c +++ b/lib/libc/musl/src/unistd/ftruncate.c @@ -5,5 +5,3 @@ int ftruncate(int fd, off_t length) { return syscall(SYS_ftruncate, fd, __SYSCALL_LL_O(length)); } - -weak_alias(ftruncate, ftruncate64); diff --git a/lib/libc/musl/src/unistd/lseek.c b/lib/libc/musl/src/unistd/lseek.c index b4984f3e9e..f5b66682ab 100644 --- a/lib/libc/musl/src/unistd/lseek.c +++ b/lib/libc/musl/src/unistd/lseek.c @@ -12,4 +12,3 @@ off_t __lseek(int fd, off_t offset, int whence) } weak_alias(__lseek, lseek); -weak_alias(__lseek, lseek64); diff --git a/lib/libc/musl/src/unistd/mipsn32/lseek.c b/lib/libc/musl/src/unistd/mipsn32/lseek.c index 60e74a51f8..0f6cbcaa7c 100644 --- a/lib/libc/musl/src/unistd/mipsn32/lseek.c +++ b/lib/libc/musl/src/unistd/mipsn32/lseek.c @@ -17,4 +17,3 @@ off_t __lseek(int fd, off_t offset, int whence) } weak_alias(__lseek, lseek); -weak_alias(__lseek, lseek64); diff --git a/lib/libc/musl/src/unistd/pipe2.c b/lib/libc/musl/src/unistd/pipe2.c index f24f74fb03..a096990b15 100644 --- a/lib/libc/musl/src/unistd/pipe2.c +++ b/lib/libc/musl/src/unistd/pipe2.c @@ -8,6 +8,7 @@ int pipe2(int fd[2], int flag) if (!flag) return pipe(fd); int ret = __syscall(SYS_pipe2, fd, flag); if (ret != -ENOSYS) return __syscall_ret(ret); + if (flag & ~(O_CLOEXEC|O_NONBLOCK)) return __syscall_ret(-EINVAL); ret = pipe(fd); if (ret) return ret; if (flag & O_CLOEXEC) { diff --git a/lib/libc/musl/src/unistd/pread.c b/lib/libc/musl/src/unistd/pread.c index 5681b045d6..b03fb0ad94 100644 --- a/lib/libc/musl/src/unistd/pread.c +++ b/lib/libc/musl/src/unistd/pread.c @@ -5,5 +5,3 @@ ssize_t pread(int fd, void *buf, size_t size, off_t ofs) { return syscall_cp(SYS_pread, fd, buf, size, __SYSCALL_LL_PRW(ofs)); } - -weak_alias(pread, pread64); diff --git a/lib/libc/musl/src/unistd/preadv.c b/lib/libc/musl/src/unistd/preadv.c index 8376d60f2a..890ab403f9 100644 --- a/lib/libc/musl/src/unistd/preadv.c +++ b/lib/libc/musl/src/unistd/preadv.c @@ -8,5 +8,3 @@ ssize_t preadv(int fd, const struct iovec *iov, int count, off_t ofs) return syscall_cp(SYS_preadv, fd, iov, count, (long)(ofs), (long)(ofs>>32)); } - -weak_alias(preadv, preadv64); diff --git a/lib/libc/musl/src/unistd/pwrite.c b/lib/libc/musl/src/unistd/pwrite.c index ca37657622..869b69f03b 100644 --- a/lib/libc/musl/src/unistd/pwrite.c +++ b/lib/libc/musl/src/unistd/pwrite.c @@ -5,5 +5,3 @@ ssize_t pwrite(int fd, const void *buf, size_t size, off_t ofs) { return syscall_cp(SYS_pwrite, fd, buf, size, __SYSCALL_LL_PRW(ofs)); } - -weak_alias(pwrite, pwrite64); diff --git a/lib/libc/musl/src/unistd/pwritev.c b/lib/libc/musl/src/unistd/pwritev.c index f5a612c486..becf9debfc 100644 --- a/lib/libc/musl/src/unistd/pwritev.c +++ b/lib/libc/musl/src/unistd/pwritev.c @@ -8,5 +8,3 @@ ssize_t pwritev(int fd, const struct iovec *iov, int count, off_t ofs) return syscall_cp(SYS_pwritev, fd, iov, count, (long)(ofs), (long)(ofs>>32)); } - -weak_alias(pwritev, pwritev64); diff --git a/lib/libc/musl/src/unistd/truncate.c b/lib/libc/musl/src/unistd/truncate.c index 9729680076..077351e1be 100644 --- a/lib/libc/musl/src/unistd/truncate.c +++ b/lib/libc/musl/src/unistd/truncate.c @@ -5,5 +5,3 @@ int truncate(const char *path, off_t length) { return syscall(SYS_truncate, path, __SYSCALL_LL_O(length)); } - -weak_alias(truncate, truncate64); diff --git a/lib/libc/musl/src/unistd/x32/lseek.c b/lib/libc/musl/src/unistd/x32/lseek.c index 3263642953..5f93292fba 100644 --- a/lib/libc/musl/src/unistd/x32/lseek.c +++ b/lib/libc/musl/src/unistd/x32/lseek.c @@ -12,4 +12,3 @@ off_t __lseek(int fd, off_t offset, int whence) } weak_alias(__lseek, lseek); -weak_alias(__lseek, lseek64); diff --git a/src/musl.zig b/src/musl.zig index f4a3a0f35f..c66f464f9d 100644 --- a/src/musl.zig +++ b/src/musl.zig @@ -1466,6 +1466,7 @@ const src_files = [_][]const u8{ "musl/src/prng/seed48.c", "musl/src/prng/srand48.c", "musl/src/process/_Fork.c", + "musl/src/process/aarch64/vfork.s", "musl/src/process/arm/vfork.s", "musl/src/process/execl.c", "musl/src/process/execle.c", @@ -1496,6 +1497,7 @@ const src_files = [_][]const u8{ "musl/src/process/posix_spawnattr_setsigdefault.c", "musl/src/process/posix_spawnattr_setsigmask.c", "musl/src/process/posix_spawnp.c", + "musl/src/process/riscv64/vfork.s", "musl/src/process/s390x/vfork.s", "musl/src/process/sh/vfork.s", "musl/src/process/system.c", @@ -1579,11 +1581,8 @@ const src_files = [_][]const u8{ "musl/src/signal/m68k/sigsetjmp.s", "musl/src/signal/microblaze/restore.s", "musl/src/signal/microblaze/sigsetjmp.s", - "musl/src/signal/mips/restore.s", "musl/src/signal/mips/sigsetjmp.s", - "musl/src/signal/mips64/restore.s", "musl/src/signal/mips64/sigsetjmp.s", - "musl/src/signal/mipsn32/restore.s", "musl/src/signal/mipsn32/sigsetjmp.s", "musl/src/signal/or1k/sigsetjmp.s", "musl/src/signal/powerpc/restore.s", -- cgit v1.2.3 From 09c7f1bd7c4410948a984f2f155a6e36ff6279fd Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 19 Jun 2023 17:06:39 -0700 Subject: musl: update libc.S to v1.2.4 --- lib/libc/musl/libc.S | 233 +++++++-------------------------------------------- tools/gen_stubs.zig | 233 +++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 248 insertions(+), 218 deletions(-) (limited to 'lib/libc') diff --git a/lib/libc/musl/libc.S b/lib/libc/musl/libc.S index 7ee1f1a4ed..7d000824ef 100644 --- a/lib/libc/musl/libc.S +++ b/lib/libc/musl/libc.S @@ -168,7 +168,7 @@ _IO_putc: .weak _IO_putc_unlocked .type _IO_putc_unlocked, %function; _IO_putc_unlocked: -#if !defined(ARCH_riscv64) && !defined(ARCH_mips) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_riscv64) && !defined(ARCH_mips) && !defined(ARCH_mips64) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .globl ___tls_get_addr .type ___tls_get_addr, %function; ___tls_get_addr: @@ -187,7 +187,7 @@ __aio_suspend_time64: .globl __assert_fail .type __assert_fail, %function; __assert_fail: -#if !defined(ARCH_riscv64) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_riscv64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .globl __cachectl .type __cachectl, %function; __cachectl: @@ -313,10 +313,10 @@ __fseterr: .type __fsetlocking, %function; __fsetlocking: #ifdef PTR32 -.globl __fstat_time64 +.weak __fstat_time64 .type __fstat_time64, %function; __fstat_time64: -.globl __fstatat_time64 +.weak __fstatat_time64 .type __fstatat_time64, %function; __fstatat_time64: .globl __ftime64 @@ -338,22 +338,12 @@ __fwritable: .globl __fwriting .type __fwriting, %function; __fwriting: -#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_powerpc) .globl __fxstat .type __fxstat, %function; __fxstat: -#endif -WEAK64 __fxstat64 -.type __fxstat64, %function; -__fxstat64: -#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_powerpc) .globl __fxstatat .type __fxstatat, %function; __fxstatat: -#endif -WEAK64 __fxstatat64 -.type __fxstatat64, %function; -__fxstatat64: .weak __getdelim .type __getdelim, %function; __getdelim: @@ -508,7 +498,7 @@ __localtime64: .type __localtime64_r, %function; __localtime64_r: #endif -#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_mips) && !defined(ARCH_mips64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .globl __longjmp .type __longjmp, %function; __longjmp: @@ -521,14 +511,9 @@ __lstat_time64: .type __lutimes_time64, %function; __lutimes_time64: #endif -#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_powerpc) .globl __lxstat .type __lxstat, %function; __lxstat: -#endif -WEAK64 __lxstat64 -.type __lxstat64, %function; -__lxstat64: #ifdef PTR32 .globl __mktime64 .type __mktime64, %function; @@ -591,7 +576,17 @@ __recvmmsg_time64: .globl __res_state .type __res_state, %function; __res_state: -#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_mips) && !defined(ARCH_mips64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +.globl __restore +.type __restore, %function; +__restore: +#endif +#if !defined(ARCH_mips) && !defined(ARCH_mips64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +.globl __restore_rt +.type __restore_rt, %function; +__restore_rt: +#endif +#if !defined(ARCH_mips) && !defined(ARCH_mips64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .globl __riscv_flush_icache .type __riscv_flush_icache, %function; __riscv_flush_icache: @@ -792,27 +787,27 @@ __xpg_basename: .weak __xpg_strerror_r .type __xpg_strerror_r, %function; __xpg_strerror_r: -#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_powerpc) .globl __xstat .type __xstat, %function; __xstat: -#endif -WEAK64 __xstat64 -.type __xstat64, %function; -__xstat64: .weak _dl_debug_state .type _dl_debug_state, %function; _dl_debug_state: .globl _dlstart .type _dlstart, %function; _dlstart: +#if !defined(ARCH_riscv64) && !defined(ARCH_mips) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +.globl _dlstart_data +.type _dlstart_data, %function; +_dlstart_data: +#endif .globl _exit .type _exit, %function; _exit: .weak _fini .type _fini, %function; _fini: -#if !defined(ARCH_riscv64) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_riscv64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .globl _flush_cache .type _flush_cache, %function; _flush_cache: @@ -886,45 +881,24 @@ adjtimex: .globl aio_cancel .type aio_cancel, %function; aio_cancel: -.weak aio_cancel64 -.type aio_cancel64, %function; -aio_cancel64: .globl aio_error .type aio_error, %function; aio_error: -.weak aio_error64 -.type aio_error64, %function; -aio_error64: .globl aio_fsync .type aio_fsync, %function; aio_fsync: -.weak aio_fsync64 -.type aio_fsync64, %function; -aio_fsync64: .globl aio_read .type aio_read, %function; aio_read: -.weak aio_read64 -.type aio_read64, %function; -aio_read64: .globl aio_return .type aio_return, %function; aio_return: -.weak aio_return64 -.type aio_return64, %function; -aio_return64: .globl aio_suspend .type aio_suspend, %function; aio_suspend: -.weak aio_suspend64 -.type aio_suspend64, %function; -aio_suspend64: .globl aio_write .type aio_write, %function; aio_write: -.weak aio_write64 -.type aio_write64, %function; -aio_write64: .globl alarm .type alarm, %function; alarm: @@ -934,10 +908,7 @@ aligned_alloc: .globl alphasort .type alphasort, %function; alphasort: -.weak alphasort64 -.type alphasort64, %function; -alphasort64: -#if !defined(ARCH_riscv64) && !defined(ARCH_mips) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_riscv64) && !defined(ARCH_mips) && !defined(ARCH_mips64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .globl arch_prctl .type arch_prctl, %function; arch_prctl: @@ -1062,12 +1033,12 @@ cabsf: .globl cabsl .type cabsl, %function; cabsl: -#if !defined(ARCH_riscv64) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_riscv64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .weak cachectl .type cachectl, %function; cachectl: #endif -#if !defined(ARCH_riscv64) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_riscv64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .weak cacheflush .type cacheflush, %function; cacheflush: @@ -1384,9 +1355,6 @@ creall: .globl creat .type creat, %function; creat: -.weak creat64 -.type creat64, %function; -creat64: .globl crypt .type crypt, %function; crypt: @@ -1729,9 +1697,6 @@ faccessat: .globl fallocate .type fallocate, %function; fallocate: -.weak fallocate64 -.type fallocate64, %function; -fallocate64: .globl fanotify_init .type fanotify_init, %function; fanotify_init: @@ -1858,9 +1823,6 @@ fgetln: .globl fgetpos .type fgetpos, %function; fgetpos: -.weak fgetpos64 -.type fgetpos64, %function; -fgetpos64: .globl fgetpwent .type fgetpwent, %function; fgetpwent: @@ -1966,9 +1928,6 @@ fnmatch: .globl fopen .type fopen, %function; fopen: -.weak fopen64 -.type fopen64, %function; -fopen64: .globl fopencookie .type fopencookie, %function; fopencookie: @@ -2035,9 +1994,6 @@ fremovexattr: .globl freopen .type freopen, %function; freopen: -.weak freopen64 -.type freopen64, %function; -freopen64: .globl frexp .type frexp, %function; frexp: @@ -2056,42 +2012,24 @@ fseek: .weak fseeko .type fseeko, %function; fseeko: -.weak fseeko64 -.type fseeko64, %function; -fseeko64: .globl fsetpos .type fsetpos, %function; fsetpos: -.weak fsetpos64 -.type fsetpos64, %function; -fsetpos64: .globl fsetxattr .type fsetxattr, %function; fsetxattr: -.globl fstat +WEAK64 fstat .type fstat, %function; fstat: -.weak fstat64 -.type fstat64, %function; -fstat64: -.globl fstatat +WEAK64 fstatat .type fstatat, %function; fstatat: -.weak fstatat64 -.type fstatat64, %function; -fstatat64: .weak fstatfs .type fstatfs, %function; fstatfs: -.weak fstatfs64 -.type fstatfs64, %function; -fstatfs64: .globl fstatvfs .type fstatvfs, %function; fstatvfs: -.weak fstatvfs64 -.type fstatvfs64, %function; -fstatvfs64: .globl fsync .type fsync, %function; fsync: @@ -2101,9 +2039,6 @@ ftell: .weak ftello .type ftello, %function; ftello: -.weak ftello64 -.type ftello64, %function; -ftello64: .globl ftime .type ftime, %function; ftime: @@ -2113,18 +2048,12 @@ ftok: .globl ftruncate .type ftruncate, %function; ftruncate: -.weak ftruncate64 -.type ftruncate64, %function; -ftruncate64: .globl ftrylockfile .type ftrylockfile, %function; ftrylockfile: .globl ftw .type ftw, %function; ftw: -.weak ftw64 -.type ftw64, %function; -ftw64: .globl funlockfile .type funlockfile, %function; funlockfile: @@ -2203,9 +2132,6 @@ getdelim: .globl getdents .type getdents, %function; getdents: -.weak getdents64 -.type getdents64, %function; -getdents64: .globl getdomainname .type getdomainname, %function; getdomainname: @@ -2380,9 +2306,6 @@ getresuid: .globl getrlimit .type getrlimit, %function; getrlimit: -.weak getrlimit64 -.type getrlimit64, %function; -getrlimit64: .globl getrusage .type getrusage, %function; getrusage: @@ -2479,15 +2402,9 @@ getxattr: .globl glob .type glob, %function; glob: -.weak glob64 -.type glob64, %function; -glob64: .globl globfree .type globfree, %function; globfree: -.weak globfree64 -.type globfree64, %function; -globfree64: .globl gmtime .type gmtime, %function; gmtime: @@ -2632,12 +2549,12 @@ insque: .globl ioctl .type ioctl, %function; ioctl: -#if !defined(ARCH_riscv64) && !defined(ARCH_aarch64) +#if !defined(ARCH_riscv64) && !defined(ARCH_mips64) && !defined(ARCH_aarch64) .globl ioperm .type ioperm, %function; ioperm: #endif -#if !defined(ARCH_riscv64) && !defined(ARCH_aarch64) +#if !defined(ARCH_riscv64) && !defined(ARCH_mips64) && !defined(ARCH_aarch64) .globl iopl .type iopl, %function; iopl: @@ -2897,9 +2814,6 @@ linkat: .globl lio_listio .type lio_listio, %function; lio_listio: -.weak lio_listio64 -.type lio_listio64, %function; -lio_listio64: .globl listen .type listen, %function; listen: @@ -2945,9 +2859,6 @@ localtime_r: .globl lockf .type lockf, %function; lockf: -.weak lockf64 -.type lockf64, %function; -lockf64: .globl log .type log, %function; log: @@ -3029,18 +2940,12 @@ lsearch: .weak lseek .type lseek, %function; lseek: -.weak lseek64 -.type lseek64, %function; -lseek64: .globl lsetxattr .type lsetxattr, %function; lsetxattr: .globl lstat .type lstat, %function; lstat: -.weak lstat64 -.type lstat64, %function; -lstat64: .globl lutimes .type lutimes, %function; lutimes: @@ -3146,27 +3051,15 @@ mknodat: .globl mkostemp .type mkostemp, %function; mkostemp: -.weak mkostemp64 -.type mkostemp64, %function; -mkostemp64: .weak mkostemps .type mkostemps, %function; mkostemps: -.weak mkostemps64 -.type mkostemps64, %function; -mkostemps64: .globl mkstemp .type mkstemp, %function; mkstemp: -.weak mkstemp64 -.type mkstemp64, %function; -mkstemp64: .globl mkstemps .type mkstemps, %function; mkstemps: -.weak mkstemps64 -.type mkstemps64, %function; -mkstemps64: .globl mktemp .type mktemp, %function; mktemp: @@ -3185,9 +3078,6 @@ mlockall: .weak mmap .type mmap, %function; mmap: -.weak mmap64 -.type mmap64, %function; -mmap64: .globl modf .type modf, %function; modf: @@ -3329,9 +3219,6 @@ nexttowardl: .globl nftw .type nftw, %function; nftw: -.weak nftw64 -.type nftw64, %function; -nftw64: .globl ngettext .type ngettext, %function; ngettext: @@ -3380,9 +3267,6 @@ ntohs: .globl open .type open, %function; open: -.weak open64 -.type open64, %function; -open64: .globl open_by_handle_at .type open_by_handle_at, %function; open_by_handle_at: @@ -3395,9 +3279,6 @@ open_wmemstream: .globl openat .type openat, %function; openat: -.weak openat64 -.type openat64, %function; -openat64: .globl opendir .type opendir, %function; opendir: @@ -3443,15 +3324,9 @@ posix_close: .globl posix_fadvise .type posix_fadvise, %function; posix_fadvise: -.weak posix_fadvise64 -.type posix_fadvise64, %function; -posix_fadvise64: .globl posix_fallocate .type posix_fallocate, %function; posix_fallocate: -.weak posix_fallocate64 -.type posix_fallocate64, %function; -posix_fallocate64: .globl posix_madvise .type posix_madvise, %function; posix_madvise: @@ -3557,24 +3432,15 @@ prctl: .globl pread .type pread, %function; pread: -.weak pread64 -.type pread64, %function; -pread64: .globl preadv .type preadv, %function; preadv: -.weak preadv64 -.type preadv64, %function; -preadv64: .globl printf .type printf, %function; printf: .globl prlimit .type prlimit, %function; prlimit: -.weak prlimit64 -.type prlimit64, %function; -prlimit64: .globl process_vm_readv .type process_vm_readv, %function; process_vm_readv: @@ -3971,15 +3837,9 @@ putwchar_unlocked: .globl pwrite .type pwrite, %function; pwrite: -.weak pwrite64 -.type pwrite64, %function; -pwrite64: .globl pwritev .type pwritev, %function; pwritev: -.weak pwritev64 -.type pwritev64, %function; -pwritev64: .globl qsort .type qsort, %function; qsort: @@ -4013,12 +3873,6 @@ readahead: .globl readdir .type readdir, %function; readdir: -.weak readdir64 -.type readdir64, %function; -readdir64: -.weak readdir64_r -.type readdir64_r, %function; -readdir64_r: .globl readdir_r .type readdir_r, %function; readdir_r: @@ -4139,7 +3993,7 @@ rintf: .globl rintl .type rintl, %function; rintl: -#if !defined(ARCH_mips) && !defined(ARCH_i386) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) +#if !defined(ARCH_mips) && !defined(ARCH_mips64) && !defined(ARCH_x86) && !defined(ARCH_x86_64) && !defined(ARCH_powerpc) && !defined(ARCH_powerpc64) && !defined(ARCH_aarch64) .weak riscv_flush_icache .type riscv_flush_icache, %function; riscv_flush_icache: @@ -4186,9 +4040,6 @@ scalbnl: .globl scandir .type scandir, %function; scandir: -.weak scandir64 -.type scandir64, %function; -scandir64: .globl scanf .type scanf, %function; scanf: @@ -4285,9 +4136,6 @@ send: .globl sendfile .type sendfile, %function; sendfile: -.weak sendfile64 -.type sendfile64, %function; -sendfile64: .globl sendmmsg .type sendmmsg, %function; sendmmsg: @@ -4393,9 +4241,6 @@ setreuid: .globl setrlimit .type setrlimit, %function; setrlimit: -.weak setrlimit64 -.type setrlimit64, %function; -setrlimit64: .globl setservent .type setservent, %function; setservent: @@ -4612,21 +4457,12 @@ sscanf: .globl stat .type stat, %function; stat: -.weak stat64 -.type stat64, %function; -stat64: .weak statfs .type statfs, %function; statfs: -.weak statfs64 -.type statfs64, %function; -statfs64: .globl statvfs .type statvfs, %function; statvfs: -.weak statvfs64 -.type statvfs64, %function; -statvfs64: .globl stime .type stime, %function; stime: @@ -4984,9 +4820,6 @@ timespec_get: .globl tmpfile .type tmpfile, %function; tmpfile: -.weak tmpfile64 -.type tmpfile64, %function; -tmpfile64: .globl tmpnam .type tmpnam, %function; tmpnam: @@ -5029,9 +4862,6 @@ trunc: .globl truncate .type truncate, %function; truncate: -.weak truncate64 -.type truncate64, %function; -truncate64: .globl truncf .type truncf, %function; truncf: @@ -5152,9 +4982,6 @@ verrx: .globl versionsort .type versionsort, %function; versionsort: -.weak versionsort64 -.type versionsort64, %function; -versionsort64: .globl vfork .type vfork, %function; vfork: diff --git a/tools/gen_stubs.zig b/tools/gen_stubs.zig index 78b0086121..dab45350f9 100644 --- a/tools/gen_stubs.zig +++ b/tools/gen_stubs.zig @@ -11,6 +11,7 @@ //! * One of the following, corresponding to the CPU architecture: //! - `-DARCH_riscv64` //! - `-DARCH_mips` +//! - `-DARCH_mips64` //! - `-DARCH_i386` //! - `-DARCH_x86_64` //! - `-DARCH_powerpc` @@ -28,9 +29,20 @@ const log = std.log; const elf = std.elf; const native_endian = @import("builtin").target.cpu.arch.endian(); -const arches: [7]std.Target.Cpu.Arch = blk: { - var result: [7]std.Target.Cpu.Arch = undefined; - for (.{ .riscv64, .mips, .x86, .x86_64, .powerpc, .powerpc64, .aarch64 }) |arch| { +const inputs = .{ + .riscv64, + .mips, + .mips64, + .x86, + .x86_64, + .powerpc, + .powerpc64, + .aarch64, +}; + +const arches: [inputs.len]std.Target.Cpu.Arch = blk: { + var result: [inputs.len]std.Target.Cpu.Arch = undefined; + for (inputs) |arch| { result[archIndex(arch)] = arch; } break :blk result; @@ -56,6 +68,7 @@ const MultiSym = struct { fn is32Only(ms: MultiSym) bool { return ms.present[archIndex(.riscv64)] == false and ms.present[archIndex(.mips)] == true and + ms.present[archIndex(.mips64)] == false and ms.present[archIndex(.x86)] == true and ms.present[archIndex(.x86_64)] == false and ms.present[archIndex(.powerpc)] == true and @@ -97,6 +110,7 @@ const MultiSym = struct { const map = .{ .{ .riscv64, 8 }, .{ .mips, 4 }, + .{ .mips64, 8 }, .{ .x86, 4 }, .{ .x86_64, 8 }, .{ .powerpc, 4 }, @@ -118,6 +132,7 @@ const MultiSym = struct { const map = .{ .{ .riscv64, 16 }, .{ .mips, 8 }, + .{ .mips64, 16 }, .{ .x86, 8 }, .{ .x86_64, 16 }, .{ .powerpc, 8 }, @@ -139,6 +154,7 @@ const MultiSym = struct { const map = .{ .{ .riscv64, 2 }, .{ .mips, 1 }, + .{ .mips64, 2 }, .{ .x86, 1 }, .{ .x86_64, 2 }, .{ .powerpc, 1 }, @@ -187,17 +203,23 @@ pub fn main() !void { } for (arches) |arch| { - const libc_so_path = try std.fmt.allocPrint(arena, "{s}/lib/libc.so", .{@tagName(arch)}); + const libc_so_path = try std.fmt.allocPrint(arena, "{s}/lib/libc.so", .{ + archMuslName(arch), + }); // Read the ELF header. - const elf_bytes = try build_all_dir.readFileAllocOptions( + const elf_bytes = build_all_dir.readFileAllocOptions( arena, libc_so_path, 100 * 1024 * 1024, 1 * 1024 * 1024, @alignOf(elf.Elf64_Ehdr), null, - ); + ) catch |err| { + std.debug.panic("unable to read '{s}/{s}': {s}", .{ + build_all_path, libc_so_path, @errorName(err), + }); + }; const header = try elf.Header.parse(elf_bytes[0..@sizeOf(elf.Elf64_Ehdr)]); const parse: Parse = .{ @@ -437,9 +459,15 @@ fn parseElf(parse: Parse, comptime is_64: bool, comptime endian: builtin.Endian) const dynstr = elf_bytes[dynstr_offset..]; // Sort the list by address, ascending. - mem.sort(Sym, @alignCast(8, dyn_syms), {}, S.symbolAddrLessThan); + // We need a copy to fix alignment. + const copied_dyn_syms = copy: { + const ptr = try arena.alloc(Sym, dyn_syms.len); + @memcpy(ptr, dyn_syms); + break :copy ptr; + }; + mem.sort(Sym, copied_dyn_syms, {}, S.symbolAddrLessThan); - for (dyn_syms) |sym| { + for (copied_dyn_syms) |sym| { const this_section = s(sym.st_shndx); const name = try arena.dupe(u8, mem.sliceTo(dynstr[s(sym.st_name)..], 0)); const ty = @truncate(u4, sym.st_info); @@ -555,19 +583,36 @@ fn archIndex(arch: std.Target.Cpu.Arch) u8 { // zig fmt: off .riscv64 => 0, .mips => 1, - .x86 => 2, - .x86_64 => 3, - .powerpc => 4, - .powerpc64 => 5, - .aarch64 => 6, + .mips64 => 2, + .x86 => 3, + .x86_64 => 4, + .powerpc => 5, + .powerpc64 => 6, + .aarch64 => 7, + else => unreachable, + // zig fmt: on + }; +} + +fn archMuslName(arch: std.Target.Cpu.Arch) []const u8 { + return switch (arch) { + // zig fmt: off + .riscv64 => "riscv64", + .mips => "mips", + .mips64 => "mips64", + .x86 => "i386", + .x86_64 => "x86_64", + .powerpc => "powerpc", + .powerpc64 => "powerpc64", + .aarch64 => "aarch64", else => unreachable, // zig fmt: on }; } fn archSetName(arch_set: [arches.len]bool) []const u8 { - for (arches, 0..) |arch, i| { - if (arch_set[i]) { + for (arches, arch_set) |arch, set_item| { + if (set_item) { return @tagName(arch); } } @@ -913,4 +958,162 @@ const blacklisted_symbols = [_][]const u8{ "sinf128", "sqrtf128", "truncf128", + "__aarch64_cas16_acq", + "__aarch64_cas16_acq_rel", + "__aarch64_cas16_rel", + "__aarch64_cas16_relax", + "__aarch64_cas1_acq", + "__aarch64_cas1_acq_rel", + "__aarch64_cas1_rel", + "__aarch64_cas1_relax", + "__aarch64_cas2_acq", + "__aarch64_cas2_acq_rel", + "__aarch64_cas2_rel", + "__aarch64_cas2_relax", + "__aarch64_cas4_acq", + "__aarch64_cas4_acq_rel", + "__aarch64_cas4_rel", + "__aarch64_cas4_relax", + "__aarch64_cas8_acq", + "__aarch64_cas8_acq_rel", + "__aarch64_cas8_rel", + "__aarch64_cas8_relax", + "__aarch64_ldadd1_acq", + "__aarch64_ldadd1_acq_rel", + "__aarch64_ldadd1_rel", + "__aarch64_ldadd1_relax", + "__aarch64_ldadd2_acq", + "__aarch64_ldadd2_acq_rel", + "__aarch64_ldadd2_rel", + "__aarch64_ldadd2_relax", + "__aarch64_ldadd4_acq", + "__aarch64_ldadd4_acq_rel", + "__aarch64_ldadd4_rel", + "__aarch64_ldadd4_relax", + "__aarch64_ldadd8_acq", + "__aarch64_ldadd8_acq_rel", + "__aarch64_ldadd8_rel", + "__aarch64_ldadd8_relax", + "__aarch64_ldclr1_acq", + "__aarch64_ldclr1_acq_rel", + "__aarch64_ldclr1_rel", + "__aarch64_ldclr1_relax", + "__aarch64_ldclr2_acq", + "__aarch64_ldclr2_acq_rel", + "__aarch64_ldclr2_rel", + "__aarch64_ldclr2_relax", + "__aarch64_ldclr4_acq", + "__aarch64_ldclr4_acq_rel", + "__aarch64_ldclr4_rel", + "__aarch64_ldclr4_relax", + "__aarch64_ldclr8_acq", + "__aarch64_ldclr8_acq_rel", + "__aarch64_ldclr8_rel", + "__aarch64_ldclr8_relax", + "__aarch64_ldeor1_acq", + "__aarch64_ldeor1_acq_rel", + "__aarch64_ldeor1_rel", + "__aarch64_ldeor1_relax", + "__aarch64_ldeor2_acq", + "__aarch64_ldeor2_acq_rel", + "__aarch64_ldeor2_rel", + "__aarch64_ldeor2_relax", + "__aarch64_ldeor4_acq", + "__aarch64_ldeor4_acq_rel", + "__aarch64_ldeor4_rel", + "__aarch64_ldeor4_relax", + "__aarch64_ldeor8_acq", + "__aarch64_ldeor8_acq_rel", + "__aarch64_ldeor8_rel", + "__aarch64_ldeor8_relax", + "__aarch64_ldset1_acq", + "__aarch64_ldset1_acq_rel", + "__aarch64_ldset1_rel", + "__aarch64_ldset1_relax", + "__aarch64_ldset2_acq", + "__aarch64_ldset2_acq_rel", + "__aarch64_ldset2_rel", + "__aarch64_ldset2_relax", + "__aarch64_ldset4_acq", + "__aarch64_ldset4_acq_rel", + "__aarch64_ldset4_rel", + "__aarch64_ldset4_relax", + "__aarch64_ldset8_acq", + "__aarch64_ldset8_acq_rel", + "__aarch64_ldset8_rel", + "__aarch64_ldset8_relax", + "__aarch64_swp1_acq", + "__aarch64_swp1_acq_rel", + "__aarch64_swp1_rel", + "__aarch64_swp1_relax", + "__aarch64_swp2_acq", + "__aarch64_swp2_acq_rel", + "__aarch64_swp2_rel", + "__aarch64_swp2_relax", + "__aarch64_swp4_acq", + "__aarch64_swp4_acq_rel", + "__aarch64_swp4_rel", + "__aarch64_swp4_relax", + "__aarch64_swp8_acq", + "__aarch64_swp8_acq_rel", + "__aarch64_swp8_rel", + "__aarch64_swp8_relax", + "__addhf3", + "__atomic_compare_exchange_16", + "__atomic_exchange_16", + "__atomic_fetch_add_16", + "__atomic_fetch_and_16", + "__atomic_fetch_nand_16", + "__atomic_fetch_or_16", + "__atomic_fetch_sub_16", + "__atomic_fetch_umax_1", + "__atomic_fetch_umax_16", + "__atomic_fetch_umax_2", + "__atomic_fetch_umax_4", + "__atomic_fetch_umax_8", + "__atomic_fetch_umin_1", + "__atomic_fetch_umin_16", + "__atomic_fetch_umin_2", + "__atomic_fetch_umin_4", + "__atomic_fetch_umin_8", + "__atomic_fetch_xor_16", + "__atomic_load_16", + "__atomic_store_16", + "__cmphf2", + "__cmpxf2", + "__divdc3", + "__divhc3", + "__divhf3", + "__divkc3", + "__divsc3", + "__divtc3", + "__divxc3", + "__eqhf2", + "__extendhfdf2", + "__fixhfdi", + "__fixhfsi", + "__fixhfti", + "__fixunshfdi", + "__fixunshfsi", + "__fixunshfti", + "__floatdihf", + "__floatsihf", + "__floattihf", + "__floatundihf", + "__floatunsihf", + "__floatuntihf", + "__gehf2", + "__gthf2", + "__lehf2", + "__lthf2", + "__mulhc3", + "__mulhf3", + "__neghf2", + "__negkf2", + "__negtf2", + "__negxf2", + "__nehf2", + "__subhf3", + "__unordhf2", + "__unordxf2", }; -- cgit v1.2.3