| author | |
| committer | |
| log | 17aa8c3ee29fae4bfbd6acc91eed8d229f627c32 |
| tree | bae56be9806c1aaf0caafba25aeb7adff1974a2d |
| parent | 0cb1c1696f4bf19a8652100f5ee62262d51b0127 |
| parent | 2aec35525d6eaa5d3d47a1c46d41d911571a6932 |
| signature |
closes #3463260 files changed, 2344 insertions(+), 1343 deletions(-)
lib/libc/include/aarch64-linux-musl/bits/hwcap.h+9-1| ... | @@ -29,4 +29,12 @@ | ... | @@ -29,4 +29,12 @@ |
| 29 | #define HWCAP_SSBS		(1 << 28) | 29 | #define HWCAP_SSBS		(1 << 28) |
| 30 | #define HWCAP_SB		(1 << 29) | 30 | #define HWCAP_SB		(1 << 29) |
| 31 | #define HWCAP_PACA		(1 << 30) | 31 | #define HWCAP_PACA		(1 << 30) |
| 32 | #define HWCAP_PACG		(1UL << 31) | ||
| \ No newline at end of file | |||
| 32 | #define HWCAP_PACG		(1UL << 31) | ||
| 33 | |||
| 34 | #define HWCAP2_DCPODP		(1 << 0) | ||
| 35 | #define HWCAP2_SVE2		(1 << 1) | ||
| 36 | #define HWCAP2_SVEAES		(1 << 2) | ||
| 37 | #define HWCAP2_SVEPMULL		(1 << 3) | ||
| 38 | #define HWCAP2_SVEBITPERM	(1 << 4) | ||
| 39 | #define HWCAP2_SVESHA3		(1 << 5) | ||
| 40 | #define HWCAP2_SVESM4		(1 << 6) | ||
| \ No newline at end of file | |||
lib/libc/include/aarch64-linux-musl/bits/ipc.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct ipc_perm { | ||
| 2 | 	key_t __ipc_perm_key; | ||
| 3 | 	uid_t uid; | ||
| 4 | 	gid_t gid; | ||
| 5 | 	uid_t cuid; | ||
| 6 | 	gid_t cgid; | ||
| 7 | 	mode_t mode; | ||
| 8 | 	unsigned short __ipc_perm_seq; | ||
| 9 | |||
| 10 | 	unsigned long __pad1; | ||
| 11 | 	unsigned long __pad2; | ||
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0 | ||
| \ No newline at end of file | |||
lib/libc/include/aarch64-linux-musl/bits/limits.h deleted-7| ... | @@ -1,7 +0,0 @@ | ||
| 1 | #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ | ||
| 2 | || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
| 3 | #define LONG_BIT 64 | ||
| 4 | #endif | ||
| 5 | |||
| 6 | #define LONG_MAX 0x7fffffffffffffffL | ||
| 7 | #define LLONG_MAX 0x7fffffffffffffffLL | ||
| \ No newline at end of file | |||
lib/libc/include/aarch64-linux-musl/bits/posix.h deleted-2| ... | @@ -1,2 +0,0 @@ | ||
| 1 | #define _POSIX_V6_LP64_OFF64 1 | ||
| 2 | #define _POSIX_V7_LP64_OFF64 1 | ||
| \ No newline at end of file | |||
lib/libc/include/aarch64-linux-musl/bits/reg.h deleted-2| ... | @@ -1,2 +0,0 @@ | ||
| 1 | #undef __WORDSIZE | ||
| 2 | #define __WORDSIZE 64 | ||
| \ No newline at end of file | |||
lib/libc/include/aarch64-linux-musl/bits/sem.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN | ||
| 6 | 	unsigned short sem_nsems; | ||
| 7 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 8 | #else | ||
| 9 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 10 | 	unsigned short sem_nsems; | ||
| 11 | #endif | ||
| 12 | 	time_t __unused3; | ||
| 13 | 	time_t __unused4; | ||
| 14 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/aarch64-linux-musl/bits/stat.h deleted-18| ... | @@ -1,18 +0,0 @@ | ||
| 1 | struct stat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	ino_t st_ino; | ||
| 4 | 	mode_t st_mode; | ||
| 5 | 	nlink_t st_nlink; | ||
| 6 | 	uid_t st_uid; | ||
| 7 | 	gid_t st_gid; | ||
| 8 | 	dev_t st_rdev; | ||
| 9 | 	unsigned long __pad; | ||
| 10 | 	off_t st_size; | ||
| 11 | 	blksize_t st_blksize; | ||
| 12 | 	int __pad2; | ||
| 13 | 	blkcnt_t st_blocks; | ||
| 14 | 	struct timespec st_atim; | ||
| 15 | 	struct timespec st_mtim; | ||
| 16 | 	struct timespec st_ctim; | ||
| 17 | 	unsigned __unused[2]; | ||
| 18 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/aarch64-linux-musl/bits/syscall.h+13-1| ... | @@ -281,6 +281,12 @@ | ... | @@ -281,6 +281,12 @@ |
| 281 | #define __NR_io_uring_setup 425 | 281 | #define __NR_io_uring_setup 425 |
| 282 | #define __NR_io_uring_enter 426 | 282 | #define __NR_io_uring_enter 426 |
| 283 | #define __NR_io_uring_register 427 | 283 | #define __NR_io_uring_register 427 |
| 284 | #define __NR_open_tree		428 | ||
| 285 | #define __NR_move_mount		429 | ||
| 286 | #define __NR_fsopen		430 | ||
| 287 | #define __NR_fsconfig		431 | ||
| 288 | #define __NR_fsmount		432 | ||
| 289 | #define __NR_fspick		433 | ||
| 284 | 290 | ||
| 285 | #define SYS_io_setup 0 | 291 | #define SYS_io_setup 0 |
| 286 | #define SYS_io_destroy 1 | 292 | #define SYS_io_destroy 1 |
| ... | @@ -564,4 +570,10 @@ | ... | @@ -564,4 +570,10 @@ |
| 564 | #define SYS_pidfd_send_signal 424 | 570 | #define SYS_pidfd_send_signal 424 |
| 565 | #define SYS_io_uring_setup 425 | 571 | #define SYS_io_uring_setup 425 |
| 566 | #define SYS_io_uring_enter 426 | 572 | #define SYS_io_uring_enter 426 |
| 567 | #define SYS_io_uring_register 427 | ||
| \ No newline at end of file | |||
| 573 | #define SYS_io_uring_register 427 | ||
| 574 | #define SYS_open_tree		428 | ||
| 575 | #define SYS_move_mount		429 | ||
| 576 | #define SYS_fsopen		430 | ||
| 577 | #define SYS_fsconfig		431 | ||
| 578 | #define SYS_fsmount		432 | ||
| 579 | #define SYS_fspick		433 | ||
| \ No newline at end of file | |||
lib/libc/include/arm-linux-musl/bits/limits.h created+7| ... | @@ -0,0 +1,7 @@ | ||
| 1 | #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ | ||
| 2 | || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
| 3 | #define LONG_BIT 32 | ||
| 4 | #endif | ||
| 5 | |||
| 6 | #define LONG_MAX 0x7fffffffL | ||
| 7 | #define LLONG_MAX 0x7fffffffffffffffLL | ||
| \ No newline at end of file | |||
lib/libc/include/arm-linux-musl/bits/posix.h created+2| ... | @@ -0,0 +1,2 @@ | ||
| 1 | #define _POSIX_V6_ILP32_OFFBIG 1 | ||
| 2 | #define _POSIX_V7_ILP32_OFFBIG 1 | ||
| \ No newline at end of file | |||
lib/libc/include/arm-linux-musl/bits/reg.h created+3| ... | @@ -0,0 +1,3 @@ | ||
| 1 | #undef __WORDSIZE | ||
| 2 | #define __WORDSIZE 32 | ||
| 3 | /* FIXME */ | ||
| \ No newline at end of file | |||
lib/libc/include/arm-linux-musl/bits/sem.h created+16| ... | @@ -0,0 +1,16 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	long __unused1; | ||
| 5 | 	time_t sem_ctime; | ||
| 6 | 	long __unused2; | ||
| 7 | #if __BYTE_ORDER == __LITTLE_ENDIAN | ||
| 8 | 	unsigned short sem_nsems; | ||
| 9 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; | ||
| 10 | #else | ||
| 11 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; | ||
| 12 | 	unsigned short sem_nsems; | ||
| 13 | #endif | ||
| 14 | 	long __unused3; | ||
| 15 | 	long __unused4; | ||
| 16 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/arm-linux-musl/bits/stat.h created+21| ... | @@ -0,0 +1,21 @@ | ||
| 1 | /* copied from kernel definition, but with padding replaced | ||
| 2 | * by the corresponding correctly-sized userspace types. */ | ||
| 3 | |||
| 4 | struct stat { | ||
| 5 | 	dev_t st_dev; | ||
| 6 | 	int __st_dev_padding; | ||
| 7 | 	long __st_ino_truncated; | ||
| 8 | 	mode_t st_mode; | ||
| 9 | 	nlink_t st_nlink; | ||
| 10 | 	uid_t st_uid; | ||
| 11 | 	gid_t st_gid; | ||
| 12 | 	dev_t st_rdev; | ||
| 13 | 	int __st_rdev_padding; | ||
| 14 | 	off_t st_size; | ||
| 15 | 	blksize_t st_blksize; | ||
| 16 | 	blkcnt_t st_blocks; | ||
| 17 | 	struct timespec st_atim; | ||
| 18 | 	struct timespec st_mtim; | ||
| 19 | 	struct timespec st_ctim; | ||
| 20 | 	ino_t st_ino; | ||
| 21 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/arm-linux-musl/bits/syscall.h+13-1| ... | @@ -381,6 +381,12 @@ | ... | @@ -381,6 +381,12 @@ |
| 381 | #define __NR_io_uring_setup	425 | 381 | #define __NR_io_uring_setup	425 |
| 382 | #define __NR_io_uring_enter	426 | 382 | #define __NR_io_uring_enter	426 |
| 383 | #define __NR_io_uring_register	427 | 383 | #define __NR_io_uring_register	427 |
| 384 | #define __NR_open_tree		428 | ||
| 385 | #define __NR_move_mount		429 | ||
| 386 | #define __NR_fsopen		430 | ||
| 387 | #define __NR_fsconfig		431 | ||
| 388 | #define __NR_fsmount		432 | ||
| 389 | #define __NR_fspick		433 | ||
| 384 | 390 | ||
| 385 | #define __ARM_NR_breakpoint	0x0f0001 | 391 | #define __ARM_NR_breakpoint	0x0f0001 |
| 386 | #define __ARM_NR_cacheflush	0x0f0002 | 392 | #define __ARM_NR_cacheflush	0x0f0002 |
| ... | @@ -771,4 +777,10 @@ | ... | @@ -771,4 +777,10 @@ |
| 771 | #define SYS_pidfd_send_signal	424 | 777 | #define SYS_pidfd_send_signal	424 |
| 772 | #define SYS_io_uring_setup	425 | 778 | #define SYS_io_uring_setup	425 |
| 773 | #define SYS_io_uring_enter	426 | 779 | #define SYS_io_uring_enter	426 |
| 774 | #define SYS_io_uring_register	427 | ||
| \ No newline at end of file | |||
| 780 | #define SYS_io_uring_register	427 | ||
| 781 | #define SYS_open_tree		428 | ||
| 782 | #define SYS_move_mount		429 | ||
| 783 | #define SYS_fsopen		430 | ||
| 784 | #define SYS_fsconfig		431 | ||
| 785 | #define SYS_fsmount		432 | ||
| 786 | #define SYS_fspick		433 | ||
| \ No newline at end of file | |||
lib/libc/include/generic-musl/bits/ipc.h+1-3| ... | @@ -8,6 +8,4 @@ struct ipc_perm { | ... | @@ -8,6 +8,4 @@ struct ipc_perm { |
| 8 | 	int __ipc_perm_seq; | 8 | 	int __ipc_perm_seq; |
| 9 | 	long __pad1; | 9 | 	long __pad1; |
| 10 | 	long __pad2; | 10 | 	long __pad2; |
| 11 | }; | ||
| 12 | |||
| 13 | #define IPC_64 0x100 | ||
| \ No newline at end of file | |||
| 11 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/generic-musl/bits/ipcstat.h created+1| ... | @@ -0,0 +1 @@ | ||
| 1 | #define IPC_STAT 2 | ||
| \ No newline at end of file | |||
lib/libc/include/generic-musl/bits/limits.h+2-2| ... | @@ -1,7 +1,7 @@ | ... | @@ -1,7 +1,7 @@ |
| 1 | #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ | 1 | #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ |
| 2 | || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | 2 | || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
| 3 | #define LONG_BIT 32 | 3 | #define LONG_BIT 64 |
| 4 | #endif | 4 | #endif |
| 5 | 5 | ||
| 6 | #define LONG_MAX 0x7fffffffL | 6 | #define LONG_MAX 0x7fffffffffffffffL |
| 7 | #define LLONG_MAX 0x7fffffffffffffffLL | 7 | #define LLONG_MAX 0x7fffffffffffffffLL |
| \ No newline at end of file | |||
lib/libc/include/generic-musl/bits/msg.h+1-2| ... | @@ -8,6 +8,5 @@ struct msqid_ds { | ... | @@ -8,6 +8,5 @@ struct msqid_ds { |
| 8 | 	msglen_t msg_qbytes; | 8 | 	msglen_t msg_qbytes; |
| 9 | 	pid_t msg_lspid; | 9 | 	pid_t msg_lspid; |
| 10 | 	pid_t msg_lrpid; | 10 | 	pid_t msg_lrpid; |
| 11 | 	unsigned long __pad1; | 11 | 	unsigned long __unused[2]; |
| 12 | 	unsigned long __pad2; | ||
| 13 | }; | 12 | }; |
| \ No newline at end of file | |||
lib/libc/include/generic-musl/bits/posix.h+2-2| ... | @@ -1,2 +1,2 @@ | ... | @@ -1,2 +1,2 @@ |
| 1 | #define _POSIX_V6_ILP32_OFFBIG 1 | ||
| 2 | #define _POSIX_V7_ILP32_OFFBIG 1 | ||
| \ No newline at end of file | |||
| 1 | #define _POSIX_V6_LP64_OFF64 1 | ||
| 2 | #define _POSIX_V7_LP64_OFF64 1 | ||
| \ No newline at end of file | |||
lib/libc/include/generic-musl/bits/reg.h+1-2| ... | @@ -1,3 +1,2 @@ | ... | @@ -1,3 +1,2 @@ |
| 1 | #undef __WORDSIZE | 1 | #undef __WORDSIZE |
| 2 | #define __WORDSIZE 32 | ||
| 3 | /* FIXME */ | ||
| \ No newline at end of file | |||
| 2 | #define __WORDSIZE 64 | ||
| \ No newline at end of file | |||
lib/libc/include/generic-musl/bits/sem.h+4-6| ... | @@ -1,16 +1,14 @@ | ... | @@ -1,16 +1,14 @@ |
| 1 | struct semid_ds { | 1 | struct semid_ds { |
| 2 | 	struct ipc_perm sem_perm; | 2 | 	struct ipc_perm sem_perm; |
| 3 | 	time_t sem_otime; | 3 | 	time_t sem_otime; |
| 4 | 	time_t __unused1; | ||
| 5 | 	time_t sem_ctime; | 4 | 	time_t sem_ctime; |
| 6 | 	time_t __unused2; | ||
| 7 | #if __BYTE_ORDER == __LITTLE_ENDIAN | 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN |
| 8 | 	unsigned short sem_nsems; | 6 | 	unsigned short sem_nsems; |
| 9 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | 7 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; |
| 10 | #else | 8 | #else |
| 11 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | 9 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; |
| 12 | 	unsigned short sem_nsems; | 10 | 	unsigned short sem_nsems; |
| 13 | #endif | 11 | #endif |
| 14 | 	time_t __unused3; | 12 | 	long __unused3; |
| 15 | 	time_t __unused4; | 13 | 	long __unused4; |
| 16 | }; | 14 | }; |
| \ No newline at end of file | |||
lib/libc/include/generic-musl/bits/stat.h+4-7| ... | @@ -1,21 +1,18 @@ | ... | @@ -1,21 +1,18 @@ |
| 1 | /* copied from kernel definition, but with padding replaced | ||
| 2 | * by the corresponding correctly-sized userspace types. */ | ||
| 3 | |||
| 4 | struct stat { | 1 | struct stat { |
| 5 | 	dev_t st_dev; | 2 | 	dev_t st_dev; |
| 6 | 	int __st_dev_padding; | 3 | 	ino_t st_ino; |
| 7 | 	long __st_ino_truncated; | ||
| 8 | 	mode_t st_mode; | 4 | 	mode_t st_mode; |
| 9 | 	nlink_t st_nlink; | 5 | 	nlink_t st_nlink; |
| 10 | 	uid_t st_uid; | 6 | 	uid_t st_uid; |
| 11 | 	gid_t st_gid; | 7 | 	gid_t st_gid; |
| 12 | 	dev_t st_rdev; | 8 | 	dev_t st_rdev; |
| 13 | 	int __st_rdev_padding; | 9 | 	unsigned long __pad; |
| 14 | 	off_t st_size; | 10 | 	off_t st_size; |
| 15 | 	blksize_t st_blksize; | 11 | 	blksize_t st_blksize; |
| 12 | 	int __pad2; | ||
| 16 | 	blkcnt_t st_blocks; | 13 | 	blkcnt_t st_blocks; |
| 17 | 	struct timespec st_atim; | 14 | 	struct timespec st_atim; |
| 18 | 	struct timespec st_mtim; | 15 | 	struct timespec st_mtim; |
| 19 | 	struct timespec st_ctim; | 16 | 	struct timespec st_ctim; |
| 20 | 	ino_t st_ino; | 17 | 	unsigned __unused[2]; |
| 21 | }; | 18 | }; |
| \ No newline at end of file | |||
lib/libc/include/generic-musl/fcntl.h+5| ... | @@ -100,6 +100,11 @@ int posix_fallocate(int, off_t, off_t); | ... | @@ -100,6 +100,11 @@ int posix_fallocate(int, off_t, off_t); |
| 100 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | 100 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
| 101 | #define AT_NO_AUTOMOUNT 0x800 | 101 | #define AT_NO_AUTOMOUNT 0x800 |
| 102 | #define AT_EMPTY_PATH 0x1000 | 102 | #define AT_EMPTY_PATH 0x1000 |
| 103 | #define AT_STATX_SYNC_TYPE 0x6000 | ||
| 104 | #define AT_STATX_SYNC_AS_STAT 0x0000 | ||
| 105 | #define AT_STATX_FORCE_SYNC 0x2000 | ||
| 106 | #define AT_STATX_DONT_SYNC 0x4000 | ||
| 107 | #define AT_RECURSIVE 0x8000 | ||
| 103 | 108 | ||
| 104 | #define FAPPEND O_APPEND | 109 | #define FAPPEND O_APPEND |
| 105 | #define FFSYNC O_SYNC | 110 | #define FFSYNC O_SYNC |
lib/libc/include/generic-musl/glob.h+3| ... | @@ -31,6 +31,9 @@ void globfree(glob_t *); | ... | @@ -31,6 +31,9 @@ void globfree(glob_t *); |
| 31 | #define GLOB_NOESCAPE 0x40 | 31 | #define GLOB_NOESCAPE 0x40 |
| 32 | #define	GLOB_PERIOD 0x80 | 32 | #define	GLOB_PERIOD 0x80 |
| 33 | 33 | ||
| 34 | #define GLOB_TILDE 0x1000 | ||
| 35 | #define GLOB_TILDE_CHECK 0x4000 | ||
| 36 | |||
| 34 | #define GLOB_NOSPACE 1 | 37 | #define GLOB_NOSPACE 1 |
| 35 | #define GLOB_ABORTED 2 | 38 | #define GLOB_ABORTED 2 |
| 36 | #define GLOB_NOMATCH 3 | 39 | #define GLOB_NOMATCH 3 |
lib/libc/include/generic-musl/netinet/if_ether.h+1| ... | @@ -76,6 +76,7 @@ | ... | @@ -76,6 +76,7 @@ |
| 76 | #define ETH_P_QINQ2	0x9200 | 76 | #define ETH_P_QINQ2	0x9200 |
| 77 | #define ETH_P_QINQ3	0x9300 | 77 | #define ETH_P_QINQ3	0x9300 |
| 78 | #define ETH_P_EDSA	0xDADA | 78 | #define ETH_P_EDSA	0xDADA |
| 79 | #define ETH_P_DSA_8021Q	0xDADB | ||
| 79 | #define ETH_P_IFE	0xED3E | 80 | #define ETH_P_IFE	0xED3E |
| 80 | #define ETH_P_AF_IUCV	0xFBFB | 81 | #define ETH_P_AF_IUCV	0xFBFB |
| 81 | 82 |
lib/libc/include/generic-musl/sched.h+7-4| ... | @@ -18,10 +18,12 @@ extern "C" { | ... | @@ -18,10 +18,12 @@ extern "C" { |
| 18 | 18 | ||
| 19 | struct sched_param { | 19 | struct sched_param { |
| 20 | 	int sched_priority; | 20 | 	int sched_priority; |
| 21 | 	int sched_ss_low_priority; | 21 | 	int __reserved1; |
| 22 | 	struct timespec sched_ss_repl_period; | 22 | 	struct { |
| 23 | 	struct timespec sched_ss_init_budget; | 23 | 		time_t __reserved1; |
| 24 | 	int sched_ss_max_repl; | 24 | 		long __reserved2; |
| 25 | 	} __reserved2[2]; | ||
| 26 | 	int __reserved3; | ||
| 25 | }; | 27 | }; |
| 26 | 28 | ||
| 27 | int sched_get_priority_max(int); | 29 | int sched_get_priority_max(int); |
| ... | @@ -47,6 +49,7 @@ int sched_yield(void); | ... | @@ -47,6 +49,7 @@ int sched_yield(void); |
| 47 | #define CLONE_FS	0x00000200 | 49 | #define CLONE_FS	0x00000200 |
| 48 | #define CLONE_FILES	0x00000400 | 50 | #define CLONE_FILES	0x00000400 |
| 49 | #define CLONE_SIGHAND	0x00000800 | 51 | #define CLONE_SIGHAND	0x00000800 |
| 52 | #define CLONE_PIDFD	0x00001000 | ||
| 50 | #define CLONE_PTRACE	0x00002000 | 53 | #define CLONE_PTRACE	0x00002000 |
| 51 | #define CLONE_VFORK	0x00004000 | 54 | #define CLONE_VFORK	0x00004000 |
| 52 | #define CLONE_PARENT	0x00008000 | 55 | #define CLONE_PARENT	0x00008000 |
lib/libc/include/generic-musl/spawn.h+5| ... | @@ -71,6 +71,11 @@ int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t *__restrict, int | ... | @@ -71,6 +71,11 @@ int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t *__restrict, int |
| 71 | int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *, int); | 71 | int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *, int); |
| 72 | int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *, int, int); | 72 | int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *, int, int); |
| 73 | 73 | ||
| 74 | #if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) | ||
| 75 | int posix_spawn_file_actions_addchdir_np(posix_spawn_file_actions_t *__restrict, const char *__restrict); | ||
| 76 | int posix_spawn_file_actions_addfchdir_np(posix_spawn_file_actions_t *, int); | ||
| 77 | #endif | ||
| 78 | |||
| 74 | #ifdef __cplusplus | 79 | #ifdef __cplusplus |
| 75 | } | 80 | } |
| 76 | #endif | 81 | #endif |
lib/libc/include/generic-musl/stdlib.h+1| ... | @@ -152,6 +152,7 @@ int ptsname_r(int, char *, size_t); | ... | @@ -152,6 +152,7 @@ int ptsname_r(int, char *, size_t); |
| 152 | char *ecvt(double, int, int *, int *); | 152 | char *ecvt(double, int, int *, int *); |
| 153 | char *fcvt(double, int, int *, int *); | 153 | char *fcvt(double, int, int *, int *); |
| 154 | char *gcvt(double, int, char *); | 154 | char *gcvt(double, int, char *); |
| 155 | char *secure_getenv(const char *); | ||
| 155 | struct __locale_struct; | 156 | struct __locale_struct; |
| 156 | float strtof_l(const char *__restrict, char **__restrict, struct __locale_struct *); | 157 | float strtof_l(const char *__restrict, char **__restrict, struct __locale_struct *); |
| 157 | double strtod_l(const char *__restrict, char **__restrict, struct __locale_struct *); | 158 | double strtod_l(const char *__restrict, char **__restrict, struct __locale_struct *); |
lib/libc/include/generic-musl/sys/ipc.h+1-1| ... | @@ -22,6 +22,7 @@ extern "C" { | ... | @@ -22,6 +22,7 @@ extern "C" { |
| 22 | #endif | 22 | #endif |
| 23 | 23 | ||
| 24 | #include <bits/ipc.h> | 24 | #include <bits/ipc.h> |
| 25 | #include <bits/ipcstat.h> | ||
| 25 | 26 | ||
| 26 | #define IPC_CREAT 01000 | 27 | #define IPC_CREAT 01000 |
| 27 | #define IPC_EXCL 02000 | 28 | #define IPC_EXCL 02000 |
| ... | @@ -29,7 +30,6 @@ extern "C" { | ... | @@ -29,7 +30,6 @@ extern "C" { |
| 29 | 30 | ||
| 30 | #define IPC_RMID 0 | 31 | #define IPC_RMID 0 |
| 31 | #define IPC_SET 1 | 32 | #define IPC_SET 1 |
| 32 | #define IPC_STAT 2 | ||
| 33 | #define IPC_INFO 3 | 33 | #define IPC_INFO 3 |
| 34 | 34 | ||
| 35 | #define IPC_PRIVATE ((key_t) 0) | 35 | #define IPC_PRIVATE ((key_t) 0) |
lib/libc/include/generic-musl/sys/msg.h+2-2| ... | @@ -25,9 +25,9 @@ typedef unsigned long msglen_t; | ... | @@ -25,9 +25,9 @@ typedef unsigned long msglen_t; |
| 25 | #define MSG_NOERROR 010000 | 25 | #define MSG_NOERROR 010000 |
| 26 | #define MSG_EXCEPT 020000 | 26 | #define MSG_EXCEPT 020000 |
| 27 | 27 | ||
| 28 | #define MSG_STAT 11 | 28 | #define MSG_STAT (11 | (IPC_STAT & 0x100)) |
| 29 | #define MSG_INFO 12 | 29 | #define MSG_INFO 12 |
| 30 | #define MSG_STAT_ANY 13 | 30 | #define MSG_STAT_ANY (13 | (IPC_STAT & 0x100)) |
| 31 | 31 | ||
| 32 | struct msginfo { | 32 | struct msginfo { |
| 33 | 	int msgpool, msgmap, msgmax, msgmnb, msgmni, msgssz, msgtql; | 33 | 	int msgpool, msgmap, msgmax, msgmnb, msgmni, msgssz, msgtql; |
lib/libc/include/generic-musl/sys/sem.h+2-2| ... | @@ -31,9 +31,9 @@ extern "C" { | ... | @@ -31,9 +31,9 @@ extern "C" { |
| 31 | 31 | ||
| 32 | #define _SEM_SEMUN_UNDEFINED 1 | 32 | #define _SEM_SEMUN_UNDEFINED 1 |
| 33 | 33 | ||
| 34 | #define SEM_STAT 18 | 34 | #define SEM_STAT (18 | (IPC_STAT & 0x100)) |
| 35 | #define SEM_INFO 19 | 35 | #define SEM_INFO 19 |
| 36 | #define SEM_STAT_ANY 20 | 36 | #define SEM_STAT_ANY (20 | (IPC_STAT & 0x100)) |
| 37 | 37 | ||
| 38 | struct seminfo { | 38 | struct seminfo { |
| 39 | 	int semmap; | 39 | 	int semmap; |
lib/libc/include/generic-musl/sys/shm.h+2-2| ... | @@ -33,9 +33,9 @@ extern "C" { | ... | @@ -33,9 +33,9 @@ extern "C" { |
| 33 | 33 | ||
| 34 | #define SHM_LOCK 11 | 34 | #define SHM_LOCK 11 |
| 35 | #define SHM_UNLOCK 12 | 35 | #define SHM_UNLOCK 12 |
| 36 | #define SHM_STAT 13 | 36 | #define SHM_STAT (13 | (IPC_STAT & 0x100)) |
| 37 | #define SHM_INFO 14 | 37 | #define SHM_INFO 14 |
| 38 | #define SHM_STAT_ANY 15 | 38 | #define SHM_STAT_ANY (15 | (IPC_STAT & 0x100)) |
| 39 | #define SHM_DEST 01000 | 39 | #define SHM_DEST 01000 |
| 40 | #define SHM_LOCKED 02000 | 40 | #define SHM_LOCKED 02000 |
| 41 | #define SHM_HUGETLB 04000 | 41 | #define SHM_HUGETLB 04000 |
lib/libc/include/generic-musl/unistd.h+2| ... | @@ -176,6 +176,7 @@ long syscall(long, ...); | ... | @@ -176,6 +176,7 @@ long syscall(long, ...); |
| 176 | int execvpe(const char *, char *const [], char *const []); | 176 | int execvpe(const char *, char *const [], char *const []); |
| 177 | int issetugid(void); | 177 | int issetugid(void); |
| 178 | int getentropy(void *, size_t); | 178 | int getentropy(void *, size_t); |
| 179 | extern int optreset; | ||
| 179 | #endif | 180 | #endif |
| 180 | 181 | ||
| 181 | #ifdef _GNU_SOURCE | 182 | #ifdef _GNU_SOURCE |
| ... | @@ -188,6 +189,7 @@ char *get_current_dir_name(void); | ... | @@ -188,6 +189,7 @@ char *get_current_dir_name(void); |
| 188 | int syncfs(int); | 189 | int syncfs(int); |
| 189 | int euidaccess(const char *, int); | 190 | int euidaccess(const char *, int); |
| 190 | int eaccess(const char *, int); | 191 | int eaccess(const char *, int); |
| 192 | ssize_t copy_file_range(int, off_t *, int, off_t *, size_t, unsigned); | ||
| 191 | #endif | 193 | #endif |
| 192 | 194 | ||
| 193 | #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) | 195 | #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) |
lib/libc/include/i386-linux-musl/bits/posix.h created+2| ... | @@ -0,0 +1,2 @@ | ||
| 1 | #define _POSIX_V6_ILP32_OFFBIG 1 | ||
| 2 | #define _POSIX_V7_ILP32_OFFBIG 1 | ||
| \ No newline at end of file | |||
lib/libc/include/i386-linux-musl/bits/sem.h created+11| ... | @@ -0,0 +1,11 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	long __unused1; | ||
| 5 | 	time_t sem_ctime; | ||
| 6 | 	long __unused2; | ||
| 7 | 	unsigned short sem_nsems; | ||
| 8 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; | ||
| 9 | 	long __unused3; | ||
| 10 | 	long __unused4; | ||
| 11 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/i386-linux-musl/bits/stat.h created+21| ... | @@ -0,0 +1,21 @@ | ||
| 1 | /* copied from kernel definition, but with padding replaced | ||
| 2 | * by the corresponding correctly-sized userspace types. */ | ||
| 3 | |||
| 4 | struct stat { | ||
| 5 | 	dev_t st_dev; | ||
| 6 | 	int __st_dev_padding; | ||
| 7 | 	long __st_ino_truncated; | ||
| 8 | 	mode_t st_mode; | ||
| 9 | 	nlink_t st_nlink; | ||
| 10 | 	uid_t st_uid; | ||
| 11 | 	gid_t st_gid; | ||
| 12 | 	dev_t st_rdev; | ||
| 13 | 	int __st_rdev_padding; | ||
| 14 | 	off_t st_size; | ||
| 15 | 	blksize_t st_blksize; | ||
| 16 | 	blkcnt_t st_blocks; | ||
| 17 | 	struct timespec st_atim; | ||
| 18 | 	struct timespec st_mtim; | ||
| 19 | 	struct timespec st_ctim; | ||
| 20 | 	ino_t st_ino; | ||
| 21 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/i386-linux-musl/bits/syscall.h+13-1| ... | @@ -418,6 +418,12 @@ | ... | @@ -418,6 +418,12 @@ |
| 418 | #define __NR_io_uring_setup	425 | 418 | #define __NR_io_uring_setup	425 |
| 419 | #define __NR_io_uring_enter	426 | 419 | #define __NR_io_uring_enter	426 |
| 420 | #define __NR_io_uring_register	427 | 420 | #define __NR_io_uring_register	427 |
| 421 | #define __NR_open_tree		428 | ||
| 422 | #define __NR_move_mount		429 | ||
| 423 | #define __NR_fsopen		430 | ||
| 424 | #define __NR_fsconfig		431 | ||
| 425 | #define __NR_fsmount		432 | ||
| 426 | #define __NR_fspick		433 | ||
| 421 | 427 | ||
| 422 | #define SYS_restart_syscall 0 | 428 | #define SYS_restart_syscall 0 |
| 423 | #define SYS_exit		 1 | 429 | #define SYS_exit		 1 |
| ... | @@ -836,4 +842,10 @@ | ... | @@ -836,4 +842,10 @@ |
| 836 | #define SYS_pidfd_send_signal	424 | 842 | #define SYS_pidfd_send_signal	424 |
| 837 | #define SYS_io_uring_setup	425 | 843 | #define SYS_io_uring_setup	425 |
| 838 | #define SYS_io_uring_enter	426 | 844 | #define SYS_io_uring_enter	426 |
| 839 | #define SYS_io_uring_register	427 | ||
| \ No newline at end of file | |||
| 845 | #define SYS_io_uring_register	427 | ||
| 846 | #define SYS_open_tree		428 | ||
| 847 | #define SYS_move_mount		429 | ||
| 848 | #define SYS_fsopen		430 | ||
| 849 | #define SYS_fsconfig		431 | ||
| 850 | #define SYS_fsmount		432 | ||
| 851 | #define SYS_fspick		433 | ||
| \ No newline at end of file | |||
lib/libc/include/mips-linux-musl/bits/limits.h created+7| ... | @@ -0,0 +1,7 @@ | ||
| 1 | #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ | ||
| 2 | || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
| 3 | #define LONG_BIT 32 | ||
| 4 | #endif | ||
| 5 | |||
| 6 | #define LONG_MAX 0x7fffffffL | ||
| 7 | #define LLONG_MAX 0x7fffffffffffffffLL | ||
| \ No newline at end of file | |||
lib/libc/include/mips-linux-musl/bits/posix.h created+2| ... | @@ -0,0 +1,2 @@ | ||
| 1 | #define _POSIX_V6_ILP32_OFFBIG 1 | ||
| 2 | #define _POSIX_V7_ILP32_OFFBIG 1 | ||
| \ No newline at end of file | |||
lib/libc/include/mips-linux-musl/bits/sem.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN | ||
| 6 | 	unsigned short sem_nsems; | ||
| 7 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 8 | #else | ||
| 9 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 10 | 	unsigned short sem_nsems; | ||
| 11 | #endif | ||
| 12 | 	time_t __unused3; | ||
| 13 | 	time_t __unused4; | ||
| 14 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/mips-linux-musl/bits/syscall.h+13-1| ... | @@ -400,6 +400,12 @@ | ... | @@ -400,6 +400,12 @@ |
| 400 | #define __NR_io_uring_setup 4425 | 400 | #define __NR_io_uring_setup 4425 |
| 401 | #define __NR_io_uring_enter 4426 | 401 | #define __NR_io_uring_enter 4426 |
| 402 | #define __NR_io_uring_register 4427 | 402 | #define __NR_io_uring_register 4427 |
| 403 | #define __NR_open_tree		4428 | ||
| 404 | #define __NR_move_mount		4429 | ||
| 405 | #define __NR_fsopen		4430 | ||
| 406 | #define __NR_fsconfig		4431 | ||
| 407 | #define __NR_fsmount		4432 | ||
| 408 | #define __NR_fspick		4433 | ||
| 403 | 409 | ||
| 404 | #define SYS_syscall 4000 | 410 | #define SYS_syscall 4000 |
| 405 | #define SYS_exit 4001 | 411 | #define SYS_exit 4001 |
| ... | @@ -802,4 +808,10 @@ | ... | @@ -802,4 +808,10 @@ |
| 802 | #define SYS_pidfd_send_signal 4424 | 808 | #define SYS_pidfd_send_signal 4424 |
| 803 | #define SYS_io_uring_setup 4425 | 809 | #define SYS_io_uring_setup 4425 |
| 804 | #define SYS_io_uring_enter 4426 | 810 | #define SYS_io_uring_enter 4426 |
| 805 | #define SYS_io_uring_register 4427 | ||
| \ No newline at end of file | |||
| 811 | #define SYS_io_uring_register 4427 | ||
| 812 | #define SYS_open_tree		4428 | ||
| 813 | #define SYS_move_mount		4429 | ||
| 814 | #define SYS_fsopen		4430 | ||
| 815 | #define SYS_fsconfig		4431 | ||
| 816 | #define SYS_fsmount		4432 | ||
| 817 | #define SYS_fspick		4433 | ||
| \ No newline at end of file | |||
lib/libc/include/mips64-linux-musl/bits/ipc.h+1-3| ... | @@ -9,6 +9,4 @@ struct ipc_perm { | ... | @@ -9,6 +9,4 @@ struct ipc_perm { |
| 9 | 	int __pad1; | 9 | 	int __pad1; |
| 10 | 	unsigned long __unused1; | 10 | 	unsigned long __unused1; |
| 11 | 	unsigned long __unused2; | 11 | 	unsigned long __unused2; |
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0x100 | ||
| \ No newline at end of file | |||
| 12 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/mips64-linux-musl/bits/sem.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN | ||
| 6 | 	unsigned short sem_nsems; | ||
| 7 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 8 | #else | ||
| 9 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 10 | 	unsigned short sem_nsems; | ||
| 11 | #endif | ||
| 12 | 	time_t __unused3; | ||
| 13 | 	time_t __unused4; | ||
| 14 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/mips64-linux-musl/bits/stat.h-3| ... | @@ -1,6 +1,3 @@ | ... | @@ -1,6 +1,3 @@ |
| 1 | #include <string.h> | ||
| 2 | #include <bits/alltypes.h> | ||
| 3 | |||
| 4 | struct stat { | 1 | struct stat { |
| 5 | 	dev_t st_dev; | 2 | 	dev_t st_dev; |
| 6 | 	int __pad1[3]; | 3 | 	int __pad1[3]; |
lib/libc/include/mips64-linux-musl/bits/syscall.h+13-1| ... | @@ -330,6 +330,12 @@ | ... | @@ -330,6 +330,12 @@ |
| 330 | #define __NR_io_uring_setup		5425 | 330 | #define __NR_io_uring_setup		5425 |
| 331 | #define __NR_io_uring_enter		5426 | 331 | #define __NR_io_uring_enter		5426 |
| 332 | #define __NR_io_uring_register		5427 | 332 | #define __NR_io_uring_register		5427 |
| 333 | #define __NR_open_tree		5428 | ||
| 334 | #define __NR_move_mount		5429 | ||
| 335 | #define __NR_fsopen		5430 | ||
| 336 | #define __NR_fsconfig		5431 | ||
| 337 | #define __NR_fsmount		5432 | ||
| 338 | #define __NR_fspick		5433 | ||
| 333 | 339 | ||
| 334 | #define SYS_read			5000 | 340 | #define SYS_read			5000 |
| 335 | #define SYS_write			5001 | 341 | #define SYS_write			5001 |
| ... | @@ -662,4 +668,10 @@ | ... | @@ -662,4 +668,10 @@ |
| 662 | #define SYS_pidfd_send_signal		5424 | 668 | #define SYS_pidfd_send_signal		5424 |
| 663 | #define SYS_io_uring_setup		5425 | 669 | #define SYS_io_uring_setup		5425 |
| 664 | #define SYS_io_uring_enter		5426 | 670 | #define SYS_io_uring_enter		5426 |
| 665 | #define SYS_io_uring_register		5427 | ||
| \ No newline at end of file | |||
| 671 | #define SYS_io_uring_register		5427 | ||
| 672 | #define SYS_open_tree		5428 | ||
| 673 | #define SYS_move_mount		5429 | ||
| 674 | #define SYS_fsopen		5430 | ||
| 675 | #define SYS_fsconfig		5431 | ||
| 676 | #define SYS_fsmount		5432 | ||
| 677 | #define SYS_fspick		5433 | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc-linux-musl/bits/alltypes.h+8| ... | @@ -14,11 +14,19 @@ typedef __builtin_va_list __isoc_va_list; | ... | @@ -14,11 +14,19 @@ typedef __builtin_va_list __isoc_va_list; |
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | #ifndef __cplusplus | 16 | #ifndef __cplusplus |
| 17 | #ifdef __WCHAR_TYPE__ | ||
| 18 | #if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) | ||
| 19 | typedef __WCHAR_TYPE__ wchar_t; | ||
| 20 | #define __DEFINED_wchar_t | ||
| 21 | #endif | ||
| 22 | |||
| 23 | #else | ||
| 17 | #if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) | 24 | #if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) |
| 18 | typedef long wchar_t; | 25 | typedef long wchar_t; |
| 19 | #define __DEFINED_wchar_t | 26 | #define __DEFINED_wchar_t |
| 20 | #endif | 27 | #endif |
| 21 | 28 | ||
| 29 | #endif | ||
| 22 | #endif | 30 | #endif |
| 23 | 31 | ||
| 24 | #if defined(__NEED_float_t) && !defined(__DEFINED_float_t) | 32 | #if defined(__NEED_float_t) && !defined(__DEFINED_float_t) |
lib/libc/include/powerpc-linux-musl/bits/ipc.h+1-3| ... | @@ -9,6 +9,4 @@ struct ipc_perm { | ... | @@ -9,6 +9,4 @@ struct ipc_perm { |
| 9 | 	int __pad1; | 9 | 	int __pad1; |
| 10 | 	long long __pad2; | 10 | 	long long __pad2; |
| 11 | 	long long __pad3; | 11 | 	long long __pad3; |
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0x100 | ||
| \ No newline at end of file | |||
| 12 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc-linux-musl/bits/limits.h created+7| ... | @@ -0,0 +1,7 @@ | ||
| 1 | #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ | ||
| 2 | || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
| 3 | #define LONG_BIT 32 | ||
| 4 | #endif | ||
| 5 | |||
| 6 | #define LONG_MAX 0x7fffffffL | ||
| 7 | #define LLONG_MAX 0x7fffffffffffffffLL | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc-linux-musl/bits/posix.h created+2| ... | @@ -0,0 +1,2 @@ | ||
| 1 | #define _POSIX_V6_ILP32_OFFBIG 1 | ||
| 2 | #define _POSIX_V7_ILP32_OFFBIG 1 | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc-linux-musl/bits/reg.h created+3| ... | @@ -0,0 +1,3 @@ | ||
| 1 | #undef __WORDSIZE | ||
| 2 | #define __WORDSIZE 32 | ||
| 3 | /* FIXME */ | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc-linux-musl/bits/syscall.h+13-1| ... | @@ -407,6 +407,12 @@ | ... | @@ -407,6 +407,12 @@ |
| 407 | #define __NR_io_uring_setup 425 | 407 | #define __NR_io_uring_setup 425 |
| 408 | #define __NR_io_uring_enter 426 | 408 | #define __NR_io_uring_enter 426 |
| 409 | #define __NR_io_uring_register 427 | 409 | #define __NR_io_uring_register 427 |
| 410 | #define __NR_open_tree		428 | ||
| 411 | #define __NR_move_mount		429 | ||
| 412 | #define __NR_fsopen		430 | ||
| 413 | #define __NR_fsconfig		431 | ||
| 414 | #define __NR_fsmount		432 | ||
| 415 | #define __NR_fspick		433 | ||
| 410 | 416 | ||
| 411 | #define SYS_restart_syscall 0 | 417 | #define SYS_restart_syscall 0 |
| 412 | #define SYS_exit 1 | 418 | #define SYS_exit 1 |
| ... | @@ -816,4 +822,10 @@ | ... | @@ -816,4 +822,10 @@ |
| 816 | #define SYS_pidfd_send_signal 424 | 822 | #define SYS_pidfd_send_signal 424 |
| 817 | #define SYS_io_uring_setup 425 | 823 | #define SYS_io_uring_setup 425 |
| 818 | #define SYS_io_uring_enter 426 | 824 | #define SYS_io_uring_enter 426 |
| 819 | #define SYS_io_uring_register 427 | ||
| \ No newline at end of file | |||
| 825 | #define SYS_io_uring_register 427 | ||
| 826 | #define SYS_open_tree		428 | ||
| 827 | #define SYS_move_mount		429 | ||
| 828 | #define SYS_fsopen		430 | ||
| 829 | #define SYS_fsconfig		431 | ||
| 830 | #define SYS_fsmount		432 | ||
| 831 | #define SYS_fspick		433 | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc-linux-musl/bits/user.h+4-6| ... | @@ -1,10 +1,8 @@ | ... | @@ -1,10 +1,8 @@ |
| 1 | struct pt_regs { | ||
| 2 | 	unsigned long gpr[32], nip, msr, orig_gpr3, ctr, link, xer, ccr, mq; | ||
| 3 | 	unsigned long trap, dar, dsisr, result; | ||
| 4 | }; | ||
| 5 | |||
| 6 | struct user { | 1 | struct user { |
| 7 | 	struct pt_regs regs; | 2 | 	struct { |
| 3 | 		unsigned long gpr[32], nip, msr, orig_gpr3, ctr, link, xer, ccr, mq; | ||
| 4 | 		unsigned long trap, dar, dsisr, result; | ||
| 5 | 	} regs; | ||
| 8 | 	unsigned long u_tsize, u_dsize, u_ssize; | 6 | 	unsigned long u_tsize, u_dsize, u_ssize; |
| 9 | 	unsigned long start_code, start_data, start_stack; | 7 | 	unsigned long start_code, start_data, start_stack; |
| 10 | 	long signal; | 8 | 	long signal; |
lib/libc/include/powerpc64-linux-musl/bits/ipc.h+1-3| ... | @@ -9,6 +9,4 @@ struct ipc_perm { | ... | @@ -9,6 +9,4 @@ struct ipc_perm { |
| 9 | 	int __pad1; | 9 | 	int __pad1; |
| 10 | 	long long __pad2; | 10 | 	long long __pad2; |
| 11 | 	long long __pad3; | 11 | 	long long __pad3; |
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0x100 | ||
| \ No newline at end of file | |||
| 12 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc64-linux-musl/bits/limits.h deleted-7| ... | @@ -1,7 +0,0 @@ | ||
| 1 | #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ | ||
| 2 | || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
| 3 | #define LONG_BIT 64 | ||
| 4 | #endif | ||
| 5 | |||
| 6 | #define LONG_MAX 0x7fffffffffffffffL | ||
| 7 | #define LLONG_MAX 0x7fffffffffffffffLL | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc64-linux-musl/bits/msg.h deleted-12| ... | @@ -1,12 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __unused[2]; | ||
| 12 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc64-linux-musl/bits/posix.h deleted-2| ... | @@ -1,2 +0,0 @@ | ||
| 1 | #define _POSIX_V6_LP64_OFF64 1 | ||
| 2 | #define _POSIX_V7_LP64_OFF64 1 | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc64-linux-musl/bits/sem.h deleted-13| ... | @@ -1,13 +0,0 @@ | ||
| 1 | #include <endian.h> | ||
| 2 | |||
| 3 | struct semid_ds { | ||
| 4 | 	struct ipc_perm sem_perm; | ||
| 5 | 	time_t sem_otime; | ||
| 6 | 	time_t sem_ctime; | ||
| 7 | #if __BYTE_ORDER == __BIG_ENDIAN | ||
| 8 | 	unsigned short __pad[3], sem_nsems; | ||
| 9 | #else | ||
| 10 | 	unsigned short sem_nsems, __pad[3]; | ||
| 11 | #endif | ||
| 12 | 	unsigned long __unused[2]; | ||
| 13 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc64-linux-musl/bits/syscall.h+13-1| ... | @@ -379,6 +379,12 @@ | ... | @@ -379,6 +379,12 @@ |
| 379 | #define __NR_io_uring_setup 425 | 379 | #define __NR_io_uring_setup 425 |
| 380 | #define __NR_io_uring_enter 426 | 380 | #define __NR_io_uring_enter 426 |
| 381 | #define __NR_io_uring_register 427 | 381 | #define __NR_io_uring_register 427 |
| 382 | #define __NR_open_tree		428 | ||
| 383 | #define __NR_move_mount		429 | ||
| 384 | #define __NR_fsopen		430 | ||
| 385 | #define __NR_fsconfig		431 | ||
| 386 | #define __NR_fsmount		432 | ||
| 387 | #define __NR_fspick		433 | ||
| 382 | 388 | ||
| 383 | #define SYS_restart_syscall 0 | 389 | #define SYS_restart_syscall 0 |
| 384 | #define SYS_exit 1 | 390 | #define SYS_exit 1 |
| ... | @@ -760,4 +766,10 @@ | ... | @@ -760,4 +766,10 @@ |
| 760 | #define SYS_pidfd_send_signal 424 | 766 | #define SYS_pidfd_send_signal 424 |
| 761 | #define SYS_io_uring_setup 425 | 767 | #define SYS_io_uring_setup 425 |
| 762 | #define SYS_io_uring_enter 426 | 768 | #define SYS_io_uring_enter 426 |
| 763 | #define SYS_io_uring_register 427 | ||
| \ No newline at end of file | |||
| 769 | #define SYS_io_uring_register 427 | ||
| 770 | #define SYS_open_tree		428 | ||
| 771 | #define SYS_move_mount		429 | ||
| 772 | #define SYS_fsopen		430 | ||
| 773 | #define SYS_fsconfig		431 | ||
| 774 | #define SYS_fsmount		432 | ||
| 775 | #define SYS_fspick		433 | ||
| \ No newline at end of file | |||
lib/libc/include/powerpc64-linux-musl/bits/user.h+4-6| ... | @@ -1,10 +1,8 @@ | ... | @@ -1,10 +1,8 @@ |
| 1 | struct pt_regs { | ||
| 2 | 	unsigned long gpr[32], nip, msr, orig_gpr3, ctr, link, xer, ccr, softe; | ||
| 3 | 	unsigned long trap, dar, dsisr, result; | ||
| 4 | }; | ||
| 5 | |||
| 6 | struct user { | 1 | struct user { |
| 7 | 	struct pt_regs regs; | 2 | 	struct { |
| 3 | 		unsigned long gpr[32], nip, msr, orig_gpr3, ctr, link, xer, ccr, softe; | ||
| 4 | 		unsigned long trap, dar, dsisr, result; | ||
| 5 | 	} regs; | ||
| 8 | 	unsigned long u_tsize, u_dsize, u_ssize; | 6 | 	unsigned long u_tsize, u_dsize, u_ssize; |
| 9 | 	unsigned long start_code, start_data, start_stack; | 7 | 	unsigned long start_code, start_data, start_stack; |
| 10 | 	long signal; | 8 | 	long signal; |
lib/libc/include/riscv64-linux-musl/bits/ipc.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct ipc_perm { | ||
| 2 | 	key_t __ipc_perm_key; | ||
| 3 | 	uid_t uid; | ||
| 4 | 	gid_t gid; | ||
| 5 | 	uid_t cuid; | ||
| 6 | 	gid_t cgid; | ||
| 7 | 	mode_t mode; | ||
| 8 | 	unsigned short __ipc_perm_seq; | ||
| 9 | |||
| 10 | 	unsigned long __pad1; | ||
| 11 | 	unsigned long __pad2; | ||
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0 | ||
| \ No newline at end of file | |||
lib/libc/include/riscv64-linux-musl/bits/limits.h deleted-7| ... | @@ -1,7 +0,0 @@ | ||
| 1 | #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ | ||
| 2 | || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | ||
| 3 | #define LONG_BIT 64 | ||
| 4 | #endif | ||
| 5 | |||
| 6 | #define LONG_MAX 0x7fffffffffffffffL | ||
| 7 | #define LLONG_MAX 0x7fffffffffffffffLL | ||
| \ No newline at end of file | |||
lib/libc/include/riscv64-linux-musl/bits/sem.h deleted-9| ... | @@ -1,9 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | 	unsigned short sem_nsems; | ||
| 6 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 7 | 	time_t __unused3; | ||
| 8 | 	time_t __unused4; | ||
| 9 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/riscv64-linux-musl/bits/shm.h deleted-25| ... | @@ -1,25 +0,0 @@ | ||
| 1 | #define SHMLBA 4096 | ||
| 2 | |||
| 3 | struct shmid_ds | ||
| 4 | { | ||
| 5 | 	struct ipc_perm shm_perm; | ||
| 6 | 	size_t shm_segsz; | ||
| 7 | 	time_t shm_atime; | ||
| 8 | 	time_t shm_dtime; | ||
| 9 | 	time_t shm_ctime; | ||
| 10 | 	pid_t shm_cpid; | ||
| 11 | 	pid_t shm_lpid; | ||
| 12 | 	unsigned long shm_nattch; | ||
| 13 | 	unsigned long __pad1; | ||
| 14 | 	unsigned long __pad2; | ||
| 15 | }; | ||
| 16 | |||
| 17 | struct shminfo { | ||
| 18 | 	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; | ||
| 19 | }; | ||
| 20 | |||
| 21 | struct shm_info { | ||
| 22 | 	int __used_ids; | ||
| 23 | 	unsigned long shm_tot, shm_rss, shm_swp; | ||
| 24 | 	unsigned long __swap_attempts, __swap_successes; | ||
| 25 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/riscv64-linux-musl/bits/signal.h+27-30| ... | @@ -6,46 +6,43 @@ | ... | @@ -6,46 +6,43 @@ |
| 6 | # define SIGSTKSZ 8192 | 6 | # define SIGSTKSZ 8192 |
| 7 | #endif | 7 | #endif |
| 8 | 8 | ||
| 9 | /* gregs[0] holds the program counter. */ | 9 | typedef unsigned long __riscv_mc_gp_state[32]; |
| 10 | 10 | ||
| 11 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | 11 | struct __riscv_mc_f_ext_state { |
| 12 | typedef unsigned long greg_t; | 12 | 	unsigned int __f[32]; |
| 13 | typedef unsigned long gregset_t[32]; | 13 | 	unsigned int __fcsr; |
| 14 | |||
| 15 | struct __riscv_f_ext_state { | ||
| 16 | 	unsigned int f[32]; | ||
| 17 | 	unsigned int fcsr; | ||
| 18 | }; | 14 | }; |
| 19 | 15 | ||
| 20 | struct __riscv_d_ext_state { | 16 | struct __riscv_mc_d_ext_state { |
| 21 | 	unsigned long long f[32]; | 17 | 	unsigned long long __f[32]; |
| 22 | 	unsigned int fcsr; | 18 | 	unsigned int __fcsr; |
| 23 | }; | 19 | }; |
| 24 | 20 | ||
| 25 | struct __riscv_q_ext_state { | 21 | struct __riscv_mc_q_ext_state { |
| 26 | 	unsigned long long f[64] __attribute__((aligned(16))); | 22 | 	unsigned long long __f[64] __attribute__((aligned(16))); |
| 27 | 	unsigned int fcsr; | 23 | 	unsigned int __fcsr; |
| 28 | 	unsigned int reserved[3]; | 24 | 	unsigned int __reserved[3]; |
| 29 | }; | 25 | }; |
| 30 | 26 | ||
| 31 | union __riscv_fp_state { | 27 | union __riscv_mc_fp_state { |
| 32 | 	struct __riscv_f_ext_state f; | 28 | 	struct __riscv_mc_f_ext_state __f; |
| 33 | 	struct __riscv_d_ext_state d; | 29 | 	struct __riscv_mc_d_ext_state __d; |
| 34 | 	struct __riscv_q_ext_state q; | 30 | 	struct __riscv_mc_q_ext_state __q; |
| 35 | }; | 31 | }; |
| 36 | 32 | ||
| 37 | typedef union __riscv_fp_state fpregset_t; | 33 | typedef struct mcontext_t { |
| 34 | 	__riscv_mc_gp_state __gregs; | ||
| 35 | 	union __riscv_mc_fp_state __fpregs; | ||
| 36 | } mcontext_t; | ||
| 38 | 37 | ||
| 39 | typedef struct sigcontext { | 38 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
| 39 | typedef unsigned long greg_t; | ||
| 40 | typedef unsigned long gregset_t[32]; | ||
| 41 | typedef union __riscv_mc_fp_state fpregset_t; | ||
| 42 | struct sigcontext { | ||
| 40 | 	gregset_t gregs; | 43 | 	gregset_t gregs; |
| 41 | 	fpregset_t fpregs; | 44 | 	fpregset_t fpregs; |
| 42 | } mcontext_t; | 45 | }; |
| 43 | |||
| 44 | #else | ||
| 45 | typedef struct { | ||
| 46 | 	unsigned long gregs[32]; | ||
| 47 | 	unsigned long long fpregs[66]; | ||
| 48 | } mcontext_t; | ||
| 49 | #endif | 46 | #endif |
| 50 | 47 | ||
| 51 | struct sigaltstack { | 48 | struct sigaltstack { |
| ... | @@ -54,10 +51,10 @@ struct sigaltstack { | ... | @@ -54,10 +51,10 @@ struct sigaltstack { |
| 54 | 	size_t ss_size; | 51 | 	size_t ss_size; |
| 55 | }; | 52 | }; |
| 56 | 53 | ||
| 57 | typedef struct __ucontext | 54 | typedef struct ucontext_t |
| 58 | { | 55 | { |
| 59 | 	unsigned long uc_flags; | 56 | 	unsigned long uc_flags; |
| 60 | 	struct __ucontext *uc_link; | 57 | 	struct ucontext_t *uc_link; |
| 61 | 	stack_t uc_stack; | 58 | 	stack_t uc_stack; |
| 62 | 	sigset_t uc_sigmask; | 59 | 	sigset_t uc_sigmask; |
| 63 | 	mcontext_t uc_mcontext; | 60 | 	mcontext_t uc_mcontext; |
lib/libc/include/riscv64-linux-musl/bits/stat.h deleted-18| ... | @@ -1,18 +0,0 @@ | ||
| 1 | struct stat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	ino_t st_ino; | ||
| 4 | 	mode_t st_mode; | ||
| 5 | 	nlink_t st_nlink; | ||
| 6 | 	uid_t st_uid; | ||
| 7 | 	gid_t st_gid; | ||
| 8 | 	dev_t st_rdev; | ||
| 9 | 	unsigned long __pad; | ||
| 10 | 	off_t st_size; | ||
| 11 | 	blksize_t st_blksize; | ||
| 12 | 	int __pad2; | ||
| 13 | 	blkcnt_t st_blocks; | ||
| 14 | 	struct timespec st_atim; | ||
| 15 | 	struct timespec st_mtim; | ||
| 16 | 	struct timespec st_ctim; | ||
| 17 | 	unsigned __unused[2]; | ||
| 18 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/riscv64-linux-musl/bits/syscall.h+29| ... | @@ -273,6 +273,21 @@ | ... | @@ -273,6 +273,21 @@ |
| 273 | #define __NR_pkey_mprotect 288 | 273 | #define __NR_pkey_mprotect 288 |
| 274 | #define __NR_pkey_alloc 289 | 274 | #define __NR_pkey_alloc 289 |
| 275 | #define __NR_pkey_free 290 | 275 | #define __NR_pkey_free 290 |
| 276 | #define __NR_statx 291 | ||
| 277 | #define __NR_io_pgetevents 292 | ||
| 278 | #define __NR_rseq 293 | ||
| 279 | #define __NR_kexec_file_load 294 | ||
| 280 | #define __NR_pidfd_send_signal 424 | ||
| 281 | #define __NR_io_uring_setup 425 | ||
| 282 | #define __NR_io_uring_enter 426 | ||
| 283 | #define __NR_io_uring_register 427 | ||
| 284 | #define __NR_open_tree		428 | ||
| 285 | #define __NR_move_mount		429 | ||
| 286 | #define __NR_fsopen		430 | ||
| 287 | #define __NR_fsconfig		431 | ||
| 288 | #define __NR_fsmount		432 | ||
| 289 | #define __NR_fspick		433 | ||
| 290 | |||
| 276 | #define __NR_sysriscv __NR_arch_specific_syscall | 291 | #define __NR_sysriscv __NR_arch_specific_syscall |
| 277 | #define __NR_riscv_flush_icache (__NR_sysriscv + 15) | 292 | #define __NR_riscv_flush_icache (__NR_sysriscv + 15) |
| 278 | #define SYS_io_setup 0 | 293 | #define SYS_io_setup 0 |
| ... | @@ -550,5 +565,19 @@ | ... | @@ -550,5 +565,19 @@ |
| 550 | #define SYS_pkey_mprotect 288 | 565 | #define SYS_pkey_mprotect 288 |
| 551 | #define SYS_pkey_alloc 289 | 566 | #define SYS_pkey_alloc 289 |
| 552 | #define SYS_pkey_free 290 | 567 | #define SYS_pkey_free 290 |
| 568 | #define SYS_statx 291 | ||
| 569 | #define SYS_io_pgetevents 292 | ||
| 570 | #define SYS_rseq 293 | ||
| 571 | #define SYS_kexec_file_load 294 | ||
| 572 | #define SYS_pidfd_send_signal 424 | ||
| 573 | #define SYS_io_uring_setup 425 | ||
| 574 | #define SYS_io_uring_enter 426 | ||
| 575 | #define SYS_io_uring_register 427 | ||
| 576 | #define SYS_open_tree		428 | ||
| 577 | #define SYS_move_mount		429 | ||
| 578 | #define SYS_fsopen		430 | ||
| 579 | #define SYS_fsconfig		431 | ||
| 580 | #define SYS_fsmount		432 | ||
| 581 | #define SYS_fspick		433 | ||
| 553 | #define SYS_sysriscv __NR_arch_specific_syscall | 582 | #define SYS_sysriscv __NR_arch_specific_syscall |
| 554 | #define SYS_riscv_flush_icache (__NR_sysriscv + 15) | 583 | #define SYS_riscv_flush_icache (__NR_sysriscv + 15) |
| \ No newline at end of file | |||
lib/libc/include/riscv64-linux-musl/bits/user.h+2-40| ... | @@ -1,43 +1,5 @@ | ... | @@ -1,43 +1,5 @@ |
| 1 | struct user_regs_struct { | 1 | #include <signal.h> |
| 2 | 	unsigned long pc; | ||
| 3 | 	unsigned long ra; | ||
| 4 | 	unsigned long sp; | ||
| 5 | 	unsigned long gp; | ||
| 6 | 	unsigned long tp; | ||
| 7 | 	unsigned long t0; | ||
| 8 | 	unsigned long t1; | ||
| 9 | 	unsigned long t2; | ||
| 10 | 	unsigned long s0; | ||
| 11 | 	unsigned long s1; | ||
| 12 | 	unsigned long a0; | ||
| 13 | 	unsigned long a1; | ||
| 14 | 	unsigned long a2; | ||
| 15 | 	unsigned long a3; | ||
| 16 | 	unsigned long a4; | ||
| 17 | 	unsigned long a5; | ||
| 18 | 	unsigned long a6; | ||
| 19 | 	unsigned long a7; | ||
| 20 | 	unsigned long s2; | ||
| 21 | 	unsigned long s3; | ||
| 22 | 	unsigned long s4; | ||
| 23 | 	unsigned long s5; | ||
| 24 | 	unsigned long s6; | ||
| 25 | 	unsigned long s7; | ||
| 26 | 	unsigned long s8; | ||
| 27 | 	unsigned long s9; | ||
| 28 | 	unsigned long s10; | ||
| 29 | 	unsigned long s11; | ||
| 30 | 	unsigned long t3; | ||
| 31 | 	unsigned long t4; | ||
| 32 | 	unsigned long t5; | ||
| 33 | 	unsigned long t6; | ||
| 34 | }; | ||
| 35 | |||
| 36 | struct user_fpregs_struct { | ||
| 37 | 	double f[32]; | ||
| 38 | 	unsigned int fcsr; | ||
| 39 | }; | ||
| 40 | 2 | ||
| 41 | #define ELF_NGREG 32 | 3 | #define ELF_NGREG 32 |
| 42 | typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; | 4 | typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; |
| 43 | typedef struct user_fpregs_struct elf_fpregset_t; | ||
| \ No newline at end of file | |||
| 5 | typedef union __riscv_mc_fp_state elf_fpregset_t; | ||
| \ No newline at end of file | |||
lib/libc/include/s390x-linux-musl/bits/ipc.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct ipc_perm { | ||
| 2 | 	key_t __ipc_perm_key; | ||
| 3 | 	uid_t uid; | ||
| 4 | 	gid_t gid; | ||
| 5 | 	uid_t cuid; | ||
| 6 | 	gid_t cgid; | ||
| 7 | 	mode_t mode; | ||
| 8 | 	unsigned short __pad1; | ||
| 9 | 	unsigned short __ipc_perm_seq; | ||
| 10 | 	unsigned long __pad2; | ||
| 11 | 	unsigned long __pad3; | ||
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0x100 | ||
| \ No newline at end of file | |||
lib/libc/include/s390x-linux-musl/bits/msg.h deleted-12| ... | @@ -1,12 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __unused[2]; | ||
| 12 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/s390x-linux-musl/bits/posix.h deleted-2| ... | @@ -1,2 +0,0 @@ | ||
| 1 | #define _POSIX_V6_LP64_OFF64 1 | ||
| 2 | #define _POSIX_V7_LP64_OFF64 1 | ||
| \ No newline at end of file | |||
lib/libc/include/s390x-linux-musl/bits/reg.h deleted-2| ... | @@ -1,2 +0,0 @@ | ||
| 1 | #undef __WORDSIZE | ||
| 2 | #define __WORDSIZE 64 | ||
| \ No newline at end of file | |||
lib/libc/include/s390x-linux-musl/bits/sem.h deleted-7| ... | @@ -1,7 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | 	unsigned short __pad[3], sem_nsems; | ||
| 6 | 	unsigned long __unused[2]; | ||
| 7 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/s390x-linux-musl/bits/syscall.h+13-1| ... | @@ -344,6 +344,12 @@ | ... | @@ -344,6 +344,12 @@ |
| 344 | #define __NR_io_uring_setup 425 | 344 | #define __NR_io_uring_setup 425 |
| 345 | #define __NR_io_uring_enter 426 | 345 | #define __NR_io_uring_enter 426 |
| 346 | #define __NR_io_uring_register 427 | 346 | #define __NR_io_uring_register 427 |
| 347 | #define __NR_open_tree		428 | ||
| 348 | #define __NR_move_mount		429 | ||
| 349 | #define __NR_fsopen		430 | ||
| 350 | #define __NR_fsconfig		431 | ||
| 351 | #define __NR_fsmount		432 | ||
| 352 | #define __NR_fspick		433 | ||
| 347 | 353 | ||
| 348 | #define SYS_exit 1 | 354 | #define SYS_exit 1 |
| 349 | #define SYS_fork 2 | 355 | #define SYS_fork 2 |
| ... | @@ -690,4 +696,10 @@ | ... | @@ -690,4 +696,10 @@ |
| 690 | #define SYS_pidfd_send_signal 424 | 696 | #define SYS_pidfd_send_signal 424 |
| 691 | #define SYS_io_uring_setup 425 | 697 | #define SYS_io_uring_setup 425 |
| 692 | #define SYS_io_uring_enter 426 | 698 | #define SYS_io_uring_enter 426 |
| 693 | #define SYS_io_uring_register 427 | ||
| \ No newline at end of file | |||
| 699 | #define SYS_io_uring_register 427 | ||
| 700 | #define SYS_open_tree		428 | ||
| 701 | #define SYS_move_mount		429 | ||
| 702 | #define SYS_fsopen		430 | ||
| 703 | #define SYS_fsconfig		431 | ||
| 704 | #define SYS_fsmount		432 | ||
| 705 | #define SYS_fspick		433 | ||
| \ No newline at end of file | |||
lib/libc/include/x86_64-linux-musl/bits/ipc.h deleted-13| ... | @@ -1,13 +0,0 @@ | ||
| 1 | struct ipc_perm { | ||
| 2 | 	key_t __ipc_perm_key; | ||
| 3 | 	uid_t uid; | ||
| 4 | 	gid_t gid; | ||
| 5 | 	uid_t cuid; | ||
| 6 | 	gid_t cgid; | ||
| 7 | 	mode_t mode; | ||
| 8 | 	int __ipc_perm_seq; | ||
| 9 | 	long __pad1; | ||
| 10 | 	long __pad2; | ||
| 11 | }; | ||
| 12 | |||
| 13 | #define IPC_64 0 | ||
| \ No newline at end of file | |||
lib/libc/include/x86_64-linux-musl/bits/msg.h deleted-12| ... | @@ -1,12 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __unused[2]; | ||
| 12 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/x86_64-linux-musl/bits/posix.h deleted-2| ... | @@ -1,2 +0,0 @@ | ||
| 1 | #define _POSIX_V6_LP64_OFF64 1 | ||
| 2 | #define _POSIX_V7_LP64_OFF64 1 | ||
| \ No newline at end of file | |||
lib/libc/include/x86_64-linux-musl/bits/sem.h created+11| ... | @@ -0,0 +1,11 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	long __unused1; | ||
| 5 | 	time_t sem_ctime; | ||
| 6 | 	long __unused2; | ||
| 7 | 	unsigned short sem_nsems; | ||
| 8 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; | ||
| 9 | 	long __unused3; | ||
| 10 | 	long __unused4; | ||
| 11 | }; | ||
| \ No newline at end of file | |||
lib/libc/include/x86_64-linux-musl/bits/syscall.h+13-1| ... | @@ -337,6 +337,12 @@ | ... | @@ -337,6 +337,12 @@ |
| 337 | #define __NR_io_uring_setup			425 | 337 | #define __NR_io_uring_setup			425 |
| 338 | #define __NR_io_uring_enter			426 | 338 | #define __NR_io_uring_enter			426 |
| 339 | #define __NR_io_uring_register			427 | 339 | #define __NR_io_uring_register			427 |
| 340 | #define __NR_open_tree		428 | ||
| 341 | #define __NR_move_mount		429 | ||
| 342 | #define __NR_fsopen		430 | ||
| 343 | #define __NR_fsconfig		431 | ||
| 344 | #define __NR_fsmount		432 | ||
| 345 | #define __NR_fspick		433 | ||
| 340 | 346 | ||
| 341 | #define SYS_read				0 | 347 | #define SYS_read				0 |
| 342 | #define SYS_write				1 | 348 | #define SYS_write				1 |
| ... | @@ -676,4 +682,10 @@ | ... | @@ -676,4 +682,10 @@ |
| 676 | #define SYS_pidfd_send_signal			424 | 682 | #define SYS_pidfd_send_signal			424 |
| 677 | #define SYS_io_uring_setup			425 | 683 | #define SYS_io_uring_setup			425 |
| 678 | #define SYS_io_uring_enter			426 | 684 | #define SYS_io_uring_enter			426 |
| 679 | #define SYS_io_uring_register			427 | ||
| \ No newline at end of file | |||
| 685 | #define SYS_io_uring_register			427 | ||
| 686 | #define SYS_open_tree		428 | ||
| 687 | #define SYS_move_mount		429 | ||
| 688 | #define SYS_fsopen		430 | ||
| 689 | #define SYS_fsconfig		431 | ||
| 690 | #define SYS_fsmount		432 | ||
| 691 | #define SYS_fspick		433 | ||
| \ No newline at end of file | |||
lib/libc/musl/arch/aarch64/bits/hwcap.h+8| ... | @@ -30,3 +30,11 @@ | ... | @@ -30,3 +30,11 @@ |
| 30 | #define HWCAP_SB		(1 << 29) | 30 | #define HWCAP_SB		(1 << 29) |
| 31 | #define HWCAP_PACA		(1 << 30) | 31 | #define HWCAP_PACA		(1 << 30) |
| 32 | #define HWCAP_PACG		(1UL << 31) | 32 | #define HWCAP_PACG		(1UL << 31) |
| 33 | |||
| 34 | #define HWCAP2_DCPODP		(1 << 0) | ||
| 35 | #define HWCAP2_SVE2		(1 << 1) | ||
| 36 | #define HWCAP2_SVEAES		(1 << 2) | ||
| 37 | #define HWCAP2_SVEPMULL		(1 << 3) | ||
| 38 | #define HWCAP2_SVEBITPERM	(1 << 4) | ||
| 39 | #define HWCAP2_SVESHA3		(1 << 5) | ||
| 40 | #define HWCAP2_SVESM4		(1 << 6) |
lib/libc/musl/arch/aarch64/bits/ipc.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct ipc_perm { | ||
| 2 | 	key_t __ipc_perm_key; | ||
| 3 | 	uid_t uid; | ||
| 4 | 	gid_t gid; | ||
| 5 | 	uid_t cuid; | ||
| 6 | 	gid_t cgid; | ||
| 7 | 	mode_t mode; | ||
| 8 | 	unsigned short __ipc_perm_seq; | ||
| 9 | |||
| 10 | 	unsigned long __pad1; | ||
| 11 | 	unsigned long __pad2; | ||
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0 | ||
lib/libc/musl/arch/aarch64/bits/msg.h deleted-13| ... | @@ -1,13 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __pad1; | ||
| 12 | 	unsigned long __pad2; | ||
| 13 | }; | ||
lib/libc/musl/arch/aarch64/bits/sem.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN | ||
| 6 | 	unsigned short sem_nsems; | ||
| 7 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 8 | #else | ||
| 9 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 10 | 	unsigned short sem_nsems; | ||
| 11 | #endif | ||
| 12 | 	time_t __unused3; | ||
| 13 | 	time_t __unused4; | ||
| 14 | }; | ||
lib/libc/musl/arch/aarch64/bits/shm.h deleted-24| ... | @@ -1,24 +0,0 @@ | ||
| 1 | #define SHMLBA 4096 | ||
| 2 | |||
| 3 | struct shmid_ds { | ||
| 4 | 	struct ipc_perm shm_perm; | ||
| 5 | 	size_t shm_segsz; | ||
| 6 | 	time_t shm_atime; | ||
| 7 | 	time_t shm_dtime; | ||
| 8 | 	time_t shm_ctime; | ||
| 9 | 	pid_t shm_cpid; | ||
| 10 | 	pid_t shm_lpid; | ||
| 11 | 	unsigned long shm_nattch; | ||
| 12 | 	unsigned long __pad1; | ||
| 13 | 	unsigned long __pad2; | ||
| 14 | }; | ||
| 15 | |||
| 16 | struct shminfo { | ||
| 17 | 	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; | ||
| 18 | }; | ||
| 19 | |||
| 20 | struct shm_info { | ||
| 21 | 	int __used_ids; | ||
| 22 | 	unsigned long shm_tot, shm_rss, shm_swp; | ||
| 23 | 	unsigned long __swap_attempts, __swap_successes; | ||
| 24 | }; | ||
lib/libc/musl/arch/aarch64/bits/syscall.h.in+6| ... | @@ -281,4 +281,10 @@ | ... | @@ -281,4 +281,10 @@ |
| 281 | #define __NR_io_uring_setup 425 | 281 | #define __NR_io_uring_setup 425 |
| 282 | #define __NR_io_uring_enter 426 | 282 | #define __NR_io_uring_enter 426 |
| 283 | #define __NR_io_uring_register 427 | 283 | #define __NR_io_uring_register 427 |
| 284 | #define __NR_open_tree		428 | ||
| 285 | #define __NR_move_mount		429 | ||
| 286 | #define __NR_fsopen		430 | ||
| 287 | #define __NR_fsconfig		431 | ||
| 288 | #define __NR_fsmount		432 | ||
| 289 | #define __NR_fspick		433 | ||
| 284 | 290 |
lib/libc/musl/arch/aarch64/kstat.h created+21| ... | @@ -0,0 +1,21 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	ino_t st_ino; | ||
| 4 | 	mode_t st_mode; | ||
| 5 | 	nlink_t st_nlink; | ||
| 6 | 	uid_t st_uid; | ||
| 7 | 	gid_t st_gid; | ||
| 8 | 	dev_t st_rdev; | ||
| 9 | 	unsigned long __pad; | ||
| 10 | 	off_t st_size; | ||
| 11 | 	blksize_t st_blksize; | ||
| 12 | 	int __pad2; | ||
| 13 | 	blkcnt_t st_blocks; | ||
| 14 | 	long st_atime_sec; | ||
| 15 | 	long st_atime_nsec; | ||
| 16 | 	long st_mtime_sec; | ||
| 17 | 	long st_mtime_nsec; | ||
| 18 | 	long st_ctime_sec; | ||
| 19 | 	long st_ctime_nsec; | ||
| 20 | 	unsigned __unused[2]; | ||
| 21 | }; | ||
lib/libc/musl/arch/aarch64/syscall_arch.h+2| ... | @@ -74,3 +74,5 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo | ... | @@ -74,3 +74,5 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo |
| 74 | #define VDSO_USEFUL | 74 | #define VDSO_USEFUL |
| 75 | #define VDSO_CGT_SYM "__kernel_clock_gettime" | 75 | #define VDSO_CGT_SYM "__kernel_clock_gettime" |
| 76 | #define VDSO_CGT_VER "LINUX_2.6.39" | 76 | #define VDSO_CGT_VER "LINUX_2.6.39" |
| 77 | |||
| 78 | #define IPC_64 0 |
lib/libc/musl/arch/arm/bits/ipcstat.h created+1| ... | @@ -0,0 +1 @@ | ||
| 1 | #define IPC_STAT 2 | ||
lib/libc/musl/arch/arm/bits/msg.h created+15| ... | @@ -0,0 +1,15 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	int __unused1; | ||
| 5 | 	time_t msg_rtime; | ||
| 6 | 	int __unused2; | ||
| 7 | 	time_t msg_ctime; | ||
| 8 | 	int __unused3; | ||
| 9 | 	unsigned long msg_cbytes; | ||
| 10 | 	msgqnum_t msg_qnum; | ||
| 11 | 	msglen_t msg_qbytes; | ||
| 12 | 	pid_t msg_lspid; | ||
| 13 | 	pid_t msg_lrpid; | ||
| 14 | 	unsigned long __unused[2]; | ||
| 15 | }; | ||
lib/libc/musl/arch/arm/bits/sem.h created+16| ... | @@ -0,0 +1,16 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	long __unused1; | ||
| 5 | 	time_t sem_ctime; | ||
| 6 | 	long __unused2; | ||
| 7 | #if __BYTE_ORDER == __LITTLE_ENDIAN | ||
| 8 | 	unsigned short sem_nsems; | ||
| 9 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; | ||
| 10 | #else | ||
| 11 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; | ||
| 12 | 	unsigned short sem_nsems; | ||
| 13 | #endif | ||
| 14 | 	long __unused3; | ||
| 15 | 	long __unused4; | ||
| 16 | }; | ||
lib/libc/musl/arch/arm/bits/shm.h created+27| ... | @@ -0,0 +1,27 @@ | ||
| 1 | #define SHMLBA 4096 | ||
| 2 | |||
| 3 | struct shmid_ds { | ||
| 4 | 	struct ipc_perm shm_perm; | ||
| 5 | 	size_t shm_segsz; | ||
| 6 | 	time_t shm_atime; | ||
| 7 | 	int __unused1; | ||
| 8 | 	time_t shm_dtime; | ||
| 9 | 	int __unused2; | ||
| 10 | 	time_t shm_ctime; | ||
| 11 | 	int __unused3; | ||
| 12 | 	pid_t shm_cpid; | ||
| 13 | 	pid_t shm_lpid; | ||
| 14 | 	unsigned long shm_nattch; | ||
| 15 | 	unsigned long __pad1; | ||
| 16 | 	unsigned long __pad2; | ||
| 17 | }; | ||
| 18 | |||
| 19 | struct shminfo { | ||
| 20 | 	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; | ||
| 21 | }; | ||
| 22 | |||
| 23 | struct shm_info { | ||
| 24 | 	int __used_ids; | ||
| 25 | 	unsigned long shm_tot, shm_rss, shm_swp; | ||
| 26 | 	unsigned long __swap_attempts, __swap_successes; | ||
| 27 | }; | ||
lib/libc/musl/arch/arm/bits/syscall.h.in+6| ... | @@ -381,6 +381,12 @@ | ... | @@ -381,6 +381,12 @@ |
| 381 | #define __NR_io_uring_setup	425 | 381 | #define __NR_io_uring_setup	425 |
| 382 | #define __NR_io_uring_enter	426 | 382 | #define __NR_io_uring_enter	426 |
| 383 | #define __NR_io_uring_register	427 | 383 | #define __NR_io_uring_register	427 |
| 384 | #define __NR_open_tree		428 | ||
| 385 | #define __NR_move_mount		429 | ||
| 386 | #define __NR_fsopen		430 | ||
| 387 | #define __NR_fsconfig		431 | ||
| 388 | #define __NR_fsmount		432 | ||
| 389 | #define __NR_fspick		433 | ||
| 384 | 390 | ||
| 385 | #define __ARM_NR_breakpoint	0x0f0001 | 391 | #define __ARM_NR_breakpoint	0x0f0001 |
| 386 | #define __ARM_NR_cacheflush	0x0f0002 | 392 | #define __ARM_NR_cacheflush	0x0f0002 |
lib/libc/musl/arch/arm/kstat.h created+21| ... | @@ -0,0 +1,21 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	int __st_dev_padding; | ||
| 4 | 	long __st_ino_truncated; | ||
| 5 | 	mode_t st_mode; | ||
| 6 | 	nlink_t st_nlink; | ||
| 7 | 	uid_t st_uid; | ||
| 8 | 	gid_t st_gid; | ||
| 9 | 	dev_t st_rdev; | ||
| 10 | 	int __st_rdev_padding; | ||
| 11 | 	off_t st_size; | ||
| 12 | 	blksize_t st_blksize; | ||
| 13 | 	blkcnt_t st_blocks; | ||
| 14 | 	long st_atime_sec; | ||
| 15 | 	long st_atime_nsec; | ||
| 16 | 	long st_mtime_sec; | ||
| 17 | 	long st_mtime_nsec; | ||
| 18 | 	long st_ctime_sec; | ||
| 19 | 	long st_ctime_nsec; | ||
| 20 | 	ino_t st_ino; | ||
| 21 | }; | ||
lib/libc/musl/arch/generic/bits/ipc.h-2| ... | @@ -9,5 +9,3 @@ struct ipc_perm { | ... | @@ -9,5 +9,3 @@ struct ipc_perm { |
| 9 | 	long __pad1; | 9 | 	long __pad1; |
| 10 | 	long __pad2; | 10 | 	long __pad2; |
| 11 | }; | 11 | }; |
| 12 | |||
| 13 | #define IPC_64 0x100 |
lib/libc/musl/arch/generic/bits/ipcstat.h created+1| ... | @@ -0,0 +1 @@ | ||
| 1 | #define IPC_STAT 2 | ||
lib/libc/musl/arch/generic/bits/msg.h-3| ... | @@ -1,11 +1,8 @@ | ... | @@ -1,11 +1,8 @@ |
| 1 | struct msqid_ds { | 1 | struct msqid_ds { |
| 2 | 	struct ipc_perm msg_perm; | 2 | 	struct ipc_perm msg_perm; |
| 3 | 	time_t msg_stime; | 3 | 	time_t msg_stime; |
| 4 | 	int __unused1; | ||
| 5 | 	time_t msg_rtime; | 4 | 	time_t msg_rtime; |
| 6 | 	int __unused2; | ||
| 7 | 	time_t msg_ctime; | 5 | 	time_t msg_ctime; |
| 8 | 	int __unused3; | ||
| 9 | 	unsigned long msg_cbytes; | 6 | 	unsigned long msg_cbytes; |
| 10 | 	msgqnum_t msg_qnum; | 7 | 	msgqnum_t msg_qnum; |
| 11 | 	msglen_t msg_qbytes; | 8 | 	msglen_t msg_qbytes; |
lib/libc/musl/arch/generic/bits/sem.h+4-6| ... | @@ -1,16 +1,14 @@ | ... | @@ -1,16 +1,14 @@ |
| 1 | struct semid_ds { | 1 | struct semid_ds { |
| 2 | 	struct ipc_perm sem_perm; | 2 | 	struct ipc_perm sem_perm; |
| 3 | 	time_t sem_otime; | 3 | 	time_t sem_otime; |
| 4 | 	time_t __unused1; | ||
| 5 | 	time_t sem_ctime; | 4 | 	time_t sem_ctime; |
| 6 | 	time_t __unused2; | ||
| 7 | #if __BYTE_ORDER == __LITTLE_ENDIAN | 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN |
| 8 | 	unsigned short sem_nsems; | 6 | 	unsigned short sem_nsems; |
| 9 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | 7 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; |
| 10 | #else | 8 | #else |
| 11 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | 9 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; |
| 12 | 	unsigned short sem_nsems; | 10 | 	unsigned short sem_nsems; |
| 13 | #endif | 11 | #endif |
| 14 | 	time_t __unused3; | 12 | 	long __unused3; |
| 15 | 	time_t __unused4; | 13 | 	long __unused4; |
| 16 | }; | 14 | }; |
lib/libc/musl/arch/generic/bits/shm.h-4| ... | @@ -4,11 +4,8 @@ struct shmid_ds { | ... | @@ -4,11 +4,8 @@ struct shmid_ds { |
| 4 | 	struct ipc_perm shm_perm; | 4 | 	struct ipc_perm shm_perm; |
| 5 | 	size_t shm_segsz; | 5 | 	size_t shm_segsz; |
| 6 | 	time_t shm_atime; | 6 | 	time_t shm_atime; |
| 7 | 	int __unused1; | ||
| 8 | 	time_t shm_dtime; | 7 | 	time_t shm_dtime; |
| 9 | 	int __unused2; | ||
| 10 | 	time_t shm_ctime; | 8 | 	time_t shm_ctime; |
| 11 | 	int __unused3; | ||
| 12 | 	pid_t shm_cpid; | 9 | 	pid_t shm_cpid; |
| 13 | 	pid_t shm_lpid; | 10 | 	pid_t shm_lpid; |
| 14 | 	unsigned long shm_nattch; | 11 | 	unsigned long shm_nattch; |
| ... | @@ -25,4 +22,3 @@ struct shm_info { | ... | @@ -25,4 +22,3 @@ struct shm_info { |
| 25 | 	unsigned long shm_tot, shm_rss, shm_swp; | 22 | 	unsigned long shm_tot, shm_rss, shm_swp; |
| 26 | 	unsigned long __swap_attempts, __swap_successes; | 23 | 	unsigned long __swap_attempts, __swap_successes; |
| 27 | }; | 24 | }; |
| 28 |
lib/libc/musl/arch/i386/bits/ipcstat.h created+1| ... | @@ -0,0 +1 @@ | ||
| 1 | #define IPC_STAT 2 | ||
lib/libc/musl/arch/i386/bits/msg.h created+15| ... | @@ -0,0 +1,15 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	int __unused1; | ||
| 5 | 	time_t msg_rtime; | ||
| 6 | 	int __unused2; | ||
| 7 | 	time_t msg_ctime; | ||
| 8 | 	int __unused3; | ||
| 9 | 	unsigned long msg_cbytes; | ||
| 10 | 	msgqnum_t msg_qnum; | ||
| 11 | 	msglen_t msg_qbytes; | ||
| 12 | 	pid_t msg_lspid; | ||
| 13 | 	pid_t msg_lrpid; | ||
| 14 | 	unsigned long __unused[2]; | ||
| 15 | }; | ||
lib/libc/musl/arch/i386/bits/sem.h created+11| ... | @@ -0,0 +1,11 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	long __unused1; | ||
| 5 | 	time_t sem_ctime; | ||
| 6 | 	long __unused2; | ||
| 7 | 	unsigned short sem_nsems; | ||
| 8 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; | ||
| 9 | 	long __unused3; | ||
| 10 | 	long __unused4; | ||
| 11 | }; | ||
lib/libc/musl/arch/i386/bits/shm.h created+27| ... | @@ -0,0 +1,27 @@ | ||
| 1 | #define SHMLBA 4096 | ||
| 2 | |||
| 3 | struct shmid_ds { | ||
| 4 | 	struct ipc_perm shm_perm; | ||
| 5 | 	size_t shm_segsz; | ||
| 6 | 	time_t shm_atime; | ||
| 7 | 	int __unused1; | ||
| 8 | 	time_t shm_dtime; | ||
| 9 | 	int __unused2; | ||
| 10 | 	time_t shm_ctime; | ||
| 11 | 	int __unused3; | ||
| 12 | 	pid_t shm_cpid; | ||
| 13 | 	pid_t shm_lpid; | ||
| 14 | 	unsigned long shm_nattch; | ||
| 15 | 	unsigned long __pad1; | ||
| 16 | 	unsigned long __pad2; | ||
| 17 | }; | ||
| 18 | |||
| 19 | struct shminfo { | ||
| 20 | 	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; | ||
| 21 | }; | ||
| 22 | |||
| 23 | struct shm_info { | ||
| 24 | 	int __used_ids; | ||
| 25 | 	unsigned long shm_tot, shm_rss, shm_swp; | ||
| 26 | 	unsigned long __swap_attempts, __swap_successes; | ||
| 27 | }; | ||
lib/libc/musl/arch/i386/bits/syscall.h.in+6| ... | @@ -418,4 +418,10 @@ | ... | @@ -418,4 +418,10 @@ |
| 418 | #define __NR_io_uring_setup	425 | 418 | #define __NR_io_uring_setup	425 |
| 419 | #define __NR_io_uring_enter	426 | 419 | #define __NR_io_uring_enter	426 |
| 420 | #define __NR_io_uring_register	427 | 420 | #define __NR_io_uring_register	427 |
| 421 | #define __NR_open_tree		428 | ||
| 422 | #define __NR_move_mount		429 | ||
| 423 | #define __NR_fsopen		430 | ||
| 424 | #define __NR_fsconfig		431 | ||
| 425 | #define __NR_fsmount		432 | ||
| 426 | #define __NR_fspick		433 | ||
| 421 | 427 |
lib/libc/musl/arch/i386/kstat.h created+21| ... | @@ -0,0 +1,21 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	int __st_dev_padding; | ||
| 4 | 	long __st_ino_truncated; | ||
| 5 | 	mode_t st_mode; | ||
| 6 | 	nlink_t st_nlink; | ||
| 7 | 	uid_t st_uid; | ||
| 8 | 	gid_t st_gid; | ||
| 9 | 	dev_t st_rdev; | ||
| 10 | 	int __st_rdev_padding; | ||
| 11 | 	off_t st_size; | ||
| 12 | 	blksize_t st_blksize; | ||
| 13 | 	blkcnt_t st_blocks; | ||
| 14 | 	long st_atime_sec; | ||
| 15 | 	long st_atime_nsec; | ||
| 16 | 	long st_mtime_sec; | ||
| 17 | 	long st_mtime_nsec; | ||
| 18 | 	long st_ctime_sec; | ||
| 19 | 	long st_ctime_nsec; | ||
| 20 | 	ino_t st_ino; | ||
| 21 | }; | ||
lib/libc/musl/arch/mips/bits/ipcstat.h created+1| ... | @@ -0,0 +1 @@ | ||
| 1 | #define IPC_STAT 2 | ||
lib/libc/musl/arch/mips/bits/sem.h+4-4| ... | @@ -4,11 +4,11 @@ struct semid_ds { | ... | @@ -4,11 +4,11 @@ struct semid_ds { |
| 4 | 	time_t sem_ctime; | 4 | 	time_t sem_ctime; |
| 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN | 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN |
| 6 | 	unsigned short sem_nsems; | 6 | 	unsigned short sem_nsems; |
| 7 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | 7 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; |
| 8 | #else | 8 | #else |
| 9 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | 9 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; |
| 10 | 	unsigned short sem_nsems; | 10 | 	unsigned short sem_nsems; |
| 11 | #endif | 11 | #endif |
| 12 | 	time_t __unused3; | 12 | 	long __unused3; |
| 13 | 	time_t __unused4; | 13 | 	long __unused4; |
| 14 | }; | 14 | }; |
lib/libc/musl/arch/mips/bits/shm.h-1| ... | @@ -22,4 +22,3 @@ struct shm_info { | ... | @@ -22,4 +22,3 @@ struct shm_info { |
| 22 | 	unsigned long shm_tot, shm_rss, shm_swp; | 22 | 	unsigned long shm_tot, shm_rss, shm_swp; |
| 23 | 	unsigned long __swap_attempts, __swap_successes; | 23 | 	unsigned long __swap_attempts, __swap_successes; |
| 24 | }; | 24 | }; |
| 25 |
lib/libc/musl/arch/mips/bits/syscall.h.in+6| ... | @@ -400,4 +400,10 @@ | ... | @@ -400,4 +400,10 @@ |
| 400 | #define __NR_io_uring_setup 4425 | 400 | #define __NR_io_uring_setup 4425 |
| 401 | #define __NR_io_uring_enter 4426 | 401 | #define __NR_io_uring_enter 4426 |
| 402 | #define __NR_io_uring_register 4427 | 402 | #define __NR_io_uring_register 4427 |
| 403 | #define __NR_open_tree		4428 | ||
| 404 | #define __NR_move_mount		4429 | ||
| 405 | #define __NR_fsopen		4430 | ||
| 406 | #define __NR_fsconfig		4431 | ||
| 407 | #define __NR_fsmount		4432 | ||
| 408 | #define __NR_fspick		4433 | ||
| 403 | 409 |
lib/libc/musl/arch/mips/kstat.h created+22| ... | @@ -0,0 +1,22 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	unsigned st_dev; | ||
| 3 | 	long __st_padding1[3]; | ||
| 4 | 	ino_t st_ino; | ||
| 5 | 	mode_t st_mode; | ||
| 6 | 	nlink_t st_nlink; | ||
| 7 | 	uid_t st_uid; | ||
| 8 | 	gid_t st_gid; | ||
| 9 | 	unsigned st_rdev; | ||
| 10 | 	long __st_padding2[3]; | ||
| 11 | 	off_t st_size; | ||
| 12 | 	long st_atime_sec; | ||
| 13 | 	long st_atime_nsec; | ||
| 14 | 	long st_mtime_sec; | ||
| 15 | 	long st_mtime_nsec; | ||
| 16 | 	long st_ctime_sec; | ||
| 17 | 	long st_ctime_nsec; | ||
| 18 | 	blksize_t st_blksize; | ||
| 19 | 	long __st_padding3; | ||
| 20 | 	blkcnt_t st_blocks; | ||
| 21 | long __st_padding4[14]; | ||
| 22 | }; | ||
lib/libc/musl/arch/mips/syscall_arch.h+56-84| ... | @@ -5,27 +5,25 @@ | ... | @@ -5,27 +5,25 @@ |
| 5 | 5 | ||
| 6 | #define SYSCALL_RLIM_INFINITY (-1UL/2) | 6 | #define SYSCALL_RLIM_INFINITY (-1UL/2) |
| 7 | 7 | ||
| 8 | #if _MIPSEL || __MIPSEL || __MIPSEL__ | 8 | #if __mips_isa_rev >= 6 |
| 9 | #define __stat_fix(st) ((st),(void)0) | 9 | #define SYSCALL_CLOBBERLIST \ |
| 10 | 	"$1", "$3", "$11", "$12", "$13", \ | ||
| 11 | 	"$14", "$15", "$24", "$25", "memory" | ||
| 10 | #else | 12 | #else |
| 11 | #include <sys/stat.h> | 13 | #define SYSCALL_CLOBBERLIST \ |
| 12 | static inline void __stat_fix(long p) | 14 | 	"$1", "$3", "$11", "$12", "$13", \ |
| 13 | { | 15 | 	"$14", "$15", "$24", "$25", "hi", "lo", "memory" |
| 14 | 	struct stat *st = (struct stat *)p; | ||
| 15 | 	st->st_dev >>= 32; | ||
| 16 | 	st->st_rdev >>= 32; | ||
| 17 | } | ||
| 18 | #endif | 16 | #endif |
| 19 | 17 | ||
| 20 | static inline long __syscall0(long n) | 18 | static inline long __syscall0(long n) |
| 21 | { | 19 | { |
| 22 | 	register long r7 __asm__("$7"); | 20 | 	register long r7 __asm__("$7"); |
| 23 | 	register long r2 __asm__("$2"); | 21 | 	register long r2 __asm__("$2") = n; |
| 24 | 	__asm__ __volatile__ ( | 22 | 	__asm__ __volatile__ ( |
| 25 | 		"addu $2,$0,%2 ; syscall" | 23 | 		"syscall" |
| 26 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7) | 24 | 		: "+r"(r2), "=r"(r7) |
| 27 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 25 | 		: |
| 28 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 26 | 		: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); |
| 29 | 	return r7 ? -r2 : r2; | 27 | 	return r7 ? -r2 : r2; |
| 30 | } | 28 | } |
| 31 | 29 | ||
| ... | @@ -33,13 +31,12 @@ static inline long __syscall1(long n, long a) | ... | @@ -33,13 +31,12 @@ static inline long __syscall1(long n, long a) |
| 33 | { | 31 | { |
| 34 | 	register long r4 __asm__("$4") = a; | 32 | 	register long r4 __asm__("$4") = a; |
| 35 | 	register long r7 __asm__("$7"); | 33 | 	register long r7 __asm__("$7"); |
| 36 | 	register long r2 __asm__("$2"); | 34 | 	register long r2 __asm__("$2") = n; |
| 37 | 	__asm__ __volatile__ ( | 35 | 	__asm__ __volatile__ ( |
| 38 | 		"addu $2,$0,%2 ; syscall" | 36 | 		"syscall" |
| 39 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 37 | 		: "+r"(r2), "=r"(r7) |
| 40 | 		 "r"(r4) | 38 | 		: "r"(r4) |
| 41 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 39 | 		: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); |
| 42 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | ||
| 43 | 	return r7 ? -r2 : r2; | 40 | 	return r7 ? -r2 : r2; |
| 44 | } | 41 | } |
| 45 | 42 | ||
| ... | @@ -48,17 +45,13 @@ static inline long __syscall2(long n, long a, long b) | ... | @@ -48,17 +45,13 @@ static inline long __syscall2(long n, long a, long b) |
| 48 | 	register long r4 __asm__("$4") = a; | 45 | 	register long r4 __asm__("$4") = a; |
| 49 | 	register long r5 __asm__("$5") = b; | 46 | 	register long r5 __asm__("$5") = b; |
| 50 | 	register long r7 __asm__("$7"); | 47 | 	register long r7 __asm__("$7"); |
| 51 | 	register long r2 __asm__("$2"); | 48 | 	register long r2 __asm__("$2") = n; |
| 52 | 	__asm__ __volatile__ ( | 49 | 	__asm__ __volatile__ ( |
| 53 | 		"addu $2,$0,%2 ; syscall" | 50 | 		"syscall" |
| 54 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 51 | 		: "+r"(r2), "=r"(r7) |
| 55 | 		 "r"(r4), "r"(r5) | 52 | 		: "r"(r4), "r"(r5) |
| 56 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 53 | 		: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); |
| 57 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 54 | 	return r7 ? -r2 : r2; |
| 58 | 	if (r7) return -r2; | ||
| 59 | 	long ret = r2; | ||
| 60 | 	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b); | ||
| 61 | 	return ret; | ||
| 62 | } | 55 | } |
| 63 | 56 | ||
| 64 | static inline long __syscall3(long n, long a, long b, long c) | 57 | static inline long __syscall3(long n, long a, long b, long c) |
| ... | @@ -67,17 +60,13 @@ static inline long __syscall3(long n, long a, long b, long c) | ... | @@ -67,17 +60,13 @@ static inline long __syscall3(long n, long a, long b, long c) |
| 67 | 	register long r5 __asm__("$5") = b; | 60 | 	register long r5 __asm__("$5") = b; |
| 68 | 	register long r6 __asm__("$6") = c; | 61 | 	register long r6 __asm__("$6") = c; |
| 69 | 	register long r7 __asm__("$7"); | 62 | 	register long r7 __asm__("$7"); |
| 70 | 	register long r2 __asm__("$2"); | 63 | 	register long r2 __asm__("$2") = n; |
| 71 | 	__asm__ __volatile__ ( | 64 | 	__asm__ __volatile__ ( |
| 72 | 		"addu $2,$0,%2 ; syscall" | 65 | 		"syscall" |
| 73 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 66 | 		: "+r"(r2), "=r"(r7) |
| 74 | 		 "r"(r4), "r"(r5), "r"(r6) | 67 | 		: "r"(r4), "r"(r5), "r"(r6) |
| 75 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 68 | 		: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); |
| 76 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 69 | 	return r7 ? -r2 : r2; |
| 77 | 	if (r7) return -r2; | ||
| 78 | 	long ret = r2; | ||
| 79 | 	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b); | ||
| 80 | 	return ret; | ||
| 81 | } | 70 | } |
| 82 | 71 | ||
| 83 | static inline long __syscall4(long n, long a, long b, long c, long d) | 72 | static inline long __syscall4(long n, long a, long b, long c, long d) |
| ... | @@ -86,18 +75,13 @@ static inline long __syscall4(long n, long a, long b, long c, long d) | ... | @@ -86,18 +75,13 @@ static inline long __syscall4(long n, long a, long b, long c, long d) |
| 86 | 	register long r5 __asm__("$5") = b; | 75 | 	register long r5 __asm__("$5") = b; |
| 87 | 	register long r6 __asm__("$6") = c; | 76 | 	register long r6 __asm__("$6") = c; |
| 88 | 	register long r7 __asm__("$7") = d; | 77 | 	register long r7 __asm__("$7") = d; |
| 89 | 	register long r2 __asm__("$2"); | 78 | 	register long r2 __asm__("$2") = n; |
| 90 | 	__asm__ __volatile__ ( | 79 | 	__asm__ __volatile__ ( |
| 91 | 		"addu $2,$0,%2 ; syscall" | 80 | 		"syscall" |
| 92 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 81 | 		: "+r"(r2), "+r"(r7) |
| 93 | 		 "r"(r4), "r"(r5), "r"(r6) | 82 | 		: "r"(r4), "r"(r5), "r"(r6) |
| 94 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 83 | 		: SYSCALL_CLOBBERLIST, "$8", "$9", "$10"); |
| 95 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 84 | 	return r7 ? -r2 : r2; |
| 96 | 	if (r7) return -r2; | ||
| 97 | 	long ret = r2; | ||
| 98 | 	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b); | ||
| 99 | 	if (n == SYS_fstatat64) __stat_fix(c); | ||
| 100 | 	return ret; | ||
| 101 | } | 85 | } |
| 102 | 86 | ||
| 103 | static inline long __syscall5(long n, long a, long b, long c, long d, long e) | 87 | static inline long __syscall5(long n, long a, long b, long c, long d, long e) |
| ... | @@ -107,20 +91,15 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e) | ... | @@ -107,20 +91,15 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e) |
| 107 | 	register long r6 __asm__("$6") = c; | 91 | 	register long r6 __asm__("$6") = c; |
| 108 | 	register long r7 __asm__("$7") = d; | 92 | 	register long r7 __asm__("$7") = d; |
| 109 | 	register long r8 __asm__("$8") = e; | 93 | 	register long r8 __asm__("$8") = e; |
| 110 | 	register long r2 __asm__("$2"); | 94 | 	register long r2 __asm__("$2") = n; |
| 111 | 	__asm__ __volatile__ ( | 95 | 	__asm__ __volatile__ ( |
| 112 | 		"subu $sp,$sp,32 ; sw $8,16($sp) ; " | 96 | 		"subu $sp,$sp,32 ; sw $8,16($sp) ; " |
| 113 | 		"addu $2,$0,%3 ; syscall ;" | 97 | 		"syscall ;" |
| 114 | 		"addu $sp,$sp,32" | 98 | 		"addu $sp,$sp,32" |
| 115 | 		: "=&r"(r2), "=r"(r7), "+r"(r8) | 99 | 		: "+r"(r2), "+r"(r7), "+r"(r8) |
| 116 | 		: "ir"(n), "0"(r2), "1"(r7), "r"(r4), "r"(r5), "r"(r6) | 100 | 		: "r"(r4), "r"(r5), "r"(r6) |
| 117 | 		: "$1", "$3", "$9", "$10", "$11", "$12", "$13", | 101 | 		: SYSCALL_CLOBBERLIST, "$9", "$10"); |
| 118 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 102 | 	return r7 ? -r2 : r2; |
| 119 | 	if (r7) return -r2; | ||
| 120 | 	long ret = r2; | ||
| 121 | 	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b); | ||
| 122 | 	if (n == SYS_fstatat64) __stat_fix(c); | ||
| 123 | 	return r2; | ||
| 124 | } | 103 | } |
| 125 | 104 | ||
| 126 | static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) | 105 | static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) |
| ... | @@ -131,20 +110,15 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo | ... | @@ -131,20 +110,15 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo |
| 131 | 	register long r7 __asm__("$7") = d; | 110 | 	register long r7 __asm__("$7") = d; |
| 132 | 	register long r8 __asm__("$8") = e; | 111 | 	register long r8 __asm__("$8") = e; |
| 133 | 	register long r9 __asm__("$9") = f; | 112 | 	register long r9 __asm__("$9") = f; |
| 134 | 	register long r2 __asm__("$2"); | 113 | 	register long r2 __asm__("$2") = n; |
| 135 | 	__asm__ __volatile__ ( | 114 | 	__asm__ __volatile__ ( |
| 136 | 		"subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; " | 115 | 		"subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; " |
| 137 | 		"addu $2,$0,%4 ; syscall ;" | 116 | 		"syscall ;" |
| 138 | 		"addu $sp,$sp,32" | 117 | 		"addu $sp,$sp,32" |
| 139 | 		: "=&r"(r2), "=r"(r7), "+r"(r8), "+r"(r9) | 118 | 		: "+r"(r2), "+r"(r7), "+r"(r8), "+r"(r9) |
| 140 | 		: "ir"(n), "0"(r2), "1"(r7), "r"(r4), "r"(r5), "r"(r6) | 119 | 		: "r"(r4), "r"(r5), "r"(r6) |
| 141 | 		: "$1", "$3", "$10", "$11", "$12", "$13", | 120 | 		: SYSCALL_CLOBBERLIST, "$10"); |
| 142 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 121 | 	return r7 ? -r2 : r2; |
| 143 | 	if (r7) return -r2; | ||
| 144 | 	long ret = r2; | ||
| 145 | 	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b); | ||
| 146 | 	if (n == SYS_fstatat64) __stat_fix(c); | ||
| 147 | 	return r2; | ||
| 148 | } | 122 | } |
| 149 | 123 | ||
| 150 | static inline long __syscall7(long n, long a, long b, long c, long d, long e, long f, long g) | 124 | static inline long __syscall7(long n, long a, long b, long c, long d, long e, long f, long g) |
| ... | @@ -156,22 +130,20 @@ static inline long __syscall7(long n, long a, long b, long c, long d, long e, lo | ... | @@ -156,22 +130,20 @@ static inline long __syscall7(long n, long a, long b, long c, long d, long e, lo |
| 156 | 	register long r8 __asm__("$8") = e; | 130 | 	register long r8 __asm__("$8") = e; |
| 157 | 	register long r9 __asm__("$9") = f; | 131 | 	register long r9 __asm__("$9") = f; |
| 158 | 	register long r10 __asm__("$10") = g; | 132 | 	register long r10 __asm__("$10") = g; |
| 159 | 	register long r2 __asm__("$2"); | 133 | 	register long r2 __asm__("$2") = n; |
| 160 | 	__asm__ __volatile__ ( | 134 | 	__asm__ __volatile__ ( |
| 161 | 		"subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; sw $10,24($sp) ; " | 135 | 		"subu $sp,$sp,32 ; sw $8,16($sp) ; sw $9,20($sp) ; sw $10,24($sp) ; " |
| 162 | 		"addu $2,$0,%5 ; syscall ;" | 136 | 		"syscall ;" |
| 163 | 		"addu $sp,$sp,32" | 137 | 		"addu $sp,$sp,32" |
| 164 | 		: "=&r"(r2), "=r"(r7), "+r"(r8), "+r"(r9), "+r"(r10) | 138 | 		: "+r"(r2), "+r"(r7), "+r"(r8), "+r"(r9), "+r"(r10) |
| 165 | 		: "ir"(n), "0"(r2), "1"(r7), "r"(r4), "r"(r5), "r"(r6) | 139 | 		: "r"(r4), "r"(r5), "r"(r6) |
| 166 | 		: "$1", "$3", "$11", "$12", "$13", | 140 | 		: SYSCALL_CLOBBERLIST); |
| 167 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 141 | 	return r7 ? -r2 : r2; |
| 168 | 	if (r7) return -r2; | ||
| 169 | 	long ret = r2; | ||
| 170 | 	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b); | ||
| 171 | 	if (n == SYS_fstatat64) __stat_fix(c); | ||
| 172 | 	return r2; | ||
| 173 | } | 142 | } |
| 174 | 143 | ||
| 175 | #define VDSO_USEFUL | 144 | #define VDSO_USEFUL |
| 176 | #define VDSO_CGT_SYM "__vdso_clock_gettime" | 145 | #define VDSO_CGT_SYM "__vdso_clock_gettime" |
| 177 | #define VDSO_CGT_VER "LINUX_2.6" | 146 | #define VDSO_CGT_VER "LINUX_2.6" |
| 147 | |||
| 148 | #define SO_SNDTIMEO_OLD 0x1005 | ||
| 149 | #define SO_RCVTIMEO_OLD 0x1006 |
lib/libc/musl/arch/mips64/bits/ipc.h-2| ... | @@ -10,5 +10,3 @@ struct ipc_perm { | ... | @@ -10,5 +10,3 @@ struct ipc_perm { |
| 10 | 	unsigned long __unused1; | 10 | 	unsigned long __unused1; |
| 11 | 	unsigned long __unused2; | 11 | 	unsigned long __unused2; |
| 12 | }; | 12 | }; |
| 13 | |||
| 14 | #define IPC_64 0x100 |
lib/libc/musl/arch/mips64/bits/msg.h deleted-13| ... | @@ -1,13 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __pad1; | ||
| 12 | 	unsigned long __pad2; | ||
| 13 | }; | ||
lib/libc/musl/arch/mips64/bits/sem.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | #if __BYTE_ORDER == __LITTLE_ENDIAN | ||
| 6 | 	unsigned short sem_nsems; | ||
| 7 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 8 | #else | ||
| 9 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 10 | 	unsigned short sem_nsems; | ||
| 11 | #endif | ||
| 12 | 	time_t __unused3; | ||
| 13 | 	time_t __unused4; | ||
| 14 | }; | ||
lib/libc/musl/arch/mips64/bits/shm.h deleted-24| ... | @@ -1,24 +0,0 @@ | ||
| 1 | #define SHMLBA 4096 | ||
| 2 | |||
| 3 | struct shmid_ds { | ||
| 4 | 	struct ipc_perm shm_perm; | ||
| 5 | 	size_t shm_segsz; | ||
| 6 | 	time_t shm_atime; | ||
| 7 | 	time_t shm_dtime; | ||
| 8 | 	time_t shm_ctime; | ||
| 9 | 	pid_t shm_cpid; | ||
| 10 | 	pid_t shm_lpid; | ||
| 11 | 	unsigned long shm_nattch; | ||
| 12 | 	unsigned long __pad1; | ||
| 13 | 	unsigned long __pad2; | ||
| 14 | }; | ||
| 15 | |||
| 16 | struct shminfo { | ||
| 17 | 	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; | ||
| 18 | }; | ||
| 19 | |||
| 20 | struct shm_info { | ||
| 21 | 	int __used_ids; | ||
| 22 | 	unsigned long shm_tot, shm_rss, shm_swp; | ||
| 23 | 	unsigned long __swap_attempts, __swap_successes; | ||
| 24 | }; | ||
lib/libc/musl/arch/mips64/bits/stat.h-3| ... | @@ -1,6 +1,3 @@ | ... | @@ -1,6 +1,3 @@ |
| 1 | #include <string.h> | ||
| 2 | #include <bits/alltypes.h> | ||
| 3 | |||
| 4 | struct stat { | 1 | struct stat { |
| 5 | 	dev_t st_dev; | 2 | 	dev_t st_dev; |
| 6 | 	int __pad1[3]; | 3 | 	int __pad1[3]; |
lib/libc/musl/arch/mips64/bits/syscall.h.in+6| ... | @@ -330,4 +330,10 @@ | ... | @@ -330,4 +330,10 @@ |
| 330 | #define __NR_io_uring_setup		5425 | 330 | #define __NR_io_uring_setup		5425 |
| 331 | #define __NR_io_uring_enter		5426 | 331 | #define __NR_io_uring_enter		5426 |
| 332 | #define __NR_io_uring_register		5427 | 332 | #define __NR_io_uring_register		5427 |
| 333 | #define __NR_open_tree		5428 | ||
| 334 | #define __NR_move_mount		5429 | ||
| 335 | #define __NR_fsopen		5430 | ||
| 336 | #define __NR_fsconfig		5431 | ||
| 337 | #define __NR_fsmount		5432 | ||
| 338 | #define __NR_fspick		5433 | ||
| 333 | 339 |
lib/libc/musl/arch/mips64/kstat.h created+21| ... | @@ -0,0 +1,21 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	unsigned st_dev; | ||
| 3 | 	int __pad1[3]; | ||
| 4 | 	ino_t st_ino; | ||
| 5 | 	mode_t st_mode; | ||
| 6 | 	unsigned st_nlink; | ||
| 7 | 	uid_t st_uid; | ||
| 8 | 	gid_t st_gid; | ||
| 9 | 	unsigned st_rdev; | ||
| 10 | 	int __pad2[3]; | ||
| 11 | 	off_t st_size; | ||
| 12 | 	int st_atime_sec; | ||
| 13 | 	int st_atime_nsec; | ||
| 14 | 	int st_mtime_sec; | ||
| 15 | 	int st_mtime_nsec; | ||
| 16 | 	int st_ctime_sec; | ||
| 17 | 	int st_ctime_nsec; | ||
| 18 | 	unsigned st_blksize; | ||
| 19 | 	unsigned __pad3; | ||
| 20 | 	blkcnt_t st_blocks; | ||
| 21 | }; | ||
lib/libc/musl/arch/mips64/syscall_arch.h+52-160| ... | @@ -3,58 +3,25 @@ | ... | @@ -3,58 +3,25 @@ |
| 3 | 3 | ||
| 4 | #define SYSCALL_RLIM_INFINITY (-1UL/2) | 4 | #define SYSCALL_RLIM_INFINITY (-1UL/2) |
| 5 | 5 | ||
| 6 | #include <sys/stat.h> | 6 | #if __mips_isa_rev >= 6 |
| 7 | struct kernel_stat { | 7 | #define SYSCALL_CLOBBERLIST \ |
| 8 | 	unsigned int st_dev; | 8 | 	"$1", "$3", "$10", "$11", "$12", "$13", \ |
| 9 | 	unsigned int __pad1[3]; | 9 | 	"$14", "$15", "$24", "$25", "memory" |
| 10 | 	unsigned long long st_ino; | 10 | #else |
| 11 | 	unsigned int st_mode; | 11 | #define SYSCALL_CLOBBERLIST \ |
| 12 | 	unsigned int st_nlink; | 12 | 	"$1", "$3", "$10", "$11", "$12", "$13", \ |
| 13 | 	int st_uid; | 13 | 	"$14", "$15", "$24", "$25", "hi", "lo", "memory" |
| 14 | 	int st_gid; | 14 | #endif |
| 15 | 	unsigned int st_rdev; | ||
| 16 | 	unsigned int __pad2[3]; | ||
| 17 | 	long long st_size; | ||
| 18 | 	unsigned int st_atime_sec; | ||
| 19 | 	unsigned int st_atime_nsec; | ||
| 20 | 	unsigned int st_mtime_sec; | ||
| 21 | 	unsigned int st_mtime_nsec; | ||
| 22 | 	unsigned int st_ctime_sec; | ||
| 23 | 	unsigned int st_ctime_nsec; | ||
| 24 | 	unsigned int st_blksize; | ||
| 25 | 	unsigned int __pad3; | ||
| 26 | 	unsigned long long st_blocks; | ||
| 27 | }; | ||
| 28 | |||
| 29 | static void __stat_fix(struct kernel_stat *kst, struct stat *st) | ||
| 30 | { | ||
| 31 | 	st->st_dev = kst->st_dev; | ||
| 32 | 	st->st_ino = kst->st_ino; | ||
| 33 | 	st->st_mode = kst->st_mode; | ||
| 34 | 	st->st_nlink = kst->st_nlink; | ||
| 35 | 	st->st_uid = kst->st_uid; | ||
| 36 | 	st->st_gid = kst->st_gid; | ||
| 37 | 	st->st_rdev = kst->st_rdev; | ||
| 38 | 	st->st_size = kst->st_size; | ||
| 39 | 	st->st_atim.tv_sec = kst->st_atime_sec; | ||
| 40 | 	st->st_atim.tv_nsec = kst->st_atime_nsec; | ||
| 41 | 	st->st_mtim.tv_sec = kst->st_mtime_sec; | ||
| 42 | 	st->st_mtim.tv_nsec = kst->st_mtime_nsec; | ||
| 43 | 	st->st_ctim.tv_sec = kst->st_ctime_sec; | ||
| 44 | 	st->st_ctim.tv_nsec = kst->st_ctime_nsec; | ||
| 45 | 	st->st_blksize = kst->st_blksize; | ||
| 46 | 	st->st_blocks = kst->st_blocks; | ||
| 47 | } | ||
| 48 | 15 | ||
| 49 | static inline long __syscall0(long n) | 16 | static inline long __syscall0(long n) |
| 50 | { | 17 | { |
| 51 | 	register long r7 __asm__("$7"); | 18 | 	register long r7 __asm__("$7"); |
| 52 | 	register long r2 __asm__("$2"); | 19 | 	register long r2 __asm__("$2") = n; |
| 53 | 	__asm__ __volatile__ ( | 20 | 	__asm__ __volatile__ ( |
| 54 | 		"daddu $2,$0,%2 ; syscall" | 21 | 		"syscall" |
| 55 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7) | 22 | 		: "+&r"(r2), "=r"(r7) |
| 56 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 23 | 		: |
| 57 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 24 | 		: SYSCALL_CLOBBERLIST); |
| 58 | 	return r7 ? -r2 : r2; | 25 | 	return r7 ? -r2 : r2; |
| 59 | } | 26 | } |
| 60 | 27 | ||
| ... | @@ -62,175 +29,100 @@ static inline long __syscall1(long n, long a) | ... | @@ -62,175 +29,100 @@ static inline long __syscall1(long n, long a) |
| 62 | { | 29 | { |
| 63 | 	register long r4 __asm__("$4") = a; | 30 | 	register long r4 __asm__("$4") = a; |
| 64 | 	register long r7 __asm__("$7"); | 31 | 	register long r7 __asm__("$7"); |
| 65 | 	register long r2 __asm__("$2"); | 32 | 	register long r2 __asm__("$2") = n; |
| 66 | 	__asm__ __volatile__ ( | 33 | 	__asm__ __volatile__ ( |
| 67 | 		"daddu $2,$0,%2 ; syscall" | 34 | 		"syscall" |
| 68 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 35 | 		: "+&r"(r2), "=r"(r7) |
| 69 | 		 "r"(r4) | 36 | 		: "r"(r4) |
| 70 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 37 | 		: SYSCALL_CLOBBERLIST); |
| 71 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | ||
| 72 | 	return r7 ? -r2 : r2; | 38 | 	return r7 ? -r2 : r2; |
| 73 | } | 39 | } |
| 74 | 40 | ||
| 75 | static inline long __syscall2(long n, long a, long b) | 41 | static inline long __syscall2(long n, long a, long b) |
| 76 | { | 42 | { |
| 77 | 	struct kernel_stat kst; | ||
| 78 | 	long ret; | ||
| 79 | 	register long r4 __asm__("$4") = a; | 43 | 	register long r4 __asm__("$4") = a; |
| 80 | 	register long r5 __asm__("$5") = b; | 44 | 	register long r5 __asm__("$5") = b; |
| 81 | 	register long r7 __asm__("$7"); | 45 | 	register long r7 __asm__("$7"); |
| 82 | 	register long r2 __asm__("$2"); | 46 | 	register long r2 __asm__("$2") = n; |
| 83 | |||
| 84 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 85 | 		r5 = (long) &kst; | ||
| 86 | 47 | ||
| 87 | 	__asm__ __volatile__ ( | 48 | 	__asm__ __volatile__ ( |
| 88 | 		"daddu $2,$0,%2 ; syscall" | 49 | 		"syscall" |
| 89 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 50 | 		: "+&r"(r2), "=r"(r7) |
| 90 | 		 "r"(r4), "r"(r5) | 51 | 		: "r"(r4), "r"(r5) |
| 91 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 52 | 		: SYSCALL_CLOBBERLIST); |
| 92 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 53 | 	return r7 ? -r2 : r2; |
| 93 | |||
| 94 | 	if (r7) return -r2; | ||
| 95 | 	ret = r2; | ||
| 96 | |||
| 97 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 98 | 		__stat_fix(&kst, (struct stat *)b); | ||
| 99 | |||
| 100 | 	return ret; | ||
| 101 | } | 54 | } |
| 102 | 55 | ||
| 103 | static inline long __syscall3(long n, long a, long b, long c) | 56 | static inline long __syscall3(long n, long a, long b, long c) |
| 104 | { | 57 | { |
| 105 | 	struct kernel_stat kst; | ||
| 106 | 	long ret; | ||
| 107 | 	register long r4 __asm__("$4") = a; | 58 | 	register long r4 __asm__("$4") = a; |
| 108 | 	register long r5 __asm__("$5") = b; | 59 | 	register long r5 __asm__("$5") = b; |
| 109 | 	register long r6 __asm__("$6") = c; | 60 | 	register long r6 __asm__("$6") = c; |
| 110 | 	register long r7 __asm__("$7"); | 61 | 	register long r7 __asm__("$7"); |
| 111 | 	register long r2 __asm__("$2"); | 62 | 	register long r2 __asm__("$2") = n; |
| 112 | |||
| 113 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 114 | 		r5 = (long) &kst; | ||
| 115 | 63 | ||
| 116 | 	__asm__ __volatile__ ( | 64 | 	__asm__ __volatile__ ( |
| 117 | 		"daddu $2,$0,%2 ; syscall" | 65 | 		"syscall" |
| 118 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 66 | 		: "+&r"(r2), "=r"(r7) |
| 119 | 		 "r"(r4), "r"(r5), "r"(r6) | 67 | 		: "r"(r4), "r"(r5), "r"(r6) |
| 120 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 68 | 		: SYSCALL_CLOBBERLIST); |
| 121 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 69 | 	return r7 ? -r2 : r2; |
| 122 | |||
| 123 | 	if (r7) return -r2; | ||
| 124 | 	ret = r2; | ||
| 125 | |||
| 126 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 127 | 		__stat_fix(&kst, (struct stat *)b); | ||
| 128 | |||
| 129 | 	return ret; | ||
| 130 | } | 70 | } |
| 131 | 71 | ||
| 132 | static inline long __syscall4(long n, long a, long b, long c, long d) | 72 | static inline long __syscall4(long n, long a, long b, long c, long d) |
| 133 | { | 73 | { |
| 134 | 	struct kernel_stat kst; | ||
| 135 | 	long ret; | ||
| 136 | 	register long r4 __asm__("$4") = a; | 74 | 	register long r4 __asm__("$4") = a; |
| 137 | 	register long r5 __asm__("$5") = b; | 75 | 	register long r5 __asm__("$5") = b; |
| 138 | 	register long r6 __asm__("$6") = c; | 76 | 	register long r6 __asm__("$6") = c; |
| 139 | 	register long r7 __asm__("$7") = d; | 77 | 	register long r7 __asm__("$7") = d; |
| 140 | 	register long r2 __asm__("$2"); | 78 | 	register long r2 __asm__("$2") = n; |
| 141 | |||
| 142 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 143 | 		r5 = (long) &kst; | ||
| 144 | 	if (n == SYS_newfstatat) | ||
| 145 | 		r6 = (long) &kst; | ||
| 146 | 79 | ||
| 147 | 	__asm__ __volatile__ ( | 80 | 	__asm__ __volatile__ ( |
| 148 | 		"daddu $2,$0,%2 ; syscall" | 81 | 		"syscall" |
| 149 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 82 | 		: "+&r"(r2), "+r"(r7) |
| 150 | 		 "r"(r4), "r"(r5), "r"(r6) | 83 | 		: "r"(r4), "r"(r5), "r"(r6) |
| 151 | 		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", | 84 | 		: SYSCALL_CLOBBERLIST); |
| 152 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 85 | 	return r7 ? -r2 : r2; |
| 153 | |||
| 154 | 	if (r7) return -r2; | ||
| 155 | 	ret = r2; | ||
| 156 | |||
| 157 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 158 | 		__stat_fix(&kst, (struct stat *)b); | ||
| 159 | 	if (n == SYS_newfstatat) | ||
| 160 | 		__stat_fix(&kst, (struct stat *)c); | ||
| 161 | |||
| 162 | 	return ret; | ||
| 163 | } | 86 | } |
| 164 | 87 | ||
| 165 | static inline long __syscall5(long n, long a, long b, long c, long d, long e) | 88 | static inline long __syscall5(long n, long a, long b, long c, long d, long e) |
| 166 | { | 89 | { |
| 167 | 	struct kernel_stat kst; | ||
| 168 | 	long ret; | ||
| 169 | 	register long r4 __asm__("$4") = a; | 90 | 	register long r4 __asm__("$4") = a; |
| 170 | 	register long r5 __asm__("$5") = b; | 91 | 	register long r5 __asm__("$5") = b; |
| 171 | 	register long r6 __asm__("$6") = c; | 92 | 	register long r6 __asm__("$6") = c; |
| 172 | 	register long r7 __asm__("$7") = d; | 93 | 	register long r7 __asm__("$7") = d; |
| 173 | 	register long r8 __asm__("$8") = e; | 94 | 	register long r8 __asm__("$8") = e; |
| 174 | 	register long r2 __asm__("$2"); | 95 | 	register long r2 __asm__("$2") = n; |
| 175 | |||
| 176 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 177 | 		r5 = (long) &kst; | ||
| 178 | 	if (n == SYS_newfstatat) | ||
| 179 | 		r6 = (long) &kst; | ||
| 180 | 96 | ||
| 181 | 	__asm__ __volatile__ ( | 97 | 	__asm__ __volatile__ ( |
| 182 | 		"daddu $2,$0,%2 ; syscall" | 98 | 		"syscall" |
| 183 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 99 | 		: "+&r"(r2), "+r"(r7) |
| 184 | 		 "r"(r4), "r"(r5), "r"(r6), "r"(r8) | 100 | 		: "r"(r4), "r"(r5), "r"(r6), "r"(r8) |
| 185 | 		: "$1", "$3", "$9", "$10", "$11", "$12", "$13", | 101 | 		: SYSCALL_CLOBBERLIST); |
| 186 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 102 | 	return r7 ? -r2 : r2; |
| 187 | |||
| 188 | 	if (r7) return -r2; | ||
| 189 | 	ret = r2; | ||
| 190 | |||
| 191 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 192 | 		__stat_fix(&kst, (struct stat *)b); | ||
| 193 | 	if (n == SYS_newfstatat) | ||
| 194 | 		__stat_fix(&kst, (struct stat *)c); | ||
| 195 | |||
| 196 | 	return ret; | ||
| 197 | } | 103 | } |
| 198 | 104 | ||
| 199 | static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) | 105 | static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) |
| 200 | { | 106 | { |
| 201 | 	struct kernel_stat kst; | ||
| 202 | 	long ret; | ||
| 203 | 	register long r4 __asm__("$4") = a; | 107 | 	register long r4 __asm__("$4") = a; |
| 204 | 	register long r5 __asm__("$5") = b; | 108 | 	register long r5 __asm__("$5") = b; |
| 205 | 	register long r6 __asm__("$6") = c; | 109 | 	register long r6 __asm__("$6") = c; |
| 206 | 	register long r7 __asm__("$7") = d; | 110 | 	register long r7 __asm__("$7") = d; |
| 207 | 	register long r8 __asm__("$8") = e; | 111 | 	register long r8 __asm__("$8") = e; |
| 208 | 	register long r9 __asm__("$9") = f; | 112 | 	register long r9 __asm__("$9") = f; |
| 209 | 	register long r2 __asm__("$2"); | 113 | 	register long r2 __asm__("$2") = n; |
| 210 | |||
| 211 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 212 | 		r5 = (long) &kst; | ||
| 213 | 	if (n == SYS_newfstatat) | ||
| 214 | 		r6 = (long) &kst; | ||
| 215 | 114 | ||
| 216 | 	__asm__ __volatile__ ( | 115 | 	__asm__ __volatile__ ( |
| 217 | 		"daddu $2,$0,%2 ; syscall" | 116 | 		"syscall" |
| 218 | 		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7), | 117 | 		: "+&r"(r2), "+r"(r7) |
| 219 | 		 "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9) | 118 | 		: "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9) |
| 220 | 		: "$1", "$3", "$10", "$11", "$12", "$13", | 119 | 		: SYSCALL_CLOBBERLIST); |
| 221 | 		 "$14", "$15", "$24", "$25", "hi", "lo", "memory"); | 120 | 	return r7 ? -r2 : r2; |
| 222 | |||
| 223 | 	if (r7) return -r2; | ||
| 224 | 	ret = r2; | ||
| 225 | |||
| 226 | 	if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) | ||
| 227 | 		__stat_fix(&kst, (struct stat *)b); | ||
| 228 | 	if (n == SYS_newfstatat) | ||
| 229 | 		__stat_fix(&kst, (struct stat *)c); | ||
| 230 | |||
| 231 | 	return ret; | ||
| 232 | } | 121 | } |
| 233 | 122 | ||
| 234 | #define VDSO_USEFUL | 123 | #define VDSO_USEFUL |
| 235 | #define VDSO_CGT_SYM "__vdso_clock_gettime" | 124 | #define VDSO_CGT_SYM "__vdso_clock_gettime" |
| 236 | #define VDSO_CGT_VER "LINUX_2.6" | 125 | #define VDSO_CGT_VER "LINUX_2.6" |
| 126 | |||
| 127 | #define SO_SNDTIMEO_OLD 0x1005 | ||
| 128 | #define SO_RCVTIMEO_OLD 0x1006 |
lib/libc/musl/arch/powerpc/bits/alltypes.h.in+4| ... | @@ -6,8 +6,12 @@ TYPEDEF __builtin_va_list va_list; | ... | @@ -6,8 +6,12 @@ TYPEDEF __builtin_va_list va_list; |
| 6 | TYPEDEF __builtin_va_list __isoc_va_list; | 6 | TYPEDEF __builtin_va_list __isoc_va_list; |
| 7 | 7 | ||
| 8 | #ifndef __cplusplus | 8 | #ifndef __cplusplus |
| 9 | #ifdef __WCHAR_TYPE__ | ||
| 10 | TYPEDEF __WCHAR_TYPE__ wchar_t; | ||
| 11 | #else | ||
| 9 | TYPEDEF long wchar_t; | 12 | TYPEDEF long wchar_t; |
| 10 | #endif | 13 | #endif |
| 14 | #endif | ||
| 11 | 15 | ||
| 12 | TYPEDEF float float_t; | 16 | TYPEDEF float float_t; |
| 13 | TYPEDEF double double_t; | 17 | TYPEDEF double double_t; |
lib/libc/musl/arch/powerpc/bits/ipc.h-3| ... | @@ -10,6 +10,3 @@ struct ipc_perm { | ... | @@ -10,6 +10,3 @@ struct ipc_perm { |
| 10 | 	long long __pad2; | 10 | 	long long __pad2; |
| 11 | 	long long __pad3; | 11 | 	long long __pad3; |
| 12 | }; | 12 | }; |
| 13 | |||
| 14 | #define IPC_64 0x100 | ||
| 15 |
lib/libc/musl/arch/powerpc/bits/ipcstat.h created+1| ... | @@ -0,0 +1 @@ | ||
| 1 | #define IPC_STAT 2 | ||
lib/libc/musl/arch/powerpc/bits/shm.h-1| ... | @@ -26,4 +26,3 @@ struct shm_info { | ... | @@ -26,4 +26,3 @@ struct shm_info { |
| 26 | 	unsigned long shm_tot, shm_rss, shm_swp; | 26 | 	unsigned long shm_tot, shm_rss, shm_swp; |
| 27 | 	unsigned long __swap_attempts, __swap_successes; | 27 | 	unsigned long __swap_attempts, __swap_successes; |
| 28 | }; | 28 | }; |
| 29 |
lib/libc/musl/arch/powerpc/bits/syscall.h.in+6| ... | @@ -407,4 +407,10 @@ | ... | @@ -407,4 +407,10 @@ |
| 407 | #define __NR_io_uring_setup 425 | 407 | #define __NR_io_uring_setup 425 |
| 408 | #define __NR_io_uring_enter 426 | 408 | #define __NR_io_uring_enter 426 |
| 409 | #define __NR_io_uring_register 427 | 409 | #define __NR_io_uring_register 427 |
| 410 | #define __NR_open_tree		428 | ||
| 411 | #define __NR_move_mount		429 | ||
| 412 | #define __NR_fsopen		430 | ||
| 413 | #define __NR_fsconfig		431 | ||
| 414 | #define __NR_fsmount		432 | ||
| 415 | #define __NR_fspick		433 | ||
| 410 | 416 |
lib/libc/musl/arch/powerpc/bits/user.h+4-6| ... | @@ -1,10 +1,8 @@ | ... | @@ -1,10 +1,8 @@ |
| 1 | struct pt_regs { | ||
| 2 | 	unsigned long gpr[32], nip, msr, orig_gpr3, ctr, link, xer, ccr, mq; | ||
| 3 | 	unsigned long trap, dar, dsisr, result; | ||
| 4 | }; | ||
| 5 | |||
| 6 | struct user { | 1 | struct user { |
| 7 | 	struct pt_regs regs; | 2 | 	struct { |
| 3 | 		unsigned long gpr[32], nip, msr, orig_gpr3, ctr, link, xer, ccr, mq; | ||
| 4 | 		unsigned long trap, dar, dsisr, result; | ||
| 5 | 	} regs; | ||
| 8 | 	unsigned long u_tsize, u_dsize, u_ssize; | 6 | 	unsigned long u_tsize, u_dsize, u_ssize; |
| 9 | 	unsigned long start_code, start_data, start_stack; | 7 | 	unsigned long start_code, start_data, start_stack; |
| 10 | 	long signal; | 8 | 	long signal; |
lib/libc/musl/arch/powerpc/kstat.h created+20| ... | @@ -0,0 +1,20 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	ino_t st_ino; | ||
| 4 | 	mode_t st_mode; | ||
| 5 | 	nlink_t st_nlink; | ||
| 6 | 	uid_t st_uid; | ||
| 7 | 	gid_t st_gid; | ||
| 8 | 	dev_t st_rdev; | ||
| 9 | 	short __st_rdev_padding; | ||
| 10 | 	off_t st_size; | ||
| 11 | 	blksize_t st_blksize; | ||
| 12 | 	blkcnt_t st_blocks; | ||
| 13 | 	long st_atime_sec; | ||
| 14 | 	long st_atime_nsec; | ||
| 15 | 	long st_mtime_sec; | ||
| 16 | 	long st_mtime_nsec; | ||
| 17 | 	long st_ctime_sec; | ||
| 18 | 	long st_ctime_nsec; | ||
| 19 | 	unsigned __unused[2]; | ||
| 20 | }; | ||
lib/libc/musl/arch/powerpc/reloc.h+1| ... | @@ -9,6 +9,7 @@ | ... | @@ -9,6 +9,7 @@ |
| 9 | #define TPOFF_K (-0x7000) | 9 | #define TPOFF_K (-0x7000) |
| 10 | 10 | ||
| 11 | #define REL_SYMBOLIC R_PPC_ADDR32 | 11 | #define REL_SYMBOLIC R_PPC_ADDR32 |
| 12 | #define REL_USYMBOLIC R_PPC_UADDR32 | ||
| 12 | #define REL_GOT R_PPC_GLOB_DAT | 13 | #define REL_GOT R_PPC_GLOB_DAT |
| 13 | #define REL_PLT R_PPC_JMP_SLOT | 14 | #define REL_PLT R_PPC_JMP_SLOT |
| 14 | #define REL_RELATIVE R_PPC_RELATIVE | 15 | #define REL_RELATIVE R_PPC_RELATIVE |
lib/libc/musl/arch/powerpc/syscall_arch.h+3| ... | @@ -89,3 +89,6 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo | ... | @@ -89,3 +89,6 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | #define SYSCALL_FADVISE_6_ARG | 91 | #define SYSCALL_FADVISE_6_ARG |
| 92 | |||
| 93 | #define SO_RCVTIMEO_OLD 18 | ||
| 94 | #define SO_SNDTIMEO_OLD 19 |
lib/libc/musl/arch/powerpc64/bits/ipc.h-3| ... | @@ -10,6 +10,3 @@ struct ipc_perm { | ... | @@ -10,6 +10,3 @@ struct ipc_perm { |
| 10 | 	long long __pad2; | 10 | 	long long __pad2; |
| 11 | 	long long __pad3; | 11 | 	long long __pad3; |
| 12 | }; | 12 | }; |
| 13 | |||
| 14 | #define IPC_64 0x100 | ||
| 15 |
lib/libc/musl/arch/powerpc64/bits/msg.h deleted-12| ... | @@ -1,12 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __unused[2]; | ||
| 12 | }; | ||
lib/libc/musl/arch/powerpc64/bits/sem.h deleted-13| ... | @@ -1,13 +0,0 @@ | ||
| 1 | #include <endian.h> | ||
| 2 | |||
| 3 | struct semid_ds { | ||
| 4 | 	struct ipc_perm sem_perm; | ||
| 5 | 	time_t sem_otime; | ||
| 6 | 	time_t sem_ctime; | ||
| 7 | #if __BYTE_ORDER == __BIG_ENDIAN | ||
| 8 | 	unsigned short __pad[3], sem_nsems; | ||
| 9 | #else | ||
| 10 | 	unsigned short sem_nsems, __pad[3]; | ||
| 11 | #endif | ||
| 12 | 	unsigned long __unused[2]; | ||
| 13 | }; | ||
lib/libc/musl/arch/powerpc64/bits/shm.h-1| ... | @@ -21,4 +21,3 @@ struct shm_info { | ... | @@ -21,4 +21,3 @@ struct shm_info { |
| 21 | 	unsigned long shm_tot, shm_rss, shm_swp; | 21 | 	unsigned long shm_tot, shm_rss, shm_swp; |
| 22 | 	unsigned long __swap_attempts, __swap_successes; | 22 | 	unsigned long __swap_attempts, __swap_successes; |
| 23 | }; | 23 | }; |
| 24 |
lib/libc/musl/arch/powerpc64/bits/syscall.h.in+6| ... | @@ -379,4 +379,10 @@ | ... | @@ -379,4 +379,10 @@ |
| 379 | #define __NR_io_uring_setup 425 | 379 | #define __NR_io_uring_setup 425 |
| 380 | #define __NR_io_uring_enter 426 | 380 | #define __NR_io_uring_enter 426 |
| 381 | #define __NR_io_uring_register 427 | 381 | #define __NR_io_uring_register 427 |
| 382 | #define __NR_open_tree		428 | ||
| 383 | #define __NR_move_mount		429 | ||
| 384 | #define __NR_fsopen		430 | ||
| 385 | #define __NR_fsconfig		431 | ||
| 386 | #define __NR_fsmount		432 | ||
| 387 | #define __NR_fspick		433 | ||
| 382 | 388 |
lib/libc/musl/arch/powerpc64/bits/user.h+4-6| ... | @@ -1,10 +1,8 @@ | ... | @@ -1,10 +1,8 @@ |
| 1 | struct pt_regs { | ||
| 2 | 	unsigned long gpr[32], nip, msr, orig_gpr3, ctr, link, xer, ccr, softe; | ||
| 3 | 	unsigned long trap, dar, dsisr, result; | ||
| 4 | }; | ||
| 5 | |||
| 6 | struct user { | 1 | struct user { |
| 7 | 	struct pt_regs regs; | 2 | 	struct { |
| 3 | 		unsigned long gpr[32], nip, msr, orig_gpr3, ctr, link, xer, ccr, softe; | ||
| 4 | 		unsigned long trap, dar, dsisr, result; | ||
| 5 | 	} regs; | ||
| 8 | 	unsigned long u_tsize, u_dsize, u_ssize; | 6 | 	unsigned long u_tsize, u_dsize, u_ssize; |
| 9 | 	unsigned long start_code, start_data, start_stack; | 7 | 	unsigned long start_code, start_data, start_stack; |
| 10 | 	long signal; | 8 | 	long signal; |
lib/libc/musl/arch/powerpc64/kstat.h created+19| ... | @@ -0,0 +1,19 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	ino_t st_ino; | ||
| 4 | 	nlink_t st_nlink; | ||
| 5 | 	mode_t st_mode; | ||
| 6 | 	uid_t st_uid; | ||
| 7 | 	gid_t st_gid; | ||
| 8 | 	dev_t st_rdev; | ||
| 9 | 	off_t st_size; | ||
| 10 | 	blksize_t st_blksize; | ||
| 11 | 	blkcnt_t st_blocks; | ||
| 12 | 	long st_atime_sec; | ||
| 13 | 	long st_atime_nsec; | ||
| 14 | 	long st_mtime_sec; | ||
| 15 | 	long st_mtime_nsec; | ||
| 16 | 	long st_ctime_sec; | ||
| 17 | 	long st_ctime_nsec; | ||
| 18 | 	unsigned long __unused[3]; | ||
| 19 | }; | ||
lib/libc/musl/arch/powerpc64/reloc.h+1| ... | @@ -11,6 +11,7 @@ | ... | @@ -11,6 +11,7 @@ |
| 11 | #define TPOFF_K (-0x7000) | 11 | #define TPOFF_K (-0x7000) |
| 12 | 12 | ||
| 13 | #define REL_SYMBOLIC R_PPC64_ADDR64 | 13 | #define REL_SYMBOLIC R_PPC64_ADDR64 |
| 14 | #define REL_USYMBOLIC R_PPC64_UADDR64 | ||
| 14 | #define REL_GOT R_PPC64_GLOB_DAT | 15 | #define REL_GOT R_PPC64_GLOB_DAT |
| 15 | #define REL_PLT R_PPC64_JMP_SLOT | 16 | #define REL_PLT R_PPC64_JMP_SLOT |
| 16 | #define REL_RELATIVE R_PPC64_RELATIVE | 17 | #define REL_RELATIVE R_PPC64_RELATIVE |
lib/libc/musl/arch/powerpc64/syscall_arch.h+3| ... | @@ -85,3 +85,6 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo | ... | @@ -85,3 +85,6 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo |
| 85 | 	:: "memory", "cr0", "r9", "r10", "r11", "r12"); | 85 | 	:: "memory", "cr0", "r9", "r10", "r11", "r12"); |
| 86 | 	return r3; | 86 | 	return r3; |
| 87 | } | 87 | } |
| 88 | |||
| 89 | #define SO_RCVTIMEO_OLD 18 | ||
| 90 | #define SO_SNDTIMEO_OLD 19 |
lib/libc/musl/arch/riscv64/atomic_arch.h+2-2| ... | @@ -14,7 +14,7 @@ static inline int a_cas(volatile int *p, int t, int s) | ... | @@ -14,7 +14,7 @@ static inline int a_cas(volatile int *p, int t, int s) |
| 14 | 		"	sc.w.aqrl %1, %4, (%2)\n" | 14 | 		"	sc.w.aqrl %1, %4, (%2)\n" |
| 15 | 		"	bnez %1, 1b\n" | 15 | 		"	bnez %1, 1b\n" |
| 16 | 		"1:" | 16 | 		"1:" |
| 17 | 		: "=&r"(old), "=r"(tmp) | 17 | 		: "=&r"(old), "=&r"(tmp) |
| 18 | 		: "r"(p), "r"(t), "r"(s) | 18 | 		: "r"(p), "r"(t), "r"(s) |
| 19 | 		: "memory"); | 19 | 		: "memory"); |
| 20 | 	return old; | 20 | 	return old; |
| ... | @@ -31,7 +31,7 @@ static inline void *a_cas_p(volatile void *p, void *t, void *s) | ... | @@ -31,7 +31,7 @@ static inline void *a_cas_p(volatile void *p, void *t, void *s) |
| 31 | 		"	sc.d.aqrl %1, %4, (%2)\n" | 31 | 		"	sc.d.aqrl %1, %4, (%2)\n" |
| 32 | 		"	bnez %1, 1b\n" | 32 | 		"	bnez %1, 1b\n" |
| 33 | 		"1:" | 33 | 		"1:" |
| 34 | 		: "=&r"(old), "=r"(tmp) | 34 | 		: "=&r"(old), "=&r"(tmp) |
| 35 | 		: "r"(p), "r"(t), "r"(s) | 35 | 		: "r"(p), "r"(t), "r"(s) |
| 36 | 		: "memory"); | 36 | 		: "memory"); |
| 37 | 	return old; | 37 | 	return old; |
lib/libc/musl/arch/riscv64/bits/ipc.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct ipc_perm { | ||
| 2 | 	key_t __ipc_perm_key; | ||
| 3 | 	uid_t uid; | ||
| 4 | 	gid_t gid; | ||
| 5 | 	uid_t cuid; | ||
| 6 | 	gid_t cgid; | ||
| 7 | 	mode_t mode; | ||
| 8 | 	unsigned short __ipc_perm_seq; | ||
| 9 | |||
| 10 | 	unsigned long __pad1; | ||
| 11 | 	unsigned long __pad2; | ||
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0 | ||
lib/libc/musl/arch/riscv64/bits/msg.h deleted-13| ... | @@ -1,13 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __pad1; | ||
| 12 | 	unsigned long __pad2; | ||
| 13 | }; | ||
lib/libc/musl/arch/riscv64/bits/sem.h deleted-9| ... | @@ -1,9 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | 	unsigned short sem_nsems; | ||
| 6 | 	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; | ||
| 7 | 	time_t __unused3; | ||
| 8 | 	time_t __unused4; | ||
| 9 | }; | ||
lib/libc/musl/arch/riscv64/bits/shm.h deleted-25| ... | @@ -1,25 +0,0 @@ | ||
| 1 | #define SHMLBA 4096 | ||
| 2 | |||
| 3 | struct shmid_ds | ||
| 4 | { | ||
| 5 | 	struct ipc_perm shm_perm; | ||
| 6 | 	size_t shm_segsz; | ||
| 7 | 	time_t shm_atime; | ||
| 8 | 	time_t shm_dtime; | ||
| 9 | 	time_t shm_ctime; | ||
| 10 | 	pid_t shm_cpid; | ||
| 11 | 	pid_t shm_lpid; | ||
| 12 | 	unsigned long shm_nattch; | ||
| 13 | 	unsigned long __pad1; | ||
| 14 | 	unsigned long __pad2; | ||
| 15 | }; | ||
| 16 | |||
| 17 | struct shminfo { | ||
| 18 | 	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; | ||
| 19 | }; | ||
| 20 | |||
| 21 | struct shm_info { | ||
| 22 | 	int __used_ids; | ||
| 23 | 	unsigned long shm_tot, shm_rss, shm_swp; | ||
| 24 | 	unsigned long __swap_attempts, __swap_successes; | ||
| 25 | }; | ||
lib/libc/musl/arch/riscv64/bits/signal.h+27-30| ... | @@ -6,46 +6,43 @@ | ... | @@ -6,46 +6,43 @@ |
| 6 | # define SIGSTKSZ 8192 | 6 | # define SIGSTKSZ 8192 |
| 7 | #endif | 7 | #endif |
| 8 | 8 | ||
| 9 | /* gregs[0] holds the program counter. */ | 9 | typedef unsigned long __riscv_mc_gp_state[32]; |
| 10 | 10 | ||
| 11 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | 11 | struct __riscv_mc_f_ext_state { |
| 12 | typedef unsigned long greg_t; | 12 | 	unsigned int __f[32]; |
| 13 | typedef unsigned long gregset_t[32]; | 13 | 	unsigned int __fcsr; |
| 14 | |||
| 15 | struct __riscv_f_ext_state { | ||
| 16 | 	unsigned int f[32]; | ||
| 17 | 	unsigned int fcsr; | ||
| 18 | }; | 14 | }; |
| 19 | 15 | ||
| 20 | struct __riscv_d_ext_state { | 16 | struct __riscv_mc_d_ext_state { |
| 21 | 	unsigned long long f[32]; | 17 | 	unsigned long long __f[32]; |
| 22 | 	unsigned int fcsr; | 18 | 	unsigned int __fcsr; |
| 23 | }; | 19 | }; |
| 24 | 20 | ||
| 25 | struct __riscv_q_ext_state { | 21 | struct __riscv_mc_q_ext_state { |
| 26 | 	unsigned long long f[64] __attribute__((aligned(16))); | 22 | 	unsigned long long __f[64] __attribute__((aligned(16))); |
| 27 | 	unsigned int fcsr; | 23 | 	unsigned int __fcsr; |
| 28 | 	unsigned int reserved[3]; | 24 | 	unsigned int __reserved[3]; |
| 29 | }; | 25 | }; |
| 30 | 26 | ||
| 31 | union __riscv_fp_state { | 27 | union __riscv_mc_fp_state { |
| 32 | 	struct __riscv_f_ext_state f; | 28 | 	struct __riscv_mc_f_ext_state __f; |
| 33 | 	struct __riscv_d_ext_state d; | 29 | 	struct __riscv_mc_d_ext_state __d; |
| 34 | 	struct __riscv_q_ext_state q; | 30 | 	struct __riscv_mc_q_ext_state __q; |
| 35 | }; | 31 | }; |
| 36 | 32 | ||
| 37 | typedef union __riscv_fp_state fpregset_t; | 33 | typedef struct mcontext_t { |
| 34 | 	__riscv_mc_gp_state __gregs; | ||
| 35 | 	union __riscv_mc_fp_state __fpregs; | ||
| 36 | } mcontext_t; | ||
| 38 | 37 | ||
| 39 | typedef struct sigcontext { | 38 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
| 39 | typedef unsigned long greg_t; | ||
| 40 | typedef unsigned long gregset_t[32]; | ||
| 41 | typedef union __riscv_mc_fp_state fpregset_t; | ||
| 42 | struct sigcontext { | ||
| 40 | 	gregset_t gregs; | 43 | 	gregset_t gregs; |
| 41 | 	fpregset_t fpregs; | 44 | 	fpregset_t fpregs; |
| 42 | } mcontext_t; | 45 | }; |
| 43 | |||
| 44 | #else | ||
| 45 | typedef struct { | ||
| 46 | 	unsigned long gregs[32]; | ||
| 47 | 	unsigned long long fpregs[66]; | ||
| 48 | } mcontext_t; | ||
| 49 | #endif | 46 | #endif |
| 50 | 47 | ||
| 51 | struct sigaltstack { | 48 | struct sigaltstack { |
| ... | @@ -54,10 +51,10 @@ struct sigaltstack { | ... | @@ -54,10 +51,10 @@ struct sigaltstack { |
| 54 | 	size_t ss_size; | 51 | 	size_t ss_size; |
| 55 | }; | 52 | }; |
| 56 | 53 | ||
| 57 | typedef struct __ucontext | 54 | typedef struct ucontext_t |
| 58 | { | 55 | { |
| 59 | 	unsigned long uc_flags; | 56 | 	unsigned long uc_flags; |
| 60 | 	struct __ucontext *uc_link; | 57 | 	struct ucontext_t *uc_link; |
| 61 | 	stack_t uc_stack; | 58 | 	stack_t uc_stack; |
| 62 | 	sigset_t uc_sigmask; | 59 | 	sigset_t uc_sigmask; |
| 63 | 	mcontext_t uc_mcontext; | 60 | 	mcontext_t uc_mcontext; |
lib/libc/musl/arch/riscv64/bits/syscall.h.in+15| ... | @@ -273,5 +273,20 @@ | ... | @@ -273,5 +273,20 @@ |
| 273 | #define __NR_pkey_mprotect 288 | 273 | #define __NR_pkey_mprotect 288 |
| 274 | #define __NR_pkey_alloc 289 | 274 | #define __NR_pkey_alloc 289 |
| 275 | #define __NR_pkey_free 290 | 275 | #define __NR_pkey_free 290 |
| 276 | #define __NR_statx 291 | ||
| 277 | #define __NR_io_pgetevents 292 | ||
| 278 | #define __NR_rseq 293 | ||
| 279 | #define __NR_kexec_file_load 294 | ||
| 280 | #define __NR_pidfd_send_signal 424 | ||
| 281 | #define __NR_io_uring_setup 425 | ||
| 282 | #define __NR_io_uring_enter 426 | ||
| 283 | #define __NR_io_uring_register 427 | ||
| 284 | #define __NR_open_tree		428 | ||
| 285 | #define __NR_move_mount		429 | ||
| 286 | #define __NR_fsopen		430 | ||
| 287 | #define __NR_fsconfig		431 | ||
| 288 | #define __NR_fsmount		432 | ||
| 289 | #define __NR_fspick		433 | ||
| 290 | |||
| 276 | #define __NR_sysriscv __NR_arch_specific_syscall | 291 | #define __NR_sysriscv __NR_arch_specific_syscall |
| 277 | #define __NR_riscv_flush_icache (__NR_sysriscv + 15) | 292 | #define __NR_riscv_flush_icache (__NR_sysriscv + 15) |
lib/libc/musl/arch/riscv64/bits/user.h+2-40| ... | @@ -1,43 +1,5 @@ | ... | @@ -1,43 +1,5 @@ |
| 1 | struct user_regs_struct { | 1 | #include <signal.h> |
| 2 | 	unsigned long pc; | ||
| 3 | 	unsigned long ra; | ||
| 4 | 	unsigned long sp; | ||
| 5 | 	unsigned long gp; | ||
| 6 | 	unsigned long tp; | ||
| 7 | 	unsigned long t0; | ||
| 8 | 	unsigned long t1; | ||
| 9 | 	unsigned long t2; | ||
| 10 | 	unsigned long s0; | ||
| 11 | 	unsigned long s1; | ||
| 12 | 	unsigned long a0; | ||
| 13 | 	unsigned long a1; | ||
| 14 | 	unsigned long a2; | ||
| 15 | 	unsigned long a3; | ||
| 16 | 	unsigned long a4; | ||
| 17 | 	unsigned long a5; | ||
| 18 | 	unsigned long a6; | ||
| 19 | 	unsigned long a7; | ||
| 20 | 	unsigned long s2; | ||
| 21 | 	unsigned long s3; | ||
| 22 | 	unsigned long s4; | ||
| 23 | 	unsigned long s5; | ||
| 24 | 	unsigned long s6; | ||
| 25 | 	unsigned long s7; | ||
| 26 | 	unsigned long s8; | ||
| 27 | 	unsigned long s9; | ||
| 28 | 	unsigned long s10; | ||
| 29 | 	unsigned long s11; | ||
| 30 | 	unsigned long t3; | ||
| 31 | 	unsigned long t4; | ||
| 32 | 	unsigned long t5; | ||
| 33 | 	unsigned long t6; | ||
| 34 | }; | ||
| 35 | |||
| 36 | struct user_fpregs_struct { | ||
| 37 | 	double f[32]; | ||
| 38 | 	unsigned int fcsr; | ||
| 39 | }; | ||
| 40 | 2 | ||
| 41 | #define ELF_NGREG 32 | 3 | #define ELF_NGREG 32 |
| 42 | typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; | 4 | typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG]; |
| 43 | typedef struct user_fpregs_struct elf_fpregset_t; | 5 | typedef union __riscv_mc_fp_state elf_fpregset_t; |
lib/libc/musl/arch/riscv64/kstat.h created+21| ... | @@ -0,0 +1,21 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	ino_t st_ino; | ||
| 4 | 	mode_t st_mode; | ||
| 5 | 	nlink_t st_nlink; | ||
| 6 | 	uid_t st_uid; | ||
| 7 | 	gid_t st_gid; | ||
| 8 | 	dev_t st_rdev; | ||
| 9 | 	unsigned long __pad; | ||
| 10 | 	off_t st_size; | ||
| 11 | 	blksize_t st_blksize; | ||
| 12 | 	int __pad2; | ||
| 13 | 	blkcnt_t st_blocks; | ||
| 14 | 	long st_atime_sec; | ||
| 15 | 	long st_atime_nsec; | ||
| 16 | 	long st_mtime_sec; | ||
| 17 | 	long st_mtime_nsec; | ||
| 18 | 	long st_ctime_sec; | ||
| 19 | 	long st_ctime_nsec; | ||
| 20 | 	unsigned __unused[2]; | ||
| 21 | }; | ||
lib/libc/musl/arch/riscv64/pthread_arch.h+1-1| ... | @@ -11,4 +11,4 @@ static inline struct pthread *__pthread_self() | ... | @@ -11,4 +11,4 @@ static inline struct pthread *__pthread_self() |
| 11 | 11 | ||
| 12 | #define DTP_OFFSET 0x800 | 12 | #define DTP_OFFSET 0x800 |
| 13 | 13 | ||
| 14 | #define MC_PC gregs[0] | 14 | #define MC_PC __gregs[0] |
lib/libc/musl/arch/riscv64/syscall_arch.h+2| ... | @@ -74,3 +74,5 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo | ... | @@ -74,3 +74,5 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo |
| 74 | /* We don't have a clock_gettime function. | 74 | /* We don't have a clock_gettime function. |
| 75 | #define VDSO_CGT_SYM "__vdso_clock_gettime" | 75 | #define VDSO_CGT_SYM "__vdso_clock_gettime" |
| 76 | #define VDSO_CGT_VER "LINUX_2.6" */ | 76 | #define VDSO_CGT_VER "LINUX_2.6" */ |
| 77 | |||
| 78 | #define IPC_64 0 |
lib/libc/musl/arch/s390x/bits/ipc.h deleted-14| ... | @@ -1,14 +0,0 @@ | ||
| 1 | struct ipc_perm { | ||
| 2 | 	key_t __ipc_perm_key; | ||
| 3 | 	uid_t uid; | ||
| 4 | 	gid_t gid; | ||
| 5 | 	uid_t cuid; | ||
| 6 | 	gid_t cgid; | ||
| 7 | 	mode_t mode; | ||
| 8 | 	unsigned short __pad1; | ||
| 9 | 	unsigned short __ipc_perm_seq; | ||
| 10 | 	unsigned long __pad2; | ||
| 11 | 	unsigned long __pad3; | ||
| 12 | }; | ||
| 13 | |||
| 14 | #define IPC_64 0x100 | ||
lib/libc/musl/arch/s390x/bits/msg.h deleted-12| ... | @@ -1,12 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __unused[2]; | ||
| 12 | }; | ||
lib/libc/musl/arch/s390x/bits/sem.h deleted-7| ... | @@ -1,7 +0,0 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	time_t sem_ctime; | ||
| 5 | 	unsigned short __pad[3], sem_nsems; | ||
| 6 | 	unsigned long __unused[2]; | ||
| 7 | }; | ||
lib/libc/musl/arch/s390x/bits/shm.h deleted-25| ... | @@ -1,25 +0,0 @@ | ||
| 1 | #define SHMLBA 4096 | ||
| 2 | |||
| 3 | struct shmid_ds { | ||
| 4 | 	struct ipc_perm shm_perm; | ||
| 5 | 	size_t shm_segsz; | ||
| 6 | 	time_t shm_atime; | ||
| 7 | 	time_t shm_dtime; | ||
| 8 | 	time_t shm_ctime; | ||
| 9 | 	pid_t shm_cpid; | ||
| 10 | 	pid_t shm_lpid; | ||
| 11 | 	unsigned long shm_nattch; | ||
| 12 | 	unsigned long __pad1; | ||
| 13 | 	unsigned long __pad2; | ||
| 14 | }; | ||
| 15 | |||
| 16 | struct shminfo { | ||
| 17 | 	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; | ||
| 18 | }; | ||
| 19 | |||
| 20 | struct shm_info { | ||
| 21 | 	int __used_ids; | ||
| 22 | 	unsigned long shm_tot, shm_rss, shm_swp; | ||
| 23 | 	unsigned long __swap_attempts, __swap_successes; | ||
| 24 | }; | ||
| 25 | |||
lib/libc/musl/arch/s390x/bits/syscall.h.in+6| ... | @@ -344,4 +344,10 @@ | ... | @@ -344,4 +344,10 @@ |
| 344 | #define __NR_io_uring_setup 425 | 344 | #define __NR_io_uring_setup 425 |
| 345 | #define __NR_io_uring_enter 426 | 345 | #define __NR_io_uring_enter 426 |
| 346 | #define __NR_io_uring_register 427 | 346 | #define __NR_io_uring_register 427 |
| 347 | #define __NR_open_tree		428 | ||
| 348 | #define __NR_move_mount		429 | ||
| 349 | #define __NR_fsopen		430 | ||
| 350 | #define __NR_fsconfig		431 | ||
| 351 | #define __NR_fsmount		432 | ||
| 352 | #define __NR_fspick		433 | ||
| 347 | 353 |
lib/libc/musl/arch/s390x/kstat.h created+19| ... | @@ -0,0 +1,19 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	ino_t st_ino; | ||
| 4 | 	nlink_t st_nlink; | ||
| 5 | 	mode_t st_mode; | ||
| 6 | 	uid_t st_uid; | ||
| 7 | 	gid_t st_gid; | ||
| 8 | 	dev_t st_rdev; | ||
| 9 | 	off_t st_size; | ||
| 10 | 	long st_atime_sec; | ||
| 11 | 	long st_atime_nsec; | ||
| 12 | 	long st_mtime_sec; | ||
| 13 | 	long st_mtime_nsec; | ||
| 14 | 	long st_ctime_sec; | ||
| 15 | 	long st_ctime_nsec; | ||
| 16 | 	blksize_t st_blksize; | ||
| 17 | 	blkcnt_t st_blocks; | ||
| 18 | 	unsigned long __unused[3]; | ||
| 19 | }; | ||
lib/libc/musl/arch/x86_64/bits/ipc.h deleted-13| ... | @@ -1,13 +0,0 @@ | ||
| 1 | struct ipc_perm { | ||
| 2 | 	key_t __ipc_perm_key; | ||
| 3 | 	uid_t uid; | ||
| 4 | 	gid_t gid; | ||
| 5 | 	uid_t cuid; | ||
| 6 | 	gid_t cgid; | ||
| 7 | 	mode_t mode; | ||
| 8 | 	int __ipc_perm_seq; | ||
| 9 | 	long __pad1; | ||
| 10 | 	long __pad2; | ||
| 11 | }; | ||
| 12 | |||
| 13 | #define IPC_64 0 | ||
lib/libc/musl/arch/x86_64/bits/msg.h deleted-12| ... | @@ -1,12 +0,0 @@ | ||
| 1 | struct msqid_ds { | ||
| 2 | 	struct ipc_perm msg_perm; | ||
| 3 | 	time_t msg_stime; | ||
| 4 | 	time_t msg_rtime; | ||
| 5 | 	time_t msg_ctime; | ||
| 6 | 	unsigned long msg_cbytes; | ||
| 7 | 	msgqnum_t msg_qnum; | ||
| 8 | 	msglen_t msg_qbytes; | ||
| 9 | 	pid_t msg_lspid; | ||
| 10 | 	pid_t msg_lrpid; | ||
| 11 | 	unsigned long __unused[2]; | ||
| 12 | }; | ||
lib/libc/musl/arch/x86_64/bits/sem.h created+11| ... | @@ -0,0 +1,11 @@ | ||
| 1 | struct semid_ds { | ||
| 2 | 	struct ipc_perm sem_perm; | ||
| 3 | 	time_t sem_otime; | ||
| 4 | 	long __unused1; | ||
| 5 | 	time_t sem_ctime; | ||
| 6 | 	long __unused2; | ||
| 7 | 	unsigned short sem_nsems; | ||
| 8 | 	char __sem_nsems_pad[sizeof(long)-sizeof(short)]; | ||
| 9 | 	long __unused3; | ||
| 10 | 	long __unused4; | ||
| 11 | }; | ||
lib/libc/musl/arch/x86_64/bits/shm.h deleted-25| ... | @@ -1,25 +0,0 @@ | ||
| 1 | #define SHMLBA 4096 | ||
| 2 | |||
| 3 | struct shmid_ds { | ||
| 4 | 	struct ipc_perm shm_perm; | ||
| 5 | 	size_t shm_segsz; | ||
| 6 | 	time_t shm_atime; | ||
| 7 | 	time_t shm_dtime; | ||
| 8 | 	time_t shm_ctime; | ||
| 9 | 	pid_t shm_cpid; | ||
| 10 | 	pid_t shm_lpid; | ||
| 11 | 	unsigned long shm_nattch; | ||
| 12 | 	unsigned long __pad1; | ||
| 13 | 	unsigned long __pad2; | ||
| 14 | }; | ||
| 15 | |||
| 16 | struct shminfo { | ||
| 17 | 	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; | ||
| 18 | }; | ||
| 19 | |||
| 20 | struct shm_info { | ||
| 21 | 	int __used_ids; | ||
| 22 | 	unsigned long shm_tot, shm_rss, shm_swp; | ||
| 23 | 	unsigned long __swap_attempts, __swap_successes; | ||
| 24 | }; | ||
| 25 | |||
lib/libc/musl/arch/x86_64/bits/syscall.h.in+6| ... | @@ -337,4 +337,10 @@ | ... | @@ -337,4 +337,10 @@ |
| 337 | #define __NR_io_uring_setup			425 | 337 | #define __NR_io_uring_setup			425 |
| 338 | #define __NR_io_uring_enter			426 | 338 | #define __NR_io_uring_enter			426 |
| 339 | #define __NR_io_uring_register			427 | 339 | #define __NR_io_uring_register			427 |
| 340 | #define __NR_open_tree		428 | ||
| 341 | #define __NR_move_mount		429 | ||
| 342 | #define __NR_fsopen		430 | ||
| 343 | #define __NR_fsconfig		431 | ||
| 344 | #define __NR_fsmount		432 | ||
| 345 | #define __NR_fspick		433 | ||
| 340 | 346 |
lib/libc/musl/arch/x86_64/kstat.h created+22| ... | @@ -0,0 +1,22 @@ | ||
| 1 | struct kstat { | ||
| 2 | 	dev_t st_dev; | ||
| 3 | 	ino_t st_ino; | ||
| 4 | 	nlink_t st_nlink; | ||
| 5 | |||
| 6 | 	mode_t st_mode; | ||
| 7 | 	uid_t st_uid; | ||
| 8 | 	gid_t st_gid; | ||
| 9 | 	unsigned int __pad0; | ||
| 10 | 	dev_t st_rdev; | ||
| 11 | 	off_t st_size; | ||
| 12 | 	blksize_t st_blksize; | ||
| 13 | 	blkcnt_t st_blocks; | ||
| 14 | |||
| 15 | 	long st_atime_sec; | ||
| 16 | 	long st_atime_nsec; | ||
| 17 | 	long st_mtime_sec; | ||
| 18 | 	long st_mtime_nsec; | ||
| 19 | 	long st_ctime_sec; | ||
| 20 | 	long st_ctime_nsec; | ||
| 21 | 	long __unused[3]; | ||
| 22 | }; | ||
lib/libc/musl/arch/x86_64/syscall_arch.h+2| ... | @@ -66,3 +66,5 @@ static __inline long __syscall6(long n, long a1, long a2, long a3, long a4, long | ... | @@ -66,3 +66,5 @@ static __inline long __syscall6(long n, long a1, long a2, long a3, long a4, long |
| 66 | #define VDSO_CGT_VER "LINUX_2.6" | 66 | #define VDSO_CGT_VER "LINUX_2.6" |
| 67 | #define VDSO_GETCPU_SYM "__vdso_getcpu" | 67 | #define VDSO_GETCPU_SYM "__vdso_getcpu" |
| 68 | #define VDSO_GETCPU_VER "LINUX_2.6" | 68 | #define VDSO_GETCPU_VER "LINUX_2.6" |
| 69 | |||
| 70 | #define IPC_64 0 |
lib/libc/musl/include/fcntl.h+5| ... | @@ -100,6 +100,11 @@ int posix_fallocate(int, off_t, off_t); | ... | @@ -100,6 +100,11 @@ int posix_fallocate(int, off_t, off_t); |
| 100 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | 100 | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
| 101 | #define AT_NO_AUTOMOUNT 0x800 | 101 | #define AT_NO_AUTOMOUNT 0x800 |
| 102 | #define AT_EMPTY_PATH 0x1000 | 102 | #define AT_EMPTY_PATH 0x1000 |
| 103 | #define AT_STATX_SYNC_TYPE 0x6000 | ||
| 104 | #define AT_STATX_SYNC_AS_STAT 0x0000 | ||
| 105 | #define AT_STATX_FORCE_SYNC 0x2000 | ||
| 106 | #define AT_STATX_DONT_SYNC 0x4000 | ||
| 107 | #define AT_RECURSIVE 0x8000 | ||
| 103 | 108 | ||
| 104 | #define FAPPEND O_APPEND | 109 | #define FAPPEND O_APPEND |
| 105 | #define FFSYNC O_SYNC | 110 | #define FFSYNC O_SYNC |
lib/libc/musl/include/glob.h+3| ... | @@ -31,6 +31,9 @@ void globfree(glob_t *); | ... | @@ -31,6 +31,9 @@ void globfree(glob_t *); |
| 31 | #define GLOB_NOESCAPE 0x40 | 31 | #define GLOB_NOESCAPE 0x40 |
| 32 | #define	GLOB_PERIOD 0x80 | 32 | #define	GLOB_PERIOD 0x80 |
| 33 | 33 | ||
| 34 | #define GLOB_TILDE 0x1000 | ||
| 35 | #define GLOB_TILDE_CHECK 0x4000 | ||
| 36 | |||
| 34 | #define GLOB_NOSPACE 1 | 37 | #define GLOB_NOSPACE 1 |
| 35 | #define GLOB_ABORTED 2 | 38 | #define GLOB_ABORTED 2 |
| 36 | #define GLOB_NOMATCH 3 | 39 | #define GLOB_NOMATCH 3 |
lib/libc/musl/include/netinet/if_ether.h+1| ... | @@ -76,6 +76,7 @@ | ... | @@ -76,6 +76,7 @@ |
| 76 | #define ETH_P_QINQ2	0x9200 | 76 | #define ETH_P_QINQ2	0x9200 |
| 77 | #define ETH_P_QINQ3	0x9300 | 77 | #define ETH_P_QINQ3	0x9300 |
| 78 | #define ETH_P_EDSA	0xDADA | 78 | #define ETH_P_EDSA	0xDADA |
| 79 | #define ETH_P_DSA_8021Q	0xDADB | ||
| 79 | #define ETH_P_IFE	0xED3E | 80 | #define ETH_P_IFE	0xED3E |
| 80 | #define ETH_P_AF_IUCV	0xFBFB | 81 | #define ETH_P_AF_IUCV	0xFBFB |
| 81 | 82 |
lib/libc/musl/include/sched.h+7-4| ... | @@ -18,10 +18,12 @@ extern "C" { | ... | @@ -18,10 +18,12 @@ extern "C" { |
| 18 | 18 | ||
| 19 | struct sched_param { | 19 | struct sched_param { |
| 20 | 	int sched_priority; | 20 | 	int sched_priority; |
| 21 | 	int sched_ss_low_priority; | 21 | 	int __reserved1; |
| 22 | 	struct timespec sched_ss_repl_period; | 22 | 	struct { |
| 23 | 	struct timespec sched_ss_init_budget; | 23 | 		time_t __reserved1; |
| 24 | 	int sched_ss_max_repl; | 24 | 		long __reserved2; |
| 25 | 	} __reserved2[2]; | ||
| 26 | 	int __reserved3; | ||
| 25 | }; | 27 | }; |
| 26 | 28 | ||
| 27 | int sched_get_priority_max(int); | 29 | int sched_get_priority_max(int); |
| ... | @@ -47,6 +49,7 @@ int sched_yield(void); | ... | @@ -47,6 +49,7 @@ int sched_yield(void); |
| 47 | #define CLONE_FS	0x00000200 | 49 | #define CLONE_FS	0x00000200 |
| 48 | #define CLONE_FILES	0x00000400 | 50 | #define CLONE_FILES	0x00000400 |
| 49 | #define CLONE_SIGHAND	0x00000800 | 51 | #define CLONE_SIGHAND	0x00000800 |
| 52 | #define CLONE_PIDFD	0x00001000 | ||
| 50 | #define CLONE_PTRACE	0x00002000 | 53 | #define CLONE_PTRACE	0x00002000 |
| 51 | #define CLONE_VFORK	0x00004000 | 54 | #define CLONE_VFORK	0x00004000 |
| 52 | #define CLONE_PARENT	0x00008000 | 55 | #define CLONE_PARENT	0x00008000 |
lib/libc/musl/include/spawn.h+5| ... | @@ -71,6 +71,11 @@ int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t *__restrict, int | ... | @@ -71,6 +71,11 @@ int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t *__restrict, int |
| 71 | int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *, int); | 71 | int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *, int); |
| 72 | int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *, int, int); | 72 | int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *, int, int); |
| 73 | 73 | ||
| 74 | #if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) | ||
| 75 | int posix_spawn_file_actions_addchdir_np(posix_spawn_file_actions_t *__restrict, const char *__restrict); | ||
| 76 | int posix_spawn_file_actions_addfchdir_np(posix_spawn_file_actions_t *, int); | ||
| 77 | #endif | ||
| 78 | |||
| 74 | #ifdef __cplusplus | 79 | #ifdef __cplusplus |
| 75 | } | 80 | } |
| 76 | #endif | 81 | #endif |
lib/libc/musl/include/stdlib.h+1| ... | @@ -152,6 +152,7 @@ int ptsname_r(int, char *, size_t); | ... | @@ -152,6 +152,7 @@ int ptsname_r(int, char *, size_t); |
| 152 | char *ecvt(double, int, int *, int *); | 152 | char *ecvt(double, int, int *, int *); |
| 153 | char *fcvt(double, int, int *, int *); | 153 | char *fcvt(double, int, int *, int *); |
| 154 | char *gcvt(double, int, char *); | 154 | char *gcvt(double, int, char *); |
| 155 | char *secure_getenv(const char *); | ||
| 155 | struct __locale_struct; | 156 | struct __locale_struct; |
| 156 | float strtof_l(const char *__restrict, char **__restrict, struct __locale_struct *); | 157 | float strtof_l(const char *__restrict, char **__restrict, struct __locale_struct *); |
| 157 | double strtod_l(const char *__restrict, char **__restrict, struct __locale_struct *); | 158 | double strtod_l(const char *__restrict, char **__restrict, struct __locale_struct *); |
lib/libc/musl/include/sys/ipc.h+1-1| ... | @@ -22,6 +22,7 @@ extern "C" { | ... | @@ -22,6 +22,7 @@ extern "C" { |
| 22 | #endif | 22 | #endif |
| 23 | 23 | ||
| 24 | #include <bits/ipc.h> | 24 | #include <bits/ipc.h> |
| 25 | #include <bits/ipcstat.h> | ||
| 25 | 26 | ||
| 26 | #define IPC_CREAT 01000 | 27 | #define IPC_CREAT 01000 |
| 27 | #define IPC_EXCL 02000 | 28 | #define IPC_EXCL 02000 |
| ... | @@ -29,7 +30,6 @@ extern "C" { | ... | @@ -29,7 +30,6 @@ extern "C" { |
| 29 | 30 | ||
| 30 | #define IPC_RMID 0 | 31 | #define IPC_RMID 0 |
| 31 | #define IPC_SET 1 | 32 | #define IPC_SET 1 |
| 32 | #define IPC_STAT 2 | ||
| 33 | #define IPC_INFO 3 | 33 | #define IPC_INFO 3 |
| 34 | 34 | ||
| 35 | #define IPC_PRIVATE ((key_t) 0) | 35 | #define IPC_PRIVATE ((key_t) 0) |
lib/libc/musl/include/sys/msg.h+2-2| ... | @@ -25,9 +25,9 @@ typedef unsigned long msglen_t; | ... | @@ -25,9 +25,9 @@ typedef unsigned long msglen_t; |
| 25 | #define MSG_NOERROR 010000 | 25 | #define MSG_NOERROR 010000 |
| 26 | #define MSG_EXCEPT 020000 | 26 | #define MSG_EXCEPT 020000 |
| 27 | 27 | ||
| 28 | #define MSG_STAT 11 | 28 | #define MSG_STAT (11 | (IPC_STAT & 0x100)) |
| 29 | #define MSG_INFO 12 | 29 | #define MSG_INFO 12 |
| 30 | #define MSG_STAT_ANY 13 | 30 | #define MSG_STAT_ANY (13 | (IPC_STAT & 0x100)) |
| 31 | 31 | ||
| 32 | struct msginfo { | 32 | struct msginfo { |
| 33 | 	int msgpool, msgmap, msgmax, msgmnb, msgmni, msgssz, msgtql; | 33 | 	int msgpool, msgmap, msgmax, msgmnb, msgmni, msgssz, msgtql; |
lib/libc/musl/include/sys/sem.h+2-2| ... | @@ -31,9 +31,9 @@ extern "C" { | ... | @@ -31,9 +31,9 @@ extern "C" { |
| 31 | 31 | ||
| 32 | #define _SEM_SEMUN_UNDEFINED 1 | 32 | #define _SEM_SEMUN_UNDEFINED 1 |
| 33 | 33 | ||
| 34 | #define SEM_STAT 18 | 34 | #define SEM_STAT (18 | (IPC_STAT & 0x100)) |
| 35 | #define SEM_INFO 19 | 35 | #define SEM_INFO 19 |
| 36 | #define SEM_STAT_ANY 20 | 36 | #define SEM_STAT_ANY (20 | (IPC_STAT & 0x100)) |
| 37 | 37 | ||
| 38 | struct seminfo { | 38 | struct seminfo { |
| 39 | 	int semmap; | 39 | 	int semmap; |
lib/libc/musl/include/sys/shm.h+2-2| ... | @@ -33,9 +33,9 @@ extern "C" { | ... | @@ -33,9 +33,9 @@ extern "C" { |
| 33 | 33 | ||
| 34 | #define SHM_LOCK 11 | 34 | #define SHM_LOCK 11 |
| 35 | #define SHM_UNLOCK 12 | 35 | #define SHM_UNLOCK 12 |
| 36 | #define SHM_STAT 13 | 36 | #define SHM_STAT (13 | (IPC_STAT & 0x100)) |
| 37 | #define SHM_INFO 14 | 37 | #define SHM_INFO 14 |
| 38 | #define SHM_STAT_ANY 15 | 38 | #define SHM_STAT_ANY (15 | (IPC_STAT & 0x100)) |
| 39 | #define SHM_DEST 01000 | 39 | #define SHM_DEST 01000 |
| 40 | #define SHM_LOCKED 02000 | 40 | #define SHM_LOCKED 02000 |
| 41 | #define SHM_HUGETLB 04000 | 41 | #define SHM_HUGETLB 04000 |
lib/libc/musl/include/unistd.h+2| ... | @@ -176,6 +176,7 @@ long syscall(long, ...); | ... | @@ -176,6 +176,7 @@ long syscall(long, ...); |
| 176 | int execvpe(const char *, char *const [], char *const []); | 176 | int execvpe(const char *, char *const [], char *const []); |
| 177 | int issetugid(void); | 177 | int issetugid(void); |
| 178 | int getentropy(void *, size_t); | 178 | int getentropy(void *, size_t); |
| 179 | extern int optreset; | ||
| 179 | #endif | 180 | #endif |
| 180 | 181 | ||
| 181 | #ifdef _GNU_SOURCE | 182 | #ifdef _GNU_SOURCE |
| ... | @@ -188,6 +189,7 @@ char *get_current_dir_name(void); | ... | @@ -188,6 +189,7 @@ char *get_current_dir_name(void); |
| 188 | int syncfs(int); | 189 | int syncfs(int); |
| 189 | int euidaccess(const char *, int); | 190 | int euidaccess(const char *, int); |
| 190 | int eaccess(const char *, int); | 191 | int eaccess(const char *, int); |
| 192 | ssize_t copy_file_range(int, off_t *, int, off_t *, size_t, unsigned); | ||
| 191 | #endif | 193 | #endif |
| 192 | 194 | ||
| 193 | #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) | 195 | #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) |
lib/libc/musl/src/env/secure_getenv.c created+8| ... | @@ -0,0 +1,8 @@ | ||
| 1 | #define _GNU_SOURCE | ||
| 2 | #include <stdlib.h> | ||
| 3 | #include "libc.h" | ||
| 4 | |||
| 5 | char *secure_getenv(const char *name) | ||
| 6 | { | ||
| 7 | 	return libc.secure ? NULL : getenv(name); | ||
| 8 | } | ||
lib/libc/musl/src/include/time.h+1| ... | @@ -4,6 +4,7 @@ | ... | @@ -4,6 +4,7 @@ |
| 4 | #include "../../include/time.h" | 4 | #include "../../include/time.h" |
| 5 | 5 | ||
| 6 | hidden int __clock_gettime(clockid_t, struct timespec *); | 6 | hidden int __clock_gettime(clockid_t, struct timespec *); |
| 7 | hidden int __clock_nanosleep(clockid_t, int, const struct timespec *, struct timespec *); | ||
| 7 | 8 | ||
| 8 | hidden char *__asctime_r(const struct tm *, char *); | 9 | hidden char *__asctime_r(const struct tm *, char *); |
| 9 | hidden struct tm *__gmtime_r(const time_t *restrict, struct tm *restrict); | 10 | hidden struct tm *__gmtime_r(const time_t *restrict, struct tm *restrict); |
lib/libc/musl/src/include/unistd.h+1| ... | @@ -9,5 +9,6 @@ hidden int __dup3(int, int, int); | ... | @@ -9,5 +9,6 @@ hidden int __dup3(int, int, int); |
| 9 | hidden int __mkostemps(char *, int, int); | 9 | hidden int __mkostemps(char *, int, int); |
| 10 | hidden int __execvpe(const char *, char *const *, char *const *); | 10 | hidden int __execvpe(const char *, char *const *, char *const *); |
| 11 | hidden int __aio_close(int); | 11 | hidden int __aio_close(int); |
| 12 | hidden off_t __lseek(int, off_t, int); | ||
| 12 | 13 | ||
| 13 | #endif | 14 | #endif |
lib/libc/musl/src/internal/dynlink.h+1| ... | @@ -28,6 +28,7 @@ typedef Elf64_Sym Sym; | ... | @@ -28,6 +28,7 @@ typedef Elf64_Sym Sym; |
| 28 | enum { | 28 | enum { |
| 29 | 	REL_NONE = 0, | 29 | 	REL_NONE = 0, |
| 30 | 	REL_SYMBOLIC = -100, | 30 | 	REL_SYMBOLIC = -100, |
| 31 | 	REL_USYMBOLIC, | ||
| 31 | 	REL_GOT, | 32 | 	REL_GOT, |
| 32 | 	REL_PLT, | 33 | 	REL_PLT, |
| 33 | 	REL_RELATIVE, | 34 | 	REL_RELATIVE, |
lib/libc/musl/src/internal/pthread_impl.h-1| ... | @@ -125,7 +125,6 @@ struct __timer { | ... | @@ -125,7 +125,6 @@ struct __timer { |
| 125 | 	 0x80000000 }) | 125 | 	 0x80000000 }) |
| 126 | 126 | ||
| 127 | void *__tls_get_addr(tls_mod_off_t *); | 127 | void *__tls_get_addr(tls_mod_off_t *); |
| 128 | hidden void *__tls_get_new(tls_mod_off_t *); | ||
| 129 | hidden int __init_tp(void *); | 128 | hidden int __init_tp(void *); |
| 130 | hidden void *__copy_tls(unsigned char *); | 129 | hidden void *__copy_tls(unsigned char *); |
| 131 | hidden void __reset_tls(); | 130 | hidden void __reset_tls(); |
lib/libc/musl/src/internal/syscall.h+103-6| ... | @@ -43,8 +43,8 @@ hidden long __syscall_ret(unsigned long), | ... | @@ -43,8 +43,8 @@ hidden long __syscall_ret(unsigned long), |
| 43 | #define __syscall(...) __SYSCALL_DISP(__syscall,__VA_ARGS__) | 43 | #define __syscall(...) __SYSCALL_DISP(__syscall,__VA_ARGS__) |
| 44 | #define syscall(...) __syscall_ret(__syscall(__VA_ARGS__)) | 44 | #define syscall(...) __syscall_ret(__syscall(__VA_ARGS__)) |
| 45 | 45 | ||
| 46 | #define socketcall __socketcall | 46 | #define socketcall(nm,a,b,c,d,e,f) __syscall_ret(__socketcall(nm,a,b,c,d,e,f)) |
| 47 | #define socketcall_cp __socketcall_cp | 47 | #define socketcall_cp(nm,a,b,c,d,e,f) __syscall_ret(__socketcall_cp(nm,a,b,c,d,e,f)) |
| 48 | 48 | ||
| 49 | #define __syscall_cp0(n) (__syscall_cp)(n,0,0,0,0,0,0) | 49 | #define __syscall_cp0(n) (__syscall_cp)(n,0,0,0,0,0,0) |
| 50 | #define __syscall_cp1(n,a) (__syscall_cp)(n,__scc(a),0,0,0,0,0) | 50 | #define __syscall_cp1(n,a) (__syscall_cp)(n,__scc(a),0,0,0,0,0) |
| ... | @@ -58,12 +58,12 @@ hidden long __syscall_ret(unsigned long), | ... | @@ -58,12 +58,12 @@ hidden long __syscall_ret(unsigned long), |
| 58 | #define syscall_cp(...) __syscall_ret(__syscall_cp(__VA_ARGS__)) | 58 | #define syscall_cp(...) __syscall_ret(__syscall_cp(__VA_ARGS__)) |
| 59 | 59 | ||
| 60 | #ifndef SYSCALL_USE_SOCKETCALL | 60 | #ifndef SYSCALL_USE_SOCKETCALL |
| 61 | #define __socketcall(nm,a,b,c,d,e,f) syscall(SYS_##nm, a, b, c, d, e, f) | 61 | #define __socketcall(nm,a,b,c,d,e,f) __syscall(SYS_##nm, a, b, c, d, e, f) |
| 62 | #define __socketcall_cp(nm,a,b,c,d,e,f) syscall_cp(SYS_##nm, a, b, c, d, e, f) | 62 | #define __socketcall_cp(nm,a,b,c,d,e,f) __syscall_cp(SYS_##nm, a, b, c, d, e, f) |
| 63 | #else | 63 | #else |
| 64 | #define __socketcall(nm,a,b,c,d,e,f) syscall(SYS_socketcall, __SC_##nm, \ | 64 | #define __socketcall(nm,a,b,c,d,e,f) __syscall(SYS_socketcall, __SC_##nm, \ |
| 65 | ((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })) | 65 | ((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })) |
| 66 | #define __socketcall_cp(nm,a,b,c,d,e,f) syscall_cp(SYS_socketcall, __SC_##nm, \ | 66 | #define __socketcall_cp(nm,a,b,c,d,e,f) __syscall_cp(SYS_socketcall, __SC_##nm, \ |
| 67 | ((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })) | 67 | ((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f })) |
| 68 | #endif | 68 | #endif |
| 69 | 69 | ||
| ... | @@ -193,6 +193,89 @@ hidden long __syscall_ret(unsigned long), | ... | @@ -193,6 +193,89 @@ hidden long __syscall_ret(unsigned long), |
| 193 | #define SYS_sendfile SYS_sendfile64 | 193 | #define SYS_sendfile SYS_sendfile64 |
| 194 | #endif | 194 | #endif |
| 195 | 195 | ||
| 196 | |||
| 197 | /* Ensure that the plain syscall names are defined even for "time64-only" | ||
| 198 | * archs. These facilitate callers passing null time arguments, and make | ||
| 199 | * tests for establishing which to use/fallback-to more consistent when | ||
| 200 | * they do need to be called with time arguments. */ | ||
| 201 | |||
| 202 | #ifndef SYS_clock_gettime | ||
| 203 | #define SYS_clock_gettime SYS_clock_gettime64 | ||
| 204 | #endif | ||
| 205 | |||
| 206 | #ifndef SYS_clock_settime | ||
| 207 | #define SYS_clock_settime SYS_clock_settime64 | ||
| 208 | #endif | ||
| 209 | |||
| 210 | #ifndef SYS_clock_adjtime | ||
| 211 | #define SYS_clock_adjtime SYS_clock_adjtime64 | ||
| 212 | #endif | ||
| 213 | |||
| 214 | #ifndef SYS_clock_getres | ||
| 215 | #define SYS_clock_getres SYS_clock_getres_time64 | ||
| 216 | #endif | ||
| 217 | |||
| 218 | #ifndef SYS_clock_nanosleep | ||
| 219 | #define SYS_clock_nanosleep SYS_clock_nanosleep_time64 | ||
| 220 | #endif | ||
| 221 | |||
| 222 | #ifndef SYS_timer_gettime | ||
| 223 | #define SYS_timer_gettime SYS_timer_gettime64 | ||
| 224 | #endif | ||
| 225 | |||
| 226 | #ifndef SYS_timer_settime | ||
| 227 | #define SYS_timer_settime SYS_timer_settime64 | ||
| 228 | #endif | ||
| 229 | |||
| 230 | #ifndef SYS_timerfd_gettime | ||
| 231 | #define SYS_timerfd_gettime SYS_timerfd_gettime64 | ||
| 232 | #endif | ||
| 233 | |||
| 234 | #ifndef SYS_timerfd_settime | ||
| 235 | #define SYS_timerfd_settime SYS_timerfd_settime64 | ||
| 236 | #endif | ||
| 237 | |||
| 238 | #ifndef SYS_utimensat | ||
| 239 | #define SYS_utimensat SYS_utimensat_time64 | ||
| 240 | #endif | ||
| 241 | |||
| 242 | #ifndef SYS_pselect6 | ||
| 243 | #define SYS_pselect6 SYS_pselect6_time64 | ||
| 244 | #endif | ||
| 245 | |||
| 246 | #ifndef SYS_ppoll | ||
| 247 | #define SYS_ppoll SYS_ppoll_time64 | ||
| 248 | #endif | ||
| 249 | |||
| 250 | #ifndef SYS_recvmmsg | ||
| 251 | #define SYS_recvmmsg SYS_recvmmsg_time64 | ||
| 252 | #endif | ||
| 253 | |||
| 254 | #ifndef SYS_mq_timedsend | ||
| 255 | #define SYS_mq_timedsend SYS_mq_timedsend_time64 | ||
| 256 | #endif | ||
| 257 | |||
| 258 | #ifndef SYS_mq_timedreceive | ||
| 259 | #define SYS_mq_timedreceive SYS_mq_timedreceive_time64 | ||
| 260 | #endif | ||
| 261 | |||
| 262 | /* SYS_semtimedop omitted because SYS_ipc may provide it */ | ||
| 263 | |||
| 264 | #ifndef SYS_rt_sigtimedwait | ||
| 265 | #define SYS_rt_sigtimedwait SYS_rt_sigtimedwait_time64 | ||
| 266 | #endif | ||
| 267 | |||
| 268 | #ifndef SYS_futex | ||
| 269 | #define SYS_futex SYS_futex_time64 | ||
| 270 | #endif | ||
| 271 | |||
| 272 | #ifndef SYS_sched_rr_get_interval | ||
| 273 | #define SYS_sched_rr_get_interval SYS_sched_rr_get_interval_time64 | ||
| 274 | #endif | ||
| 275 | |||
| 276 | |||
| 277 | |||
| 278 | |||
| 196 | /* socketcall calls */ | 279 | /* socketcall calls */ |
| 197 | 280 | ||
| 198 | #define __SC_socket 1 | 281 | #define __SC_socket 1 |
| ... | @@ -216,6 +299,20 @@ hidden long __syscall_ret(unsigned long), | ... | @@ -216,6 +299,20 @@ hidden long __syscall_ret(unsigned long), |
| 216 | #define __SC_recvmmsg 19 | 299 | #define __SC_recvmmsg 19 |
| 217 | #define __SC_sendmmsg 20 | 300 | #define __SC_sendmmsg 20 |
| 218 | 301 | ||
| 302 | #ifndef SO_RCVTIMEO_OLD | ||
| 303 | #define SO_RCVTIMEO_OLD 20 | ||
| 304 | #endif | ||
| 305 | #ifndef SO_SNDTIMEO_OLD | ||
| 306 | #define SO_SNDTIMEO_OLD 21 | ||
| 307 | #endif | ||
| 308 | |||
| 309 | #ifndef SIOCGSTAMP_OLD | ||
| 310 | #define SIOCGSTAMP_OLD 0x8906 | ||
| 311 | #endif | ||
| 312 | #ifndef SIOCGSTAMPNS_OLD | ||
| 313 | #define SIOCGSTAMPNS_OLD 0x8907 | ||
| 314 | #endif | ||
| 315 | |||
| 219 | #ifdef SYS_open | 316 | #ifdef SYS_open |
| 220 | #define __sys_open2(x,pn,fl) __syscall2(SYS_open, pn, (fl)|O_LARGEFILE) | 317 | #define __sys_open2(x,pn,fl) __syscall2(SYS_open, pn, (fl)|O_LARGEFILE) |
| 221 | #define __sys_open3(x,pn,fl,mo) __syscall3(SYS_open, pn, (fl)|O_LARGEFILE, mo) | 318 | #define __sys_open3(x,pn,fl,mo) __syscall3(SYS_open, pn, (fl)|O_LARGEFILE, mo) |
lib/libc/musl/src/internal/version.h+1-1| ... | @@ -1 +1 @@ | ... | @@ -1 +1 @@ |
| 1 | #define VERSION "1.1.23" | 1 | #define VERSION "1.1.24" |
lib/libc/musl/src/ipc/ipc.h+12| ... | @@ -1,3 +1,5 @@ | ... | @@ -1,3 +1,5 @@ |
| 1 | #include "syscall.h" | ||
| 2 | |||
| 1 | #define IPCOP_semop 1 | 3 | #define IPCOP_semop 1 |
| 2 | #define IPCOP_semget 2 | 4 | #define IPCOP_semget 2 |
| 3 | #define IPCOP_semctl 3 | 5 | #define IPCOP_semctl 3 |
| ... | @@ -10,3 +12,13 @@ | ... | @@ -10,3 +12,13 @@ |
| 10 | #define IPCOP_shmdt 22 | 12 | #define IPCOP_shmdt 22 |
| 11 | #define IPCOP_shmget 23 | 13 | #define IPCOP_shmget 23 |
| 12 | #define IPCOP_shmctl 24 | 14 | #define IPCOP_shmctl 24 |
| 15 | |||
| 16 | #ifndef IPC_64 | ||
| 17 | #define IPC_64 0x100 | ||
| 18 | #endif | ||
| 19 | |||
| 20 | #define IPC_TIME64 (IPC_STAT & 0x100) | ||
| 21 | |||
| 22 | #define IPC_CMD(cmd) (((cmd) & ~IPC_TIME64) | IPC_64) | ||
| 23 | |||
| 24 | #define IPC_HILO(b,t) ((b)->t = (b)->__##t##_lo | 0LL+(b)->__##t##_hi<<32) |
lib/libc/musl/src/ipc/msgctl.c+10-3| ... | @@ -18,17 +18,24 @@ int msgctl(int q, int cmd, struct msqid_ds *buf) | ... | @@ -18,17 +18,24 @@ int msgctl(int q, int cmd, struct msqid_ds *buf) |
| 18 | 	} | 18 | 	} |
| 19 | #endif | 19 | #endif |
| 20 | #ifndef SYS_ipc | 20 | #ifndef SYS_ipc |
| 21 | 	int r = __syscall(SYS_msgctl, q, cmd | IPC_64, buf); | 21 | 	int r = __syscall(SYS_msgctl, q, IPC_CMD(cmd), buf); |
| 22 | #else | 22 | #else |
| 23 | 	int r = __syscall(SYS_ipc, IPCOP_msgctl, q, cmd | IPC_64, 0, buf, 0); | 23 | 	int r = __syscall(SYS_ipc, IPCOP_msgctl, q, IPC_CMD(cmd), 0, buf, 0); |
| 24 | #endif | 24 | #endif |
| 25 | #ifdef SYSCALL_IPC_BROKEN_MODE | 25 | #ifdef SYSCALL_IPC_BROKEN_MODE |
| 26 | 	if (r >= 0) switch (cmd) { | 26 | 	if (r >= 0) switch (cmd | IPC_TIME64) { |
| 27 | 	case IPC_STAT: | 27 | 	case IPC_STAT: |
| 28 | 	case MSG_STAT: | 28 | 	case MSG_STAT: |
| 29 | 	case MSG_STAT_ANY: | 29 | 	case MSG_STAT_ANY: |
| 30 | 		buf->msg_perm.mode >>= 16; | 30 | 		buf->msg_perm.mode >>= 16; |
| 31 | 	} | 31 | 	} |
| 32 | #endif | ||
| 33 | #if IPC_TIME64 | ||
| 34 | 	if (r >= 0 && (cmd&IPC_TIME64)) { | ||
| 35 | 		IPC_HILO(buf, msg_stime); | ||
| 36 | 		IPC_HILO(buf, msg_rtime); | ||
| 37 | 		IPC_HILO(buf, msg_ctime); | ||
| 38 | 	} | ||
| 32 | #endif | 39 | #endif |
| 33 | 	return __syscall_ret(r); | 40 | 	return __syscall_ret(r); |
| 34 | } | 41 | } |
lib/libc/musl/src/ipc/semctl.c+15-6| ... | @@ -18,9 +18,12 @@ int semctl(int id, int num, int cmd, ...) | ... | @@ -18,9 +18,12 @@ int semctl(int id, int num, int cmd, ...) |
| 18 | { | 18 | { |
| 19 | 	union semun arg = {0}; | 19 | 	union semun arg = {0}; |
| 20 | 	va_list ap; | 20 | 	va_list ap; |
| 21 | 	switch (cmd) { | 21 | 	switch (cmd & ~IPC_TIME64) { |
| 22 | 	case SETVAL: case GETALL: case SETALL: case IPC_STAT: case IPC_SET: | 22 | 	case SETVAL: case GETALL: case SETALL: case IPC_SET: |
| 23 | 	case IPC_INFO: case SEM_INFO: case SEM_STAT: | 23 | 	case IPC_INFO: case SEM_INFO: |
| 24 | 	case IPC_STAT & ~IPC_TIME64: | ||
| 25 | 	case SEM_STAT & ~IPC_TIME64: | ||
| 26 | 	case SEM_STAT_ANY & ~IPC_TIME64: | ||
| 24 | 		va_start(ap, cmd); | 27 | 		va_start(ap, cmd); |
| 25 | 		arg = va_arg(ap, union semun); | 28 | 		arg = va_arg(ap, union semun); |
| 26 | 		va_end(ap); | 29 | 		va_end(ap); |
| ... | @@ -34,17 +37,23 @@ int semctl(int id, int num, int cmd, ...) | ... | @@ -34,17 +37,23 @@ int semctl(int id, int num, int cmd, ...) |
| 34 | 	} | 37 | 	} |
| 35 | #endif | 38 | #endif |
| 36 | #ifndef SYS_ipc | 39 | #ifndef SYS_ipc |
| 37 | 	int r = __syscall(SYS_semctl, id, num, cmd | IPC_64, arg.buf); | 40 | 	int r = __syscall(SYS_semctl, id, num, IPC_CMD(cmd), arg.buf); |
| 38 | #else | 41 | #else |
| 39 | 	int r = __syscall(SYS_ipc, IPCOP_semctl, id, num, cmd | IPC_64, &arg.buf); | 42 | 	int r = __syscall(SYS_ipc, IPCOP_semctl, id, num, IPC_CMD(cmd), &arg.buf); |
| 40 | #endif | 43 | #endif |
| 41 | #ifdef SYSCALL_IPC_BROKEN_MODE | 44 | #ifdef SYSCALL_IPC_BROKEN_MODE |
| 42 | 	if (r >= 0) switch (cmd) { | 45 | 	if (r >= 0) switch (cmd | IPC_TIME64) { |
| 43 | 	case IPC_STAT: | 46 | 	case IPC_STAT: |
| 44 | 	case SEM_STAT: | 47 | 	case SEM_STAT: |
| 45 | 	case SEM_STAT_ANY: | 48 | 	case SEM_STAT_ANY: |
| 46 | 		arg.buf->sem_perm.mode >>= 16; | 49 | 		arg.buf->sem_perm.mode >>= 16; |
| 47 | 	} | 50 | 	} |
| 51 | #endif | ||
| 52 | #if IPC_TIME64 | ||
| 53 | 	if (r >= 0 && (cmd&IPC_TIME64)) { | ||
| 54 | 		IPC_HILO(arg.buf, sem_otime); | ||
| 55 | 		IPC_HILO(arg.buf, sem_ctime); | ||
| 56 | 	} | ||
| 48 | #endif | 57 | #endif |
| 49 | 	return __syscall_ret(r); | 58 | 	return __syscall_ret(r); |
| 50 | } | 59 | } |
lib/libc/musl/src/ipc/semtimedop.c+24-2| ... | @@ -1,13 +1,35 @@ | ... | @@ -1,13 +1,35 @@ |
| 1 | #define _GNU_SOURCE | 1 | #define _GNU_SOURCE |
| 2 | #include <sys/sem.h> | 2 | #include <sys/sem.h> |
| 3 | #include <errno.h> | ||
| 3 | #include "syscall.h" | 4 | #include "syscall.h" |
| 4 | #include "ipc.h" | 5 | #include "ipc.h" |
| 5 | 6 | ||
| 7 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 8 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 9 | |||
| 10 | #if !defined(SYS_semtimedop) && !defined(SYS_ipc) | ||
| 11 | #define NO_TIME32 1 | ||
| 12 | #else | ||
| 13 | #define NO_TIME32 0 | ||
| 14 | #endif | ||
| 15 | |||
| 6 | int semtimedop(int id, struct sembuf *buf, size_t n, const struct timespec *ts) | 16 | int semtimedop(int id, struct sembuf *buf, size_t n, const struct timespec *ts) |
| 7 | { | 17 | { |
| 8 | #ifndef SYS_ipc | 18 | #ifdef SYS_semtimedop_time64 |
| 19 | 	time_t s = ts ? ts->tv_sec : 0; | ||
| 20 | 	long ns = ts ? ts->tv_nsec : 0; | ||
| 21 | 	int r = -ENOSYS; | ||
| 22 | 	if (NO_TIME32 || !IS32BIT(s)) | ||
| 23 | 		r = __syscall(SYS_semtimedop_time64, id, buf, n, | ||
| 24 | 			ts ? ((long long[]){s, ns}) : 0); | ||
| 25 | 	if (NO_TIME32 || r!=-ENOSYS) return __syscall_ret(r); | ||
| 26 | 	ts = ts ? (void *)(long[]){CLAMP(s), ns} : 0; | ||
| 27 | #endif | ||
| 28 | #if defined(SYS_ipc) | ||
| 29 | 	return syscall(SYS_ipc, IPCOP_semtimedop, id, n, 0, buf, ts); | ||
| 30 | #elif defined(SYS_semtimedop) | ||
| 9 | 	return syscall(SYS_semtimedop, id, buf, n, ts); | 31 | 	return syscall(SYS_semtimedop, id, buf, n, ts); |
| 10 | #else | 32 | #else |
| 11 | 	return syscall(SYS_ipc, IPCOP_semtimedop, id, n, 0, buf, ts); | 33 | 	return __syscall_ret(-ENOSYS); |
| 12 | #endif | 34 | #endif |
| 13 | } | 35 | } |
lib/libc/musl/src/ipc/shmctl.c+10-3| ... | @@ -18,17 +18,24 @@ int shmctl(int id, int cmd, struct shmid_ds *buf) | ... | @@ -18,17 +18,24 @@ int shmctl(int id, int cmd, struct shmid_ds *buf) |
| 18 | 	} | 18 | 	} |
| 19 | #endif | 19 | #endif |
| 20 | #ifndef SYS_ipc | 20 | #ifndef SYS_ipc |
| 21 | 	int r = __syscall(SYS_shmctl, id, cmd | IPC_64, buf); | 21 | 	int r = __syscall(SYS_shmctl, id, IPC_CMD(cmd), buf); |
| 22 | #else | 22 | #else |
| 23 | 	int r = __syscall(SYS_ipc, IPCOP_shmctl, id, cmd | IPC_64, 0, buf, 0); | 23 | 	int r = __syscall(SYS_ipc, IPCOP_shmctl, id, IPC_CMD(cmd), 0, buf, 0); |
| 24 | #endif | 24 | #endif |
| 25 | #ifdef SYSCALL_IPC_BROKEN_MODE | 25 | #ifdef SYSCALL_IPC_BROKEN_MODE |
| 26 | 	if (r >= 0) switch (cmd) { | 26 | 	if (r >= 0) switch (cmd | IPC_TIME64) { |
| 27 | 	case IPC_STAT: | 27 | 	case IPC_STAT: |
| 28 | 	case SHM_STAT: | 28 | 	case SHM_STAT: |
| 29 | 	case SHM_STAT_ANY: | 29 | 	case SHM_STAT_ANY: |
| 30 | 		buf->shm_perm.mode >>= 16; | 30 | 		buf->shm_perm.mode >>= 16; |
| 31 | 	} | 31 | 	} |
| 32 | #endif | ||
| 33 | #if IPC_TIME64 | ||
| 34 | 	if (r >= 0 && (cmd&IPC_TIME64)) { | ||
| 35 | 		IPC_HILO(buf, shm_atime); | ||
| 36 | 		IPC_HILO(buf, shm_dtime); | ||
| 37 | 		IPC_HILO(buf, shm_ctime); | ||
| 38 | 	} | ||
| 32 | #endif | 39 | #endif |
| 33 | 	return __syscall_ret(r); | 40 | 	return __syscall_ret(r); |
| 34 | } | 41 | } |
lib/libc/musl/src/ldso/aarch64/tlsdesc.s+1-5| ... | @@ -9,15 +9,11 @@ __tlsdesc_static: | ... | @@ -9,15 +9,11 @@ __tlsdesc_static: |
| 9 | 	ldr x0,[x0,#8] | 9 | 	ldr x0,[x0,#8] |
| 10 | 	ret | 10 | 	ret |
| 11 | 11 | ||
| 12 | .hidden __tls_get_new | ||
| 13 | |||
| 14 | // size_t __tlsdesc_dynamic(size_t *a) | 12 | // size_t __tlsdesc_dynamic(size_t *a) |
| 15 | // { | 13 | // { |
| 16 | // 	struct {size_t modidx,off;} *p = (void*)a[1]; | 14 | // 	struct {size_t modidx,off;} *p = (void*)a[1]; |
| 17 | // 	size_t *dtv = *(size_t**)(tp - 8); | 15 | // 	size_t *dtv = *(size_t**)(tp - 8); |
| 18 | // 	if (p->modidx <= dtv[0]) | 16 | // 	return dtv[p->modidx] + p->off - tp; |
| 19 | // 		return dtv[p->modidx] + p->off - tp; | ||
| 20 | // 	return __tls_get_new(p) - tp; | ||
| 21 | // } | 17 | // } |
| 22 | .global __tlsdesc_dynamic | 18 | .global __tlsdesc_dynamic |
| 23 | .hidden __tlsdesc_dynamic | 19 | .hidden __tlsdesc_dynamic |
lib/libc/musl/src/ldso/arm/tlsdesc.S+4-2| ... | @@ -8,8 +8,6 @@ __tlsdesc_static: | ... | @@ -8,8 +8,6 @@ __tlsdesc_static: |
| 8 | 	ldr r0,[r0] | 8 | 	ldr r0,[r0] |
| 9 | 	bx lr | 9 | 	bx lr |
| 10 | 10 | ||
| 11 | .hidden __tls_get_new | ||
| 12 | |||
| 13 | .global __tlsdesc_dynamic | 11 | .global __tlsdesc_dynamic |
| 14 | .hidden __tlsdesc_dynamic | 12 | .hidden __tlsdesc_dynamic |
| 15 | .type __tlsdesc_dynamic,%function | 13 | .type __tlsdesc_dynamic,%function |
| ... | @@ -29,8 +27,12 @@ __tlsdesc_dynamic: | ... | @@ -29,8 +27,12 @@ __tlsdesc_dynamic: |
| 29 | 2: | 27 | 2: |
| 30 | #if __ARM_ARCH >= 5 | 28 | #if __ARM_ARCH >= 5 |
| 31 | 	blx r0 // r0 = tp | 29 | 	blx r0 // r0 = tp |
| 30 | #else | ||
| 31 | #if __thumb__ | ||
| 32 | 	add lr,pc,#1 | ||
| 32 | #else | 33 | #else |
| 33 | 	mov lr,pc | 34 | 	mov lr,pc |
| 35 | #endif | ||
| 34 | 	bx r0 | 36 | 	bx r0 |
| 35 | #endif | 37 | #endif |
| 36 | #endif | 38 | #endif |
lib/libc/musl/src/ldso/i386/tlsdesc.s-2| ... | @@ -6,8 +6,6 @@ __tlsdesc_static: | ... | @@ -6,8 +6,6 @@ __tlsdesc_static: |
| 6 | 	mov 4(%eax),%eax | 6 | 	mov 4(%eax),%eax |
| 7 | 	ret | 7 | 	ret |
| 8 | 8 | ||
| 9 | .hidden __tls_get_new | ||
| 10 | |||
| 11 | .global __tlsdesc_dynamic | 9 | .global __tlsdesc_dynamic |
| 12 | .hidden __tlsdesc_dynamic | 10 | .hidden __tlsdesc_dynamic |
| 13 | .type __tlsdesc_dynamic,@function | 11 | .type __tlsdesc_dynamic,@function |
lib/libc/musl/src/ldso/x86_64/tlsdesc.s-2| ... | @@ -6,8 +6,6 @@ __tlsdesc_static: | ... | @@ -6,8 +6,6 @@ __tlsdesc_static: |
| 6 | 	mov 8(%rax),%rax | 6 | 	mov 8(%rax),%rax |
| 7 | 	ret | 7 | 	ret |
| 8 | 8 | ||
| 9 | .hidden __tls_get_new | ||
| 10 | |||
| 11 | .global __tlsdesc_dynamic | 9 | .global __tlsdesc_dynamic |
| 12 | .hidden __tlsdesc_dynamic | 10 | .hidden __tlsdesc_dynamic |
| 13 | .type __tlsdesc_dynamic,@function | 11 | .type __tlsdesc_dynamic,@function |
lib/libc/musl/src/linux/adjtime.c+1-1| ... | @@ -15,7 +15,7 @@ int adjtime(const struct timeval *in, struct timeval *out) | ... | @@ -15,7 +15,7 @@ int adjtime(const struct timeval *in, struct timeval *out) |
| 15 | 		tx.offset = in->tv_sec*1000000 + in->tv_usec; | 15 | 		tx.offset = in->tv_sec*1000000 + in->tv_usec; |
| 16 | 		tx.modes = ADJ_OFFSET_SINGLESHOT; | 16 | 		tx.modes = ADJ_OFFSET_SINGLESHOT; |
| 17 | 	} | 17 | 	} |
| 18 | 	if (syscall(SYS_adjtimex, &tx) < 0) return -1; | 18 | 	if (adjtimex(&tx) < 0) return -1; |
| 19 | 	if (out) { | 19 | 	if (out) { |
| 20 | 		out->tv_sec = tx.offset / 1000000; | 20 | 		out->tv_sec = tx.offset / 1000000; |
| 21 | 		if ((out->tv_usec = tx.offset % 1000000) < 0) { | 21 | 		if ((out->tv_usec = tx.offset % 1000000) < 0) { |
lib/libc/musl/src/linux/adjtimex.c+2-2| ... | @@ -1,7 +1,7 @@ | ... | @@ -1,7 +1,7 @@ |
| 1 | #include <sys/timex.h> | 1 | #include <sys/timex.h> |
| 2 | #include "syscall.h" | 2 | #include <time.h> |
| 3 | 3 | ||
| 4 | int adjtimex(struct timex *tx) | 4 | int adjtimex(struct timex *tx) |
| 5 | { | 5 | { |
| 6 | 	return syscall(SYS_adjtimex, tx); | 6 | 	return clock_adjtime(CLOCK_REALTIME, tx); |
| 7 | } | 7 | } |
lib/libc/musl/src/linux/clock_adjtime.c+112| ... | @@ -1,7 +1,119 @@ | ... | @@ -1,7 +1,119 @@ |
| 1 | #include <sys/timex.h> | 1 | #include <sys/timex.h> |
| 2 | #include <time.h> | ||
| 3 | #include <errno.h> | ||
| 2 | #include "syscall.h" | 4 | #include "syscall.h" |
| 3 | 5 | ||
| 6 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 7 | |||
| 8 | struct ktimex64 { | ||
| 9 | 	unsigned modes; | ||
| 10 | 	int :32; | ||
| 11 | 	long long offset, freq, maxerror, esterror; | ||
| 12 | 	int status; | ||
| 13 | 	int :32; | ||
| 14 | 	long long constant, precision, tolerance; | ||
| 15 | 	long long time_sec, time_usec; | ||
| 16 | 	long long tick, ppsfreq, jitter; | ||
| 17 | 	int shift; | ||
| 18 | 	int :32; | ||
| 19 | 	long long stabil, jitcnt, calcnt, errcnt, stbcnt; | ||
| 20 | 	int tai; | ||
| 21 | 	int __padding[11]; | ||
| 22 | }; | ||
| 23 | |||
| 24 | struct ktimex { | ||
| 25 | 	unsigned modes; | ||
| 26 | 	long offset, freq, maxerror, esterror; | ||
| 27 | 	int status; | ||
| 28 | 	long constant, precision, tolerance; | ||
| 29 | 	long time_sec, time_usec; | ||
| 30 | 	long tick, ppsfreq, jitter; | ||
| 31 | 	int shift; | ||
| 32 | 	long stabil, jitcnt, calcnt, errcnt, stbcnt; | ||
| 33 | 	int tai; | ||
| 34 | 	int __padding[11]; | ||
| 35 | }; | ||
| 36 | |||
| 4 | int clock_adjtime (clockid_t clock_id, struct timex *utx) | 37 | int clock_adjtime (clockid_t clock_id, struct timex *utx) |
| 5 | { | 38 | { |
| 39 | 	int r = -ENOSYS; | ||
| 40 | #ifdef SYS_clock_adjtime64 | ||
| 41 | 	if (SYS_clock_adjtime == SYS_clock_adjtime64 || | ||
| 42 | 	 (utx->modes & ADJ_SETOFFSET) && !IS32BIT(utx->time.tv_sec)) { | ||
| 43 | 		struct ktimex64 ktx = { | ||
| 44 | 			.modes = utx->modes, | ||
| 45 | 			.offset = utx->offset, | ||
| 46 | 			.freq = utx->freq, | ||
| 47 | 			.maxerror = utx->maxerror, | ||
| 48 | 			.esterror = utx->esterror, | ||
| 49 | 			.status = utx->status, | ||
| 50 | 			.constant = utx->constant, | ||
| 51 | 			.precision = utx->precision, | ||
| 52 | 			.tolerance = utx->tolerance, | ||
| 53 | 			.time_sec = utx->time.tv_sec, | ||
| 54 | 			.time_usec = utx->time.tv_usec, | ||
| 55 | 			.tick = utx->tick, | ||
| 56 | 			.ppsfreq = utx->ppsfreq, | ||
| 57 | 			.jitter = utx->jitter, | ||
| 58 | 			.shift = utx->shift, | ||
| 59 | 			.stabil = utx->stabil, | ||
| 60 | 			.jitcnt = utx->jitcnt, | ||
| 61 | 			.calcnt = utx->calcnt, | ||
| 62 | 			.errcnt = utx->errcnt, | ||
| 63 | 			.stbcnt = utx->stbcnt, | ||
| 64 | 			.tai = utx->tai, | ||
| 65 | 		}; | ||
| 66 | 		r = __syscall(SYS_clock_adjtime, clock_id, &ktx); | ||
| 67 | 		if (r>=0) { | ||
| 68 | 			utx->modes = ktx.modes; | ||
| 69 | 			utx->offset = ktx.offset; | ||
| 70 | 			utx->freq = ktx.freq; | ||
| 71 | 			utx->maxerror = ktx.maxerror; | ||
| 72 | 			utx->esterror = ktx.esterror; | ||
| 73 | 			utx->status = ktx.status; | ||
| 74 | 			utx->constant = ktx.constant; | ||
| 75 | 			utx->precision = ktx.precision; | ||
| 76 | 			utx->tolerance = ktx.tolerance; | ||
| 77 | 			utx->time.tv_sec = ktx.time_sec; | ||
| 78 | 			utx->time.tv_usec = ktx.time_usec; | ||
| 79 | 			utx->tick = ktx.tick; | ||
| 80 | 			utx->ppsfreq = ktx.ppsfreq; | ||
| 81 | 			utx->jitter = ktx.jitter; | ||
| 82 | 			utx->shift = ktx.shift; | ||
| 83 | 			utx->stabil = ktx.stabil; | ||
| 84 | 			utx->jitcnt = ktx.jitcnt; | ||
| 85 | 			utx->calcnt = ktx.calcnt; | ||
| 86 | 			utx->errcnt = ktx.errcnt; | ||
| 87 | 			utx->stbcnt = ktx.stbcnt; | ||
| 88 | 			utx->tai = ktx.tai; | ||
| 89 | 		} | ||
| 90 | 	} | ||
| 91 | 	if (SYS_clock_adjtime == SYS_clock_adjtime64 || r!=-ENOSYS) | ||
| 92 | 		return __syscall_ret(r); | ||
| 93 | 	if ((utx->modes & ADJ_SETOFFSET) && !IS32BIT(utx->time.tv_sec)) | ||
| 94 | 		return __syscall_ret(-ENOTSUP); | ||
| 95 | #endif | ||
| 96 | 	if (sizeof(time_t) > sizeof(long)) { | ||
| 97 | 		union { | ||
| 98 | 			struct timex utx; | ||
| 99 | 			struct ktimex ktx; | ||
| 100 | 		} u = { *utx }; | ||
| 101 | 		u.ktx.time_sec = utx->time.tv_sec; | ||
| 102 | 		u.ktx.time_usec = utx->time.tv_usec; | ||
| 103 | #ifdef SYS_adjtimex | ||
| 104 | 		if (clock_id==CLOCK_REALTIME) r = __syscall(SYS_adjtimex, &u); | ||
| 105 | 		else | ||
| 106 | #endif | ||
| 107 | 		r = __syscall(SYS_clock_adjtime, clock_id, &u); | ||
| 108 | 		if (r>=0) { | ||
| 109 | 			*utx = u.utx; | ||
| 110 | 			utx->time.tv_sec = u.ktx.time_sec; | ||
| 111 | 			utx->time.tv_usec = u.ktx.time_usec; | ||
| 112 | 		} | ||
| 113 | 		return __syscall_ret(r); | ||
| 114 | 	} | ||
| 115 | #ifdef SYS_adjtimex | ||
| 116 | 	if (clock_id==CLOCK_REALTIME) return syscall(SYS_adjtimex, utx); | ||
| 117 | #endif | ||
| 6 | 	return syscall(SYS_clock_adjtime, clock_id, utx); | 118 | 	return syscall(SYS_clock_adjtime, clock_id, utx); |
| 7 | } | 119 | } |
lib/libc/musl/src/linux/copy_file_range.c created+8| ... | @@ -0,0 +1,8 @@ | ||
| 1 | #define _GNU_SOURCE | ||
| 2 | #include <unistd.h> | ||
| 3 | #include "syscall.h" | ||
| 4 | |||
| 5 | ssize_t copy_file_range(int fd_in, off_t *off_in, int fd_out, off_t *off_out, size_t len, unsigned flags) | ||
| 6 | { | ||
| 7 | 	return syscall(SYS_copy_file_range, fd_in, off_in, fd_out, off_out, len, flags); | ||
| 8 | } | ||
lib/libc/musl/src/linux/ppoll.c+17-1| ... | @@ -1,10 +1,26 @@ | ... | @@ -1,10 +1,26 @@ |
| 1 | #define _GNU_SOURCE | 1 | #define _GNU_SOURCE |
| 2 | #include <poll.h> | 2 | #include <poll.h> |
| 3 | #include <signal.h> | 3 | #include <signal.h> |
| 4 | #include <errno.h> | ||
| 4 | #include "syscall.h" | 5 | #include "syscall.h" |
| 5 | 6 | ||
| 7 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 8 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 9 | |||
| 6 | int ppoll(struct pollfd *fds, nfds_t n, const struct timespec *to, const sigset_t *mask) | 10 | int ppoll(struct pollfd *fds, nfds_t n, const struct timespec *to, const sigset_t *mask) |
| 7 | { | 11 | { |
| 12 | 	time_t s = to ? to->tv_sec : 0; | ||
| 13 | 	long ns = to ? to->tv_nsec : 0; | ||
| 14 | #ifdef SYS_ppoll_time64 | ||
| 15 | 	int r = -ENOSYS; | ||
| 16 | 	if (SYS_ppoll == SYS_ppoll_time64 || !IS32BIT(s)) | ||
| 17 | 		r = __syscall_cp(SYS_ppoll_time64, fds, n, | ||
| 18 | 			to ? ((long long[]){s, ns}) : 0, | ||
| 19 | 			mask, _NSIG/8); | ||
| 20 | 	if (SYS_ppoll == SYS_ppoll_time64 || r != -ENOSYS) | ||
| 21 | 		return __syscall_ret(r); | ||
| 22 | 	s = CLAMP(s); | ||
| 23 | #endif | ||
| 8 | 	return syscall_cp(SYS_ppoll, fds, n, | 24 | 	return syscall_cp(SYS_ppoll, fds, n, |
| 9 | 		to ? (struct timespec []){*to} : 0, mask, _NSIG/8); | 25 | 		to ? ((long[]){s, ns}) : 0, mask, _NSIG/8); |
| 10 | } | 26 | } |
lib/libc/musl/src/linux/settimeofday.c+6-1| ... | @@ -1,8 +1,13 @@ | ... | @@ -1,8 +1,13 @@ |
| 1 | #define _BSD_SOURCE | 1 | #define _BSD_SOURCE |
| 2 | #include <sys/time.h> | 2 | #include <sys/time.h> |
| 3 | #include <time.h> | ||
| 4 | #include <errno.h> | ||
| 3 | #include "syscall.h" | 5 | #include "syscall.h" |
| 4 | 6 | ||
| 5 | int settimeofday(const struct timeval *tv, const struct timezone *tz) | 7 | int settimeofday(const struct timeval *tv, const struct timezone *tz) |
| 6 | { | 8 | { |
| 7 | 	return syscall(SYS_settimeofday, tv, 0); | 9 | 	if (!tv) return 0; |
| 10 | 	if (tv->tv_usec >= 1000000ULL) return __syscall_ret(-EINVAL); | ||
| 11 | 	return clock_settime(CLOCK_REALTIME, &((struct timespec){ | ||
| 12 | 		.tv_sec = tv->tv_sec, .tv_nsec = tv->tv_usec * 1000})); | ||
| 8 | } | 13 | } |
lib/libc/musl/src/linux/timerfd.c+42| ... | @@ -1,6 +1,9 @@ | ... | @@ -1,6 +1,9 @@ |
| 1 | #include <sys/timerfd.h> | 1 | #include <sys/timerfd.h> |
| 2 | #include <errno.h> | ||
| 2 | #include "syscall.h" | 3 | #include "syscall.h" |
| 3 | 4 | ||
| 5 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 6 | |||
| 4 | int timerfd_create(int clockid, int flags) | 7 | int timerfd_create(int clockid, int flags) |
| 5 | { | 8 | { |
| 6 | 	return syscall(SYS_timerfd_create, clockid, flags); | 9 | 	return syscall(SYS_timerfd_create, clockid, flags); |
| ... | @@ -8,10 +11,49 @@ int timerfd_create(int clockid, int flags) | ... | @@ -8,10 +11,49 @@ int timerfd_create(int clockid, int flags) |
| 8 | 11 | ||
| 9 | int timerfd_settime(int fd, int flags, const struct itimerspec *new, struct itimerspec *old) | 12 | int timerfd_settime(int fd, int flags, const struct itimerspec *new, struct itimerspec *old) |
| 10 | { | 13 | { |
| 14 | #ifdef SYS_timerfd_settime64 | ||
| 15 | 	time_t is = new->it_interval.tv_sec, vs = new->it_value.tv_sec; | ||
| 16 | 	long ins = new->it_interval.tv_nsec, vns = new->it_value.tv_nsec; | ||
| 17 | 	int r = -ENOSYS; | ||
| 18 | 	if (SYS_timerfd_settime == SYS_timerfd_settime64 | ||
| 19 | 	 || !IS32BIT(is) || !IS32BIT(vs) || (sizeof(time_t)>4 && old)) | ||
| 20 | 		r = __syscall(SYS_timerfd_settime64, fd, flags, | ||
| 21 | 			((long long[]){is, ins, vs, vns}), old); | ||
| 22 | 	if (SYS_timerfd_settime == SYS_timerfd_settime64 || r!=-ENOSYS) | ||
| 23 | 		return __syscall_ret(r); | ||
| 24 | 	if (!IS32BIT(is) || !IS32BIT(vs)) | ||
| 25 | 		return __syscall_ret(-ENOTSUP); | ||
| 26 | 	long old32[4]; | ||
| 27 | 	r = __syscall(SYS_timerfd_settime, fd, flags, | ||
| 28 | 		((long[]){is, ins, vs, vns}), old32); | ||
| 29 | 	if (!r && old) { | ||
| 30 | 		old->it_interval.tv_sec = old32[0]; | ||
| 31 | 		old->it_interval.tv_nsec = old32[1]; | ||
| 32 | 		old->it_value.tv_sec = old32[2]; | ||
| 33 | 		old->it_value.tv_nsec = old32[3]; | ||
| 34 | 	} | ||
| 35 | 	return __syscall_ret(r); | ||
| 36 | #endif | ||
| 11 | 	return syscall(SYS_timerfd_settime, fd, flags, new, old); | 37 | 	return syscall(SYS_timerfd_settime, fd, flags, new, old); |
| 12 | } | 38 | } |
| 13 | 39 | ||
| 14 | int timerfd_gettime(int fd, struct itimerspec *cur) | 40 | int timerfd_gettime(int fd, struct itimerspec *cur) |
| 15 | { | 41 | { |
| 42 | #ifdef SYS_timerfd_gettime64 | ||
| 43 | 	int r = -ENOSYS; | ||
| 44 | 	if (sizeof(time_t) > 4) | ||
| 45 | 		r = __syscall(SYS_timerfd_gettime64, fd, cur); | ||
| 46 | 	if (SYS_timerfd_gettime == SYS_timerfd_gettime64 || r!=-ENOSYS) | ||
| 47 | 		return __syscall_ret(r); | ||
| 48 | 	long cur32[4]; | ||
| 49 | 	r = __syscall(SYS_timerfd_gettime, fd, cur32); | ||
| 50 | 	if (!r) { | ||
| 51 | 		cur->it_interval.tv_sec = cur32[0]; | ||
| 52 | 		cur->it_interval.tv_nsec = cur32[1]; | ||
| 53 | 		cur->it_value.tv_sec = cur32[2]; | ||
| 54 | 		cur->it_value.tv_nsec = cur32[3]; | ||
| 55 | 	} | ||
| 56 | 	return __syscall_ret(r); | ||
| 57 | #endif | ||
| 16 | 	return syscall(SYS_timerfd_gettime, fd, cur); | 58 | 	return syscall(SYS_timerfd_gettime, fd, cur); |
| 17 | } | 59 | } |
lib/libc/musl/src/locale/catclose.c+8| ... | @@ -1,6 +1,14 @@ | ... | @@ -1,6 +1,14 @@ |
| 1 | #define _BSD_SOURCE | ||
| 1 | #include <nl_types.h> | 2 | #include <nl_types.h> |
| 3 | #include <stdint.h> | ||
| 4 | #include <endian.h> | ||
| 5 | #include <sys/mman.h> | ||
| 6 | |||
| 7 | #define V(p) be32toh(*(uint32_t *)(p)) | ||
| 2 | 8 | ||
| 3 | int catclose (nl_catd catd) | 9 | int catclose (nl_catd catd) |
| 4 | { | 10 | { |
| 11 | 	char *map = (char *)catd; | ||
| 12 | 	munmap(map, V(map+8)+20); | ||
| 5 | 	return 0; | 13 | 	return 0; |
| 6 | } | 14 | } |
lib/libc/musl/src/locale/catgets.c+33-1| ... | @@ -1,6 +1,38 @@ | ... | @@ -1,6 +1,38 @@ |
| 1 | #define _BSD_SOURCE | ||
| 1 | #include <nl_types.h> | 2 | #include <nl_types.h> |
| 3 | #include <endian.h> | ||
| 4 | #include <stdlib.h> | ||
| 5 | #include <stdint.h> | ||
| 6 | #include <errno.h> | ||
| 7 | |||
| 8 | #define V(p) be32toh(*(uint32_t *)(p)) | ||
| 9 | |||
| 10 | static int cmp(const void *a, const void *b) | ||
| 11 | { | ||
| 12 | 	uint32_t x = V(a), y = V(b); | ||
| 13 | 	return x<y ? -1 : x>y ? 1 : 0; | ||
| 14 | } | ||
| 2 | 15 | ||
| 3 | char *catgets (nl_catd catd, int set_id, int msg_id, const char *s) | 16 | char *catgets (nl_catd catd, int set_id, int msg_id, const char *s) |
| 4 | { | 17 | { |
| 5 | 	return (char *)s; | 18 | 	const char *map = (const char *)catd; |
| 19 | 	uint32_t nsets = V(map+4); | ||
| 20 | 	const char *sets = map+20; | ||
| 21 | 	const char *msgs = map+20+V(map+12); | ||
| 22 | 	const char *strings = map+20+V(map+16); | ||
| 23 | 	uint32_t set_id_be = htobe32(set_id); | ||
| 24 | 	uint32_t msg_id_be = htobe32(msg_id); | ||
| 25 | 	const char *set = bsearch(&set_id_be, sets, nsets, 12, cmp); | ||
| 26 | 	if (!set) { | ||
| 27 | 		errno = ENOMSG; | ||
| 28 | 		return (char *)s; | ||
| 29 | 	} | ||
| 30 | 	uint32_t nmsgs = V(set+4); | ||
| 31 | 	msgs += 12*V(set+8); | ||
| 32 | 	const char *msg = bsearch(&msg_id_be, msgs, nmsgs, 12, cmp); | ||
| 33 | 	if (!msg) { | ||
| 34 | 		errno = ENOMSG; | ||
| 35 | 		return (char *)s; | ||
| 36 | 	} | ||
| 37 | 	return (char *)(strings + V(msg+8)); | ||
| 6 | } | 38 | } |
lib/libc/musl/src/locale/catopen.c+73-2| ... | @@ -1,8 +1,79 @@ | ... | @@ -1,8 +1,79 @@ |
| 1 | #define _BSD_SOURCE | ||
| 1 | #include <nl_types.h> | 2 | #include <nl_types.h> |
| 3 | #include <string.h> | ||
| 4 | #include <stdint.h> | ||
| 5 | #include <endian.h> | ||
| 2 | #include <errno.h> | 6 | #include <errno.h> |
| 7 | #include <langinfo.h> | ||
| 8 | #include <locale.h> | ||
| 9 | #include <sys/mman.h> | ||
| 10 | #include "libc.h" | ||
| 3 | 11 | ||
| 4 | nl_catd catopen (const char *name, int oflag) | 12 | #define V(p) be32toh(*(uint32_t *)(p)) |
| 13 | |||
| 14 | static nl_catd do_catopen(const char *name) | ||
| 15 | { | ||
| 16 | 	size_t size; | ||
| 17 | 	const unsigned char *map = __map_file(name, &size); | ||
| 18 | 	/* Size recorded in the file must match file size; otherwise | ||
| 19 | 	 * the information needed to unmap the file will be lost. */ | ||
| 20 | 	if (!map || V(map) != 0xff88ff89 || 20+V(map+8) != size) { | ||
| 21 | 		if(map) munmap((void *)map, size); | ||
| 22 | 		errno = ENOENT; | ||
| 23 | 		return (nl_catd)-1; | ||
| 24 | 	} | ||
| 25 | 	return (nl_catd)map; | ||
| 26 | } | ||
| 27 | |||
| 28 | nl_catd catopen(const char *name, int oflag) | ||
| 5 | { | 29 | { |
| 6 | 	errno = EOPNOTSUPP; | 30 | 	nl_catd catd; |
| 31 | |||
| 32 | 	if (strchr(name, '/')) return do_catopen(name); | ||
| 33 | |||
| 34 | 	char buf[PATH_MAX]; | ||
| 35 | 	size_t i; | ||
| 36 | 	const char *path, *lang, *p, *z; | ||
| 37 | 	if (libc.secure || !(path = getenv("NLSPATH"))) { | ||
| 38 | 		errno = ENOENT; | ||
| 39 | 		return (nl_catd)-1; | ||
| 40 | 	} | ||
| 41 | 	lang = oflag ? nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES)) : getenv("LANG"); | ||
| 42 | 	if (!lang) lang = ""; | ||
| 43 | 	for (p=path; *p; p=z) { | ||
| 44 | 		i = 0; | ||
| 45 | 		z = __strchrnul(p, ':'); | ||
| 46 | 		for (; p<z; p++) { | ||
| 47 | 			const char *v; | ||
| 48 | 			size_t l; | ||
| 49 | 			if (*p!='%') v=p, l=1; | ||
| 50 | 			else switch (*++p) { | ||
| 51 | 			case 'N': v=name; l=strlen(v); break; | ||
| 52 | 			case 'L': v=lang; l=strlen(v); break; | ||
| 53 | 			case 'l': v=lang; l=strcspn(v,"_.@"); break; | ||
| 54 | 			case 't': | ||
| 55 | 				v=__strchrnul(lang,'_'); | ||
| 56 | 				if (*v) v++; | ||
| 57 | 				l=strcspn(v,".@"); | ||
| 58 | 				break; | ||
| 59 | 			case 'c': v="UTF-8"; l=5; break; | ||
| 60 | 			case '%': v="%"; l=1; break; | ||
| 61 | 			default: v=0; | ||
| 62 | 			} | ||
| 63 | 			if (!v || l >= sizeof buf - i) { | ||
| 64 | 				break; | ||
| 65 | 			} | ||
| 66 | 			memcpy(buf+i, v, l); | ||
| 67 | 			i += l; | ||
| 68 | 		} | ||
| 69 | 		if (!*z && (p<z || !i)) break; | ||
| 70 | 		if (p<z) continue; | ||
| 71 | 		if (*z) z++; | ||
| 72 | 		buf[i] = 0; | ||
| 73 | 		/* Leading : or :: in NLSPATH is same as %N */ | ||
| 74 | 		catd = do_catopen(i ? buf : name); | ||
| 75 | 		if (catd != (nl_catd)-1) return catd; | ||
| 76 | 	} | ||
| 77 | 	errno = ENOENT; | ||
| 7 | 	return (nl_catd)-1; | 78 | 	return (nl_catd)-1; |
| 8 | } | 79 | } |
lib/libc/musl/src/math/i386/asin.s+2-8| ... | @@ -7,13 +7,10 @@ asinf: | ... | @@ -7,13 +7,10 @@ asinf: |
| 7 | 	cmp $0x01000000,%eax | 7 | 	cmp $0x01000000,%eax |
| 8 | 	jae 1f | 8 | 	jae 1f |
| 9 | 		# subnormal x, return x with underflow | 9 | 		# subnormal x, return x with underflow |
| 10 | 	fnstsw %ax | ||
| 11 | 	and $16,%ax | ||
| 12 | 	jnz 2f | ||
| 13 | 	fld %st(0) | 10 | 	fld %st(0) |
| 14 | 	fmul %st(1) | 11 | 	fmul %st(1) |
| 15 | 	fstps 4(%esp) | 12 | 	fstps 4(%esp) |
| 16 | 2:	ret | 13 | 	ret |
| 17 | 14 | ||
| 18 | .global asinl | 15 | .global asinl |
| 19 | .type asinl,@function | 16 | .type asinl,@function |
| ... | @@ -30,11 +27,8 @@ asin: | ... | @@ -30,11 +27,8 @@ asin: |
| 30 | 	cmp $0x00200000,%eax | 27 | 	cmp $0x00200000,%eax |
| 31 | 	jae 1f | 28 | 	jae 1f |
| 32 | 		# subnormal x, return x with underflow | 29 | 		# subnormal x, return x with underflow |
| 33 | 	fnstsw %ax | ||
| 34 | 	and $16,%ax | ||
| 35 | 	jnz 2f | ||
| 36 | 	fsts 4(%esp) | 30 | 	fsts 4(%esp) |
| 37 | 2:	ret | 31 | 	ret |
| 38 | 1:	fld %st(0) | 32 | 1:	fld %st(0) |
| 39 | 	fld1 | 33 | 	fld1 |
| 40 | 	fsub %st(0),%st(1) | 34 | 	fsub %st(0),%st(1) |
lib/libc/musl/src/math/i386/atan.s+2-5| ... | @@ -10,8 +10,5 @@ atan: | ... | @@ -10,8 +10,5 @@ atan: |
| 10 | 	fpatan | 10 | 	fpatan |
| 11 | 	ret | 11 | 	ret |
| 12 | 		# subnormal x, return x with underflow | 12 | 		# subnormal x, return x with underflow |
| 13 | 1:	fnstsw %ax | 13 | 1:	fsts 4(%esp) |
| 14 | 	and $16,%ax | 14 | 	ret |
| 15 | 	jnz 2f | ||
| 16 | 	fsts 4(%esp) | ||
| 17 | 2:	ret |
lib/libc/musl/src/math/i386/atan2.s-3| ... | @@ -10,8 +10,5 @@ atan2: | ... | @@ -10,8 +10,5 @@ atan2: |
| 10 | 	cmp $0x00200000,%eax | 10 | 	cmp $0x00200000,%eax |
| 11 | 	jae 1f | 11 | 	jae 1f |
| 12 | 		# subnormal x, return x with underflow | 12 | 		# subnormal x, return x with underflow |
| 13 | 	fnstsw %ax | ||
| 14 | 	and $16,%ax | ||
| 15 | 	jnz 1f | ||
| 16 | 	fsts 4(%esp) | 13 | 	fsts 4(%esp) |
| 17 | 1:	ret | 14 | 1:	ret |
lib/libc/musl/src/math/i386/atan2f.s-3| ... | @@ -10,9 +10,6 @@ atan2f: | ... | @@ -10,9 +10,6 @@ atan2f: |
| 10 | 	cmp $0x01000000,%eax | 10 | 	cmp $0x01000000,%eax |
| 11 | 	jae 1f | 11 | 	jae 1f |
| 12 | 		# subnormal x, return x with underflow | 12 | 		# subnormal x, return x with underflow |
| 13 | 	fnstsw %ax | ||
| 14 | 	and $16,%ax | ||
| 15 | 	jnz 1f | ||
| 16 | 	fld %st(0) | 13 | 	fld %st(0) |
| 17 | 	fmul %st(1) | 14 | 	fmul %st(1) |
| 18 | 	fstps 4(%esp) | 15 | 	fstps 4(%esp) |
lib/libc/musl/src/math/i386/atanf.s+2-5| ... | @@ -10,10 +10,7 @@ atanf: | ... | @@ -10,10 +10,7 @@ atanf: |
| 10 | 	fpatan | 10 | 	fpatan |
| 11 | 	ret | 11 | 	ret |
| 12 | 		# subnormal x, return x with underflow | 12 | 		# subnormal x, return x with underflow |
| 13 | 1:	fnstsw %ax | 13 | 1:	fld %st(0) |
| 14 | 	and $16,%ax | ||
| 15 | 	jnz 2f | ||
| 16 | 	fld %st(0) | ||
| 17 | 	fmul %st(1) | 14 | 	fmul %st(1) |
| 18 | 	fstps 4(%esp) | 15 | 	fstps 4(%esp) |
| 19 | 2:	ret | 16 | 	ret |
lib/libc/musl/src/math/i386/exp.s+2-8| ... | @@ -7,13 +7,10 @@ expm1f: | ... | @@ -7,13 +7,10 @@ expm1f: |
| 7 | 	cmp $0x01000000,%eax | 7 | 	cmp $0x01000000,%eax |
| 8 | 	jae 1f | 8 | 	jae 1f |
| 9 | 		# subnormal x, return x with underflow | 9 | 		# subnormal x, return x with underflow |
| 10 | 	fnstsw %ax | ||
| 11 | 	and $16,%ax | ||
| 12 | 	jnz 2f | ||
| 13 | 	fld %st(0) | 10 | 	fld %st(0) |
| 14 | 	fmul %st(1) | 11 | 	fmul %st(1) |
| 15 | 	fstps 4(%esp) | 12 | 	fstps 4(%esp) |
| 16 | 2:	ret | 13 | 	ret |
| 17 | 14 | ||
| 18 | .global expm1l | 15 | .global expm1l |
| 19 | .type expm1l,@function | 16 | .type expm1l,@function |
| ... | @@ -30,11 +27,8 @@ expm1: | ... | @@ -30,11 +27,8 @@ expm1: |
| 30 | 	cmp $0x00200000,%eax | 27 | 	cmp $0x00200000,%eax |
| 31 | 	jae 1f | 28 | 	jae 1f |
| 32 | 		# subnormal x, return x with underflow | 29 | 		# subnormal x, return x with underflow |
| 33 | 	fnstsw %ax | ||
| 34 | 	and $16,%ax | ||
| 35 | 	jnz 2f | ||
| 36 | 	fsts 4(%esp) | 30 | 	fsts 4(%esp) |
| 37 | 2:	ret | 31 | 	ret |
| 38 | 1:	fldl2e | 32 | 1:	fldl2e |
| 39 | 	fmulp | 33 | 	fmulp |
| 40 | 	mov $0xc2820000,%eax | 34 | 	mov $0xc2820000,%eax |
lib/libc/musl/src/math/i386/log1p.s+2-5| ... | @@ -16,9 +16,6 @@ log1p: | ... | @@ -16,9 +16,6 @@ log1p: |
| 16 | 	fyl2x | 16 | 	fyl2x |
| 17 | 	ret | 17 | 	ret |
| 18 | 		# subnormal x, return x with underflow | 18 | 		# subnormal x, return x with underflow |
| 19 | 2:	fnstsw %ax | 19 | 2:	fsts 4(%esp) |
| 20 | 	and $16,%ax | ||
| 21 | 	jnz 1f | ||
| 22 | 	fsts 4(%esp) | ||
| 23 | 	fstp %st(1) | 20 | 	fstp %st(1) |
| 24 | 1:	ret | 21 | 	ret |
lib/libc/musl/src/math/i386/log1pf.s+2-5| ... | @@ -16,10 +16,7 @@ log1pf: | ... | @@ -16,10 +16,7 @@ log1pf: |
| 16 | 	fyl2x | 16 | 	fyl2x |
| 17 | 	ret | 17 | 	ret |
| 18 | 		# subnormal x, return x with underflow | 18 | 		# subnormal x, return x with underflow |
| 19 | 2:	fnstsw %ax | 19 | 2:	fxch |
| 20 | 	and $16,%ax | ||
| 21 | 	jnz 1f | ||
| 22 | 	fxch | ||
| 23 | 	fmul %st(1) | 20 | 	fmul %st(1) |
| 24 | 	fstps 4(%esp) | 21 | 	fstps 4(%esp) |
| 25 | 1:	ret | 22 | 	ret |
lib/libc/musl/src/math/lrint.c+27-1| ... | @@ -1,5 +1,6 @@ | ... | @@ -1,5 +1,6 @@ |
| 1 | #include <limits.h> | 1 | #include <limits.h> |
| 2 | #include <fenv.h> | 2 | #include <fenv.h> |
| 3 | #include <math.h> | ||
| 3 | #include "libm.h" | 4 | #include "libm.h" |
| 4 | 5 | ||
| 5 | /* | 6 | /* |
| ... | @@ -26,7 +27,18 @@ as a double. | ... | @@ -26,7 +27,18 @@ as a double. |
| 26 | */ | 27 | */ |
| 27 | 28 | ||
| 28 | #if LONG_MAX < 1U<<53 && defined(FE_INEXACT) | 29 | #if LONG_MAX < 1U<<53 && defined(FE_INEXACT) |
| 29 | long lrint(double x) | 30 | #include <float.h> |
| 31 | #include <stdint.h> | ||
| 32 | #if FLT_EVAL_METHOD==0 || FLT_EVAL_METHOD==1 | ||
| 33 | #define EPS DBL_EPSILON | ||
| 34 | #elif FLT_EVAL_METHOD==2 | ||
| 35 | #define EPS LDBL_EPSILON | ||
| 36 | #endif | ||
| 37 | #ifdef __GNUC__ | ||
| 38 | /* avoid stack frame in lrint */ | ||
| 39 | __attribute__((noinline)) | ||
| 40 | #endif | ||
| 41 | static long lrint_slow(double x) | ||
| 30 | { | 42 | { |
| 31 | 	#pragma STDC FENV_ACCESS ON | 43 | 	#pragma STDC FENV_ACCESS ON |
| 32 | 	int e; | 44 | 	int e; |
| ... | @@ -38,6 +50,20 @@ long lrint(double x) | ... | @@ -38,6 +50,20 @@ long lrint(double x) |
| 38 | 	/* conversion */ | 50 | 	/* conversion */ |
| 39 | 	return x; | 51 | 	return x; |
| 40 | } | 52 | } |
| 53 | |||
| 54 | long lrint(double x) | ||
| 55 | { | ||
| 56 | 	uint32_t abstop = asuint64(x)>>32 & 0x7fffffff; | ||
| 57 | 	uint64_t sign = asuint64(x) & (1ULL << 63); | ||
| 58 | |||
| 59 | 	if (abstop < 0x41dfffff) { | ||
| 60 | 		/* |x| < 0x7ffffc00, no overflow */ | ||
| 61 | 		double_t toint = asdouble(asuint64(1/EPS) | sign); | ||
| 62 | 		double_t y = x + toint - toint; | ||
| 63 | 		return (long)y; | ||
| 64 | 	} | ||
| 65 | 	return lrint_slow(x); | ||
| 66 | } | ||
| 41 | #else | 67 | #else |
| 42 | long lrint(double x) | 68 | long lrint(double x) |
| 43 | { | 69 | { |
lib/libc/musl/src/math/sqrt.c+1-2| ... | @@ -179,7 +179,6 @@ double sqrt(double x) | ... | @@ -179,7 +179,6 @@ double sqrt(double x) |
| 179 | 	ix1 = q1>>1; | 179 | 	ix1 = q1>>1; |
| 180 | 	if (q&1) | 180 | 	if (q&1) |
| 181 | 		ix1 |= sign; | 181 | 		ix1 |= sign; |
| 182 | 	ix0 += m << 20; | 182 | 	INSERT_WORDS(z, ix0 + ((uint32_t)m << 20), ix1); |
| 183 | 	INSERT_WORDS(z, ix0, ix1); | ||
| 184 | 	return z; | 183 | 	return z; |
| 185 | } | 184 | } |
lib/libc/musl/src/math/sqrtf.c+1-2| ... | @@ -78,7 +78,6 @@ float sqrtf(float x) | ... | @@ -78,7 +78,6 @@ float sqrtf(float x) |
| 78 | 		} | 78 | 		} |
| 79 | 	} | 79 | 	} |
| 80 | 	ix = (q>>1) + 0x3f000000; | 80 | 	ix = (q>>1) + 0x3f000000; |
| 81 | 	ix += m << 23; | 81 | 	SET_FLOAT_WORD(z, ix + ((uint32_t)m << 23)); |
| 82 | 	SET_FLOAT_WORD(z, ix); | ||
| 83 | 	return z; | 82 | 	return z; |
| 84 | } | 83 | } |
lib/libc/musl/src/misc/getopt.c+1| ... | @@ -1,3 +1,4 @@ | ... | @@ -1,3 +1,4 @@ |
| 1 | #define _BSD_SOURCE | ||
| 1 | #include <unistd.h> | 2 | #include <unistd.h> |
| 2 | #include <wchar.h> | 3 | #include <wchar.h> |
| 3 | #include <string.h> | 4 | #include <string.h> |
lib/libc/musl/src/misc/ioctl.c+24-1| ... | @@ -1,5 +1,8 @@ | ... | @@ -1,5 +1,8 @@ |
| 1 | #include <sys/ioctl.h> | 1 | #include <sys/ioctl.h> |
| 2 | #include <stdarg.h> | 2 | #include <stdarg.h> |
| 3 | #include <errno.h> | ||
| 4 | #include <time.h> | ||
| 5 | #include <sys/time.h> | ||
| 3 | #include "syscall.h" | 6 | #include "syscall.h" |
| 4 | 7 | ||
| 5 | int ioctl(int fd, int req, ...) | 8 | int ioctl(int fd, int req, ...) |
| ... | @@ -9,5 +12,25 @@ int ioctl(int fd, int req, ...) | ... | @@ -9,5 +12,25 @@ int ioctl(int fd, int req, ...) |
| 9 | 	va_start(ap, req); | 12 | 	va_start(ap, req); |
| 10 | 	arg = va_arg(ap, void *); | 13 | 	arg = va_arg(ap, void *); |
| 11 | 	va_end(ap); | 14 | 	va_end(ap); |
| 12 | 	return syscall(SYS_ioctl, fd, req, arg); | 15 | 	int r = __syscall(SYS_ioctl, fd, req, arg); |
| 16 | 	if (r==-ENOTTY) switch (req) { | ||
| 17 | 	case SIOCGSTAMP: | ||
| 18 | 	case SIOCGSTAMPNS: | ||
| 19 | 		if (SIOCGSTAMP==SIOCGSTAMP_OLD) break; | ||
| 20 | 		if (req==SIOCGSTAMP) req=SIOCGSTAMP_OLD; | ||
| 21 | 		if (req==SIOCGSTAMPNS) req=SIOCGSTAMPNS_OLD; | ||
| 22 | 		long t32[2]; | ||
| 23 | 		r = __syscall(SYS_ioctl, fd, req, t32); | ||
| 24 | 		if (r<0) break; | ||
| 25 | 		if (req==SIOCGSTAMP_OLD) { | ||
| 26 | 			struct timeval *tv = arg; | ||
| 27 | 			tv->tv_sec = t32[0]; | ||
| 28 | 			tv->tv_usec = t32[1]; | ||
| 29 | 		} else { | ||
| 30 | 			struct timespec *ts = arg; | ||
| 31 | 			ts->tv_sec = t32[0]; | ||
| 32 | 			ts->tv_nsec = t32[1]; | ||
| 33 | 		} | ||
| 34 | 	} | ||
| 35 | 	return __syscall_ret(r); | ||
| 13 | } | 36 | } |
lib/libc/musl/src/mq/mq_timedreceive.c+17| ... | @@ -1,7 +1,24 @@ | ... | @@ -1,7 +1,24 @@ |
| 1 | #include <mqueue.h> | 1 | #include <mqueue.h> |
| 2 | #include <errno.h> | ||
| 2 | #include "syscall.h" | 3 | #include "syscall.h" |
| 3 | 4 | ||
| 5 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 6 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 7 | |||
| 4 | ssize_t mq_timedreceive(mqd_t mqd, char *restrict msg, size_t len, unsigned *restrict prio, const struct timespec *restrict at) | 8 | ssize_t mq_timedreceive(mqd_t mqd, char *restrict msg, size_t len, unsigned *restrict prio, const struct timespec *restrict at) |
| 5 | { | 9 | { |
| 10 | #ifdef SYS_mq_timedreceive_time64 | ||
| 11 | 	time_t s = at ? at->tv_sec : 0; | ||
| 12 | 	long ns = at ? at->tv_nsec : 0; | ||
| 13 | 	long r = -ENOSYS; | ||
| 14 | 	if (SYS_mq_timedreceive == SYS_mq_timedreceive_time64 || !IS32BIT(s)) | ||
| 15 | 		r = __syscall_cp(SYS_mq_timedreceive_time64, mqd, msg, len, prio, | ||
| 16 | 			at ? ((long long []){at->tv_sec, at->tv_nsec}) : 0); | ||
| 17 | 	if (SYS_mq_timedreceive == SYS_mq_timedreceive_time64 || r != -ENOSYS) | ||
| 18 | 		return __syscall_ret(r); | ||
| 19 | 	return syscall_cp(SYS_mq_timedreceive, mqd, msg, len, prio, | ||
| 20 | 		at ? ((long[]){CLAMP(s), ns}) : 0); | ||
| 21 | #else | ||
| 6 | 	return syscall_cp(SYS_mq_timedreceive, mqd, msg, len, prio, at); | 22 | 	return syscall_cp(SYS_mq_timedreceive, mqd, msg, len, prio, at); |
| 23 | #endif | ||
| 7 | } | 24 | } |
lib/libc/musl/src/mq/mq_timedsend.c+17| ... | @@ -1,7 +1,24 @@ | ... | @@ -1,7 +1,24 @@ |
| 1 | #include <mqueue.h> | 1 | #include <mqueue.h> |
| 2 | #include <errno.h> | ||
| 2 | #include "syscall.h" | 3 | #include "syscall.h" |
| 3 | 4 | ||
| 5 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 6 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 7 | |||
| 4 | int mq_timedsend(mqd_t mqd, const char *msg, size_t len, unsigned prio, const struct timespec *at) | 8 | int mq_timedsend(mqd_t mqd, const char *msg, size_t len, unsigned prio, const struct timespec *at) |
| 5 | { | 9 | { |
| 10 | #ifdef SYS_mq_timedsend_time64 | ||
| 11 | 	time_t s = at ? at->tv_sec : 0; | ||
| 12 | 	long ns = at ? at->tv_nsec : 0; | ||
| 13 | 	long r = -ENOSYS; | ||
| 14 | 	if (SYS_mq_timedsend == SYS_mq_timedsend_time64 || !IS32BIT(s)) | ||
| 15 | 		r = __syscall_cp(SYS_mq_timedsend_time64, mqd, msg, len, prio, | ||
| 16 | 			at ? ((long long []){at->tv_sec, at->tv_nsec}) : 0); | ||
| 17 | 	if (SYS_mq_timedsend == SYS_mq_timedsend_time64 || r != -ENOSYS) | ||
| 18 | 		return __syscall_ret(r); | ||
| 19 | 	return syscall_cp(SYS_mq_timedsend, mqd, msg, len, prio, | ||
| 20 | 		at ? ((long[]){CLAMP(s), ns}) : 0); | ||
| 21 | #else | ||
| 6 | 	return syscall_cp(SYS_mq_timedsend, mqd, msg, len, prio, at); | 22 | 	return syscall_cp(SYS_mq_timedsend, mqd, msg, len, prio, at); |
| 23 | #endif | ||
| 7 | } | 24 | } |
lib/libc/musl/src/multibyte/mbsrtowcs.c+8-2| ... | @@ -38,12 +38,15 @@ size_t mbsrtowcs(wchar_t *restrict ws, const char **restrict src, size_t wn, mbs | ... | @@ -38,12 +38,15 @@ size_t mbsrtowcs(wchar_t *restrict ws, const char **restrict src, size_t wn, mbs |
| 38 | 	} | 38 | 	} |
| 39 | 39 | ||
| 40 | 	if (!ws) for (;;) { | 40 | 	if (!ws) for (;;) { |
| 41 | #ifdef __GNUC__ | ||
| 42 | 		typedef uint32_t __attribute__((__may_alias__)) w32; | ||
| 41 | 		if (*s-1u < 0x7f && (uintptr_t)s%4 == 0) { | 43 | 		if (*s-1u < 0x7f && (uintptr_t)s%4 == 0) { |
| 42 | 			while (!(( *(uint32_t*)s | *(uint32_t*)s-0x01010101) & 0x80808080)) { | 44 | 			while (!(( *(w32*)s | *(w32*)s-0x01010101) & 0x80808080)) { |
| 43 | 				s += 4; | 45 | 				s += 4; |
| 44 | 				wn -= 4; | 46 | 				wn -= 4; |
| 45 | 			} | 47 | 			} |
| 46 | 		} | 48 | 		} |
| 49 | #endif | ||
| 47 | 		if (*s-1u < 0x7f) { | 50 | 		if (*s-1u < 0x7f) { |
| 48 | 			s++; | 51 | 			s++; |
| 49 | 			wn--; | 52 | 			wn--; |
| ... | @@ -69,8 +72,10 @@ resume0: | ... | @@ -69,8 +72,10 @@ resume0: |
| 69 | 			*src = (const void *)s; | 72 | 			*src = (const void *)s; |
| 70 | 			return wn0; | 73 | 			return wn0; |
| 71 | 		} | 74 | 		} |
| 75 | #ifdef __GNUC__ | ||
| 76 | 		typedef uint32_t __attribute__((__may_alias__)) w32; | ||
| 72 | 		if (*s-1u < 0x7f && (uintptr_t)s%4 == 0) { | 77 | 		if (*s-1u < 0x7f && (uintptr_t)s%4 == 0) { |
| 73 | 			while (wn>=5 && !(( *(uint32_t*)s | *(uint32_t*)s-0x01010101) & 0x80808080)) { | 78 | 			while (wn>=5 && !(( *(w32*)s | *(w32*)s-0x01010101) & 0x80808080)) { |
| 74 | 				*ws++ = *s++; | 79 | 				*ws++ = *s++; |
| 75 | 				*ws++ = *s++; | 80 | 				*ws++ = *s++; |
| 76 | 				*ws++ = *s++; | 81 | 				*ws++ = *s++; |
| ... | @@ -78,6 +83,7 @@ resume0: | ... | @@ -78,6 +83,7 @@ resume0: |
| 78 | 				wn -= 4; | 83 | 				wn -= 4; |
| 79 | 			} | 84 | 			} |
| 80 | 		} | 85 | 		} |
| 86 | #endif | ||
| 81 | 		if (*s-1u < 0x7f) { | 87 | 		if (*s-1u < 0x7f) { |
| 82 | 			*ws++ = *s++; | 88 | 			*ws++ = *s++; |
| 83 | 			wn--; | 89 | 			wn--; |
lib/libc/musl/src/network/getsockopt.c+26-1| ... | @@ -1,7 +1,32 @@ | ... | @@ -1,7 +1,32 @@ |
| 1 | #include <sys/socket.h> | 1 | #include <sys/socket.h> |
| 2 | #include <sys/time.h> | ||
| 3 | #include <errno.h> | ||
| 2 | #include "syscall.h" | 4 | #include "syscall.h" |
| 3 | 5 | ||
| 4 | int getsockopt(int fd, int level, int optname, void *restrict optval, socklen_t *restrict optlen) | 6 | int getsockopt(int fd, int level, int optname, void *restrict optval, socklen_t *restrict optlen) |
| 5 | { | 7 | { |
| 6 | 	return socketcall(getsockopt, fd, level, optname, optval, optlen, 0); | 8 | 	long tv32[2]; |
| 9 | 	struct timeval *tv; | ||
| 10 | |||
| 11 | 	int r = __socketcall(getsockopt, fd, level, optname, optval, optlen, 0); | ||
| 12 | |||
| 13 | 	if (r==-ENOPROTOOPT) switch (level) { | ||
| 14 | 	case SOL_SOCKET: | ||
| 15 | 		switch (optname) { | ||
| 16 | 		case SO_RCVTIMEO: | ||
| 17 | 		case SO_SNDTIMEO: | ||
| 18 | 			if (SO_RCVTIMEO == SO_RCVTIMEO_OLD) break; | ||
| 19 | 			if (*optlen < sizeof *tv) return __syscall_ret(-EINVAL); | ||
| 20 | 			if (optname==SO_RCVTIMEO) optname=SO_RCVTIMEO_OLD; | ||
| 21 | 			if (optname==SO_SNDTIMEO) optname=SO_SNDTIMEO_OLD; | ||
| 22 | 			r = __socketcall(getsockopt, fd, level, optname, | ||
| 23 | 				tv32, (socklen_t[]){sizeof tv32}, 0); | ||
| 24 | 			if (r<0) break; | ||
| 25 | 			tv = optval; | ||
| 26 | 			tv->tv_sec = tv32[0]; | ||
| 27 | 			tv->tv_usec = tv32[1]; | ||
| 28 | 			*optlen = sizeof *tv; | ||
| 29 | 		} | ||
| 30 | 	} | ||
| 31 | 	return __syscall_ret(r); | ||
| 7 | } | 32 | } |
lib/libc/musl/src/network/recvmmsg.c+18| ... | @@ -1,8 +1,13 @@ | ... | @@ -1,8 +1,13 @@ |
| 1 | #define _GNU_SOURCE | 1 | #define _GNU_SOURCE |
| 2 | #include <sys/socket.h> | 2 | #include <sys/socket.h> |
| 3 | #include <limits.h> | 3 | #include <limits.h> |
| 4 | #include <errno.h> | ||
| 5 | #include <time.h> | ||
| 4 | #include "syscall.h" | 6 | #include "syscall.h" |
| 5 | 7 | ||
| 8 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 9 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 10 | |||
| 6 | int recvmmsg(int fd, struct mmsghdr *msgvec, unsigned int vlen, unsigned int flags, struct timespec *timeout) | 11 | int recvmmsg(int fd, struct mmsghdr *msgvec, unsigned int vlen, unsigned int flags, struct timespec *timeout) |
| 7 | { | 12 | { |
| 8 | #if LONG_MAX > INT_MAX | 13 | #if LONG_MAX > INT_MAX |
| ... | @@ -11,5 +16,18 @@ int recvmmsg(int fd, struct mmsghdr *msgvec, unsigned int vlen, unsigned int fla | ... | @@ -11,5 +16,18 @@ int recvmmsg(int fd, struct mmsghdr *msgvec, unsigned int vlen, unsigned int fla |
| 11 | 	for (i = vlen; i; i--, mh++) | 16 | 	for (i = vlen; i; i--, mh++) |
| 12 | 		mh->msg_hdr.__pad1 = mh->msg_hdr.__pad2 = 0; | 17 | 		mh->msg_hdr.__pad1 = mh->msg_hdr.__pad2 = 0; |
| 13 | #endif | 18 | #endif |
| 19 | #ifdef SYS_recvmmsg_time64 | ||
| 20 | 	time_t s = timeout ? timeout->tv_sec : 0; | ||
| 21 | 	long ns = timeout ? timeout->tv_nsec : 0; | ||
| 22 | 	int r = -ENOSYS; | ||
| 23 | 	if (SYS_recvmmsg == SYS_recvmmsg_time64 || !IS32BIT(s)) | ||
| 24 | 		r = __syscall_cp(SYS_recvmmsg_time64, fd, msgvec, vlen, flags, | ||
| 25 | 			timeout ? ((long long[]){s, ns}) : 0); | ||
| 26 | 	if (SYS_recvmmsg == SYS_recvmmsg_time64 || r!=-ENOSYS) | ||
| 27 | 		return __syscall_ret(r); | ||
| 28 | 	return syscall_cp(SYS_recvmmsg, fd, msgvec, vlen, flags, | ||
| 29 | 		timeout ? ((long[]){CLAMP(s), ns}) : 0); | ||
| 30 | #else | ||
| 14 | 	return syscall_cp(SYS_recvmmsg, fd, msgvec, vlen, flags, timeout); | 31 | 	return syscall_cp(SYS_recvmmsg, fd, msgvec, vlen, flags, timeout); |
| 32 | #endif | ||
| 15 | } | 33 | } |
lib/libc/musl/src/network/setsockopt.c+31-1| ... | @@ -1,7 +1,37 @@ | ... | @@ -1,7 +1,37 @@ |
| 1 | #include <sys/socket.h> | 1 | #include <sys/socket.h> |
| 2 | #include <sys/time.h> | ||
| 3 | #include <errno.h> | ||
| 2 | #include "syscall.h" | 4 | #include "syscall.h" |
| 3 | 5 | ||
| 6 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 7 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 8 | |||
| 4 | int setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen) | 9 | int setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen) |
| 5 | { | 10 | { |
| 6 | 	return socketcall(setsockopt, fd, level, optname, optval, optlen, 0); | 11 | 	const struct timeval *tv; |
| 12 | 	time_t s; | ||
| 13 | 	suseconds_t us; | ||
| 14 | |||
| 15 | 	int r = __socketcall(setsockopt, fd, level, optname, optval, optlen, 0); | ||
| 16 | |||
| 17 | 	if (r==-ENOPROTOOPT) switch (level) { | ||
| 18 | 	case SOL_SOCKET: | ||
| 19 | 		switch (optname) { | ||
| 20 | 		case SO_RCVTIMEO: | ||
| 21 | 		case SO_SNDTIMEO: | ||
| 22 | 			if (SO_RCVTIMEO == SO_RCVTIMEO_OLD) break; | ||
| 23 | 			if (optlen < sizeof *tv) return __syscall_ret(-EINVAL); | ||
| 24 | 			tv = optval; | ||
| 25 | 			s = tv->tv_sec; | ||
| 26 | 			us = tv->tv_usec; | ||
| 27 | 			if (!IS32BIT(s)) return __syscall_ret(-ENOTSUP); | ||
| 28 | |||
| 29 | 			if (optname==SO_RCVTIMEO) optname=SO_RCVTIMEO_OLD; | ||
| 30 | 			if (optname==SO_SNDTIMEO) optname=SO_SNDTIMEO_OLD; | ||
| 31 | |||
| 32 | 			r = __socketcall(setsockopt, fd, level, optname, | ||
| 33 | 				((long[]){s, CLAMP(us)}), 2*sizeof(long), 0); | ||
| 34 | 		} | ||
| 35 | 	} | ||
| 36 | 	return __syscall_ret(r); | ||
| 7 | } | 37 | } |
lib/libc/musl/src/process/fdop.h+2| ... | @@ -1,6 +1,8 @@ | ... | @@ -1,6 +1,8 @@ |
| 1 | #define FDOP_CLOSE 1 | 1 | #define FDOP_CLOSE 1 |
| 2 | #define FDOP_DUP2 2 | 2 | #define FDOP_DUP2 2 |
| 3 | #define FDOP_OPEN 3 | 3 | #define FDOP_OPEN 3 |
| 4 | #define FDOP_CHDIR 4 | ||
| 5 | #define FDOP_FCHDIR 5 | ||
| 4 | 6 | ||
| 5 | struct fdop { | 7 | struct fdop { |
| 6 | 	struct fdop *next, *prev; | 8 | 	struct fdop *next, *prev; |
lib/libc/musl/src/process/posix_spawn.c+8| ... | @@ -125,6 +125,14 @@ static int child(void *args_vp) | ... | @@ -125,6 +125,14 @@ static int child(void *args_vp) |
| 125 | 					__syscall(SYS_close, fd); | 125 | 					__syscall(SYS_close, fd); |
| 126 | 				} | 126 | 				} |
| 127 | 				break; | 127 | 				break; |
| 128 | 			case FDOP_CHDIR: | ||
| 129 | 				ret = __syscall(SYS_chdir, op->path); | ||
| 130 | 				if (ret<0) goto fail; | ||
| 131 | 				break; | ||
| 132 | 			case FDOP_FCHDIR: | ||
| 133 | 				ret = __syscall(SYS_fchdir, op->fd); | ||
| 134 | 				if (ret<0) goto fail; | ||
| 135 | 				break; | ||
| 128 | 			} | 136 | 			} |
| 129 | 		} | 137 | 		} |
| 130 | 	} | 138 | 	} |
lib/libc/musl/src/process/posix_spawn_file_actions_addchdir.c created+18| ... | @@ -0,0 +1,18 @@ | ||
| 1 | #include <spawn.h> | ||
| 2 | #include <stdlib.h> | ||
| 3 | #include <string.h> | ||
| 4 | #include <errno.h> | ||
| 5 | #include "fdop.h" | ||
| 6 | |||
| 7 | int posix_spawn_file_actions_addchdir_np(posix_spawn_file_actions_t *restrict fa, const char *restrict path) | ||
| 8 | { | ||
| 9 | 	struct fdop *op = malloc(sizeof *op + strlen(path) + 1); | ||
| 10 | 	if (!op) return ENOMEM; | ||
| 11 | 	op->cmd = FDOP_CHDIR; | ||
| 12 | 	op->fd = -1; | ||
| 13 | 	strcpy(op->path, path); | ||
| 14 | 	if ((op->next = fa->__actions)) op->next->prev = op; | ||
| 15 | 	op->prev = 0; | ||
| 16 | 	fa->__actions = op; | ||
| 17 | 	return 0; | ||
| 18 | } | ||
lib/libc/musl/src/process/posix_spawn_file_actions_addfchdir.c created+17| ... | @@ -0,0 +1,17 @@ | ||
| 1 | #include <spawn.h> | ||
| 2 | #include <stdlib.h> | ||
| 3 | #include <string.h> | ||
| 4 | #include <errno.h> | ||
| 5 | #include "fdop.h" | ||
| 6 | |||
| 7 | int posix_spawn_file_actions_addfchdir_np(posix_spawn_file_actions_t *fa, int fd) | ||
| 8 | { | ||
| 9 | 	struct fdop *op = malloc(sizeof *op); | ||
| 10 | 	if (!op) return ENOMEM; | ||
| 11 | 	op->cmd = FDOP_FCHDIR; | ||
| 12 | 	op->fd = fd; | ||
| 13 | 	if ((op->next = fa->__actions)) op->next->prev = op; | ||
| 14 | 	op->prev = 0; | ||
| 15 | 	fa->__actions = op; | ||
| 16 | 	return 0; | ||
| 17 | } | ||
lib/libc/musl/src/regex/glob.c+53-6| ... | @@ -8,6 +8,8 @@ | ... | @@ -8,6 +8,8 @@ |
| 8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
| 9 | #include <errno.h> | 9 | #include <errno.h> |
| 10 | #include <stddef.h> | 10 | #include <stddef.h> |
| 11 | #include <unistd.h> | ||
| 12 | #include <pwd.h> | ||
| 11 | 13 | ||
| 12 | struct match | 14 | struct match |
| 13 | { | 15 | { |
| ... | @@ -90,16 +92,23 @@ static int do_glob(char *buf, size_t pos, int type, char *pat, int flags, int (* | ... | @@ -90,16 +92,23 @@ static int do_glob(char *buf, size_t pos, int type, char *pat, int flags, int (* |
| 90 | 	if (!*pat) { | 92 | 	if (!*pat) { |
| 91 | 		/* If we consumed any components above, or if GLOB_MARK is | 93 | 		/* If we consumed any components above, or if GLOB_MARK is |
| 92 | 		 * requested and we don't yet know if the match is a dir, | 94 | 		 * requested and we don't yet know if the match is a dir, |
| 93 | 		 * we must call stat to confirm the file exists and/or | 95 | 		 * we must confirm the file exists and/or determine its type. |
| 94 | 		 * determine its type. */ | 96 | 		 * |
| 97 | 		 * If marking dirs, symlink type is inconclusive; we need the | ||
| 98 | 		 * type for the symlink target, and therefore must try stat | ||
| 99 | 		 * first unless type is known not to be a symlink. Otherwise, | ||
| 100 | 		 * or if that fails, use lstat for determining existence to | ||
| 101 | 		 * avoid false negatives in the case of broken symlinks. */ | ||
| 95 | 		struct stat st; | 102 | 		struct stat st; |
| 96 | 		if ((flags & GLOB_MARK) && type==DT_LNK) type = 0; | 103 | 		if ((flags & GLOB_MARK) && (!type||type==DT_LNK) && !stat(buf, &st)) { |
| 97 | 		if (!type && stat(buf, &st)) { | 104 | 			if (S_ISDIR(st.st_mode)) type = DT_DIR; |
| 105 | 			else type = DT_REG; | ||
| 106 | 		} | ||
| 107 | 		if (!type && lstat(buf, &st)) { | ||
| 98 | 			if (errno!=ENOENT && (errfunc(buf, errno) || (flags & GLOB_ERR))) | 108 | 			if (errno!=ENOENT && (errfunc(buf, errno) || (flags & GLOB_ERR))) |
| 99 | 				return GLOB_ABORTED; | 109 | 				return GLOB_ABORTED; |
| 100 | 			return 0; | 110 | 			return 0; |
| 101 | 		} | 111 | 		} |
| 102 | 		if (!type && S_ISDIR(st.st_mode)) type = DT_DIR; | ||
| 103 | 		if (append(tail, buf, pos, (flags & GLOB_MARK) && type==DT_DIR)) | 112 | 		if (append(tail, buf, pos, (flags & GLOB_MARK) && type==DT_DIR)) |
| 104 | 			return GLOB_NOSPACE; | 113 | 			return GLOB_NOSPACE; |
| 105 | 		return 0; | 114 | 		return 0; |
| ... | @@ -182,6 +191,39 @@ static int sort(const void *a, const void *b) | ... | @@ -182,6 +191,39 @@ static int sort(const void *a, const void *b) |
| 182 | 	return strcmp(*(const char **)a, *(const char **)b); | 191 | 	return strcmp(*(const char **)a, *(const char **)b); |
| 183 | } | 192 | } |
| 184 | 193 | ||
| 194 | static int expand_tilde(char **pat, char *buf, size_t *pos) | ||
| 195 | { | ||
| 196 | 	char *p = *pat + 1; | ||
| 197 | 	size_t i = 0; | ||
| 198 | |||
| 199 | 	char delim, *name_end = __strchrnul(p, '/'); | ||
| 200 | 	if ((delim = *name_end)) *name_end++ = 0; | ||
| 201 | 	*pat = name_end; | ||
| 202 | |||
| 203 | 	char *home = *p ? NULL : getenv("HOME"); | ||
| 204 | 	if (!home) { | ||
| 205 | 		struct passwd pw, *res; | ||
| 206 | 		switch (*p ? getpwnam_r(p, &pw, buf, PATH_MAX, &res) | ||
| 207 | 			 : getpwuid_r(getuid(), &pw, buf, PATH_MAX, &res)) { | ||
| 208 | 		case ENOMEM: | ||
| 209 | 			return GLOB_NOSPACE; | ||
| 210 | 		case 0: | ||
| 211 | 			if (!res) | ||
| 212 | 		default: | ||
| 213 | 				return GLOB_NOMATCH; | ||
| 214 | 		} | ||
| 215 | 		home = pw.pw_dir; | ||
| 216 | 	} | ||
| 217 | 	while (i < PATH_MAX - 2 && *home) | ||
| 218 | 		buf[i++] = *home++; | ||
| 219 | 	if (*home) | ||
| 220 | 		return GLOB_NOMATCH; | ||
| 221 | 	if ((buf[i] = delim)) | ||
| 222 | 		buf[++i] = 0; | ||
| 223 | 	*pos = i; | ||
| 224 | 	return 0; | ||
| 225 | } | ||
| 226 | |||
| 185 | int glob(const char *restrict pat, int flags, int (*errfunc)(const char *path, int err), glob_t *restrict g) | 227 | int glob(const char *restrict pat, int flags, int (*errfunc)(const char *path, int err), glob_t *restrict g) |
| 186 | { | 228 | { |
| 187 | 	struct match head = { .next = NULL }, *tail = &head; | 229 | 	struct match head = { .next = NULL }, *tail = &head; |
| ... | @@ -202,7 +244,12 @@ int glob(const char *restrict pat, int flags, int (*errfunc)(const char *path, i | ... | @@ -202,7 +244,12 @@ int glob(const char *restrict pat, int flags, int (*errfunc)(const char *path, i |
| 202 | 		char *p = strdup(pat); | 244 | 		char *p = strdup(pat); |
| 203 | 		if (!p) return GLOB_NOSPACE; | 245 | 		if (!p) return GLOB_NOSPACE; |
| 204 | 		buf[0] = 0; | 246 | 		buf[0] = 0; |
| 205 | 		error = do_glob(buf, 0, 0, p, flags, errfunc, &tail); | 247 | 		size_t pos = 0; |
| 248 | 		char *s = p; | ||
| 249 | 		if ((flags & (GLOB_TILDE | GLOB_TILDE_CHECK)) && *p == '~') | ||
| 250 | 			error = expand_tilde(&s, buf, &pos); | ||
| 251 | 		if (!error) | ||
| 252 | 			error = do_glob(buf, pos, 0, s, flags, errfunc, &tail); | ||
| 206 | 		free(p); | 253 | 		free(p); |
| 207 | 	} | 254 | 	} |
| 208 | 255 |
lib/libc/musl/src/sched/sched_rr_get_interval.c+14| ... | @@ -3,5 +3,19 @@ | ... | @@ -3,5 +3,19 @@ |
| 3 | 3 | ||
| 4 | int sched_rr_get_interval(pid_t pid, struct timespec *ts) | 4 | int sched_rr_get_interval(pid_t pid, struct timespec *ts) |
| 5 | { | 5 | { |
| 6 | #ifdef SYS_sched_rr_get_interval_time64 | ||
| 7 | 	/* On a 32-bit arch, use the old syscall if it exists. */ | ||
| 8 | 	if (SYS_sched_rr_get_interval != SYS_sched_rr_get_interval_time64) { | ||
| 9 | 		long ts32[2]; | ||
| 10 | 		int r = __syscall(SYS_sched_rr_get_interval, pid, ts32); | ||
| 11 | 		if (!r) { | ||
| 12 | 			ts->tv_sec = ts32[0]; | ||
| 13 | 			ts->tv_nsec = ts32[1]; | ||
| 14 | 		} | ||
| 15 | 		return __syscall_ret(r); | ||
| 16 | 	} | ||
| 17 | #endif | ||
| 18 | 	/* If reaching this point, it's a 64-bit arch or time64-only | ||
| 19 | 	 * 32-bit arch and we can get result directly into timespec. */ | ||
| 6 | 	return syscall(SYS_sched_rr_get_interval, pid, ts); | 20 | 	return syscall(SYS_sched_rr_get_interval, pid, ts); |
| 7 | } | 21 | } |
lib/libc/musl/src/select/pselect.c+17-3| ... | @@ -1,12 +1,26 @@ | ... | @@ -1,12 +1,26 @@ |
| 1 | #include <sys/select.h> | 1 | #include <sys/select.h> |
| 2 | #include <signal.h> | 2 | #include <signal.h> |
| 3 | #include <stdint.h> | 3 | #include <stdint.h> |
| 4 | #include <errno.h> | ||
| 4 | #include "syscall.h" | 5 | #include "syscall.h" |
| 5 | 6 | ||
| 7 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 8 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 9 | |||
| 6 | int pselect(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict efds, const struct timespec *restrict ts, const sigset_t *restrict mask) | 10 | int pselect(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict efds, const struct timespec *restrict ts, const sigset_t *restrict mask) |
| 7 | { | 11 | { |
| 8 | 	syscall_arg_t data[2] = { (uintptr_t)mask, _NSIG/8 }; | 12 | 	syscall_arg_t data[2] = { (uintptr_t)mask, _NSIG/8 }; |
| 9 | 	struct timespec ts_tmp; | 13 | 	time_t s = ts ? ts->tv_sec : 0; |
| 10 | 	if (ts) ts_tmp = *ts; | 14 | 	long ns = ts ? ts->tv_nsec : 0; |
| 11 | 	return syscall_cp(SYS_pselect6, n, rfds, wfds, efds, ts ? &ts_tmp : 0, data); | 15 | #ifdef SYS_pselect6_time64 |
| 16 | 	int r = -ENOSYS; | ||
| 17 | 	if (SYS_pselect6 == SYS_pselect6_time64 || !IS32BIT(s)) | ||
| 18 | 		r = __syscall_cp(SYS_pselect6_time64, n, rfds, wfds, efds, | ||
| 19 | 			ts ? ((long long[]){s, ns}) : 0, data); | ||
| 20 | 	if (SYS_pselect6 == SYS_pselect6_time64 || r!=-ENOSYS) | ||
| 21 | 		return __syscall_ret(r); | ||
| 22 | 	s = CLAMP(s); | ||
| 23 | #endif | ||
| 24 | 	return syscall_cp(SYS_pselect6, n, rfds, wfds, efds, | ||
| 25 | 		ts ? ((long[]){s, ns}) : 0, data); | ||
| 12 | } | 26 | } |
lib/libc/musl/src/select/select.c+32-13| ... | @@ -4,22 +4,41 @@ | ... | @@ -4,22 +4,41 @@ |
| 4 | #include <errno.h> | 4 | #include <errno.h> |
| 5 | #include "syscall.h" | 5 | #include "syscall.h" |
| 6 | 6 | ||
| 7 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 8 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 9 | |||
| 7 | int select(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict efds, struct timeval *restrict tv) | 10 | int select(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict efds, struct timeval *restrict tv) |
| 8 | { | 11 | { |
| 12 | 	time_t s = tv ? tv->tv_sec : 0; | ||
| 13 | 	suseconds_t us = tv ? tv->tv_usec : 0; | ||
| 14 | 	long ns; | ||
| 15 | 	const time_t max_time = (1ULL<<8*sizeof(time_t)-1)-1; | ||
| 16 | |||
| 17 | 	if (s<0 || us<0) return __syscall_ret(-EINVAL); | ||
| 18 | 	if (us/1000000 > max_time - s) { | ||
| 19 | 		s = max_time; | ||
| 20 | 		us = 999999; | ||
| 21 | 		ns = 999999999; | ||
| 22 | 	} else { | ||
| 23 | 		s += us/1000000; | ||
| 24 | 		us %= 1000000; | ||
| 25 | 		ns = us*1000; | ||
| 26 | 	} | ||
| 27 | |||
| 28 | #ifdef SYS_pselect6_time64 | ||
| 29 | 	int r = -ENOSYS; | ||
| 30 | 	if (SYS_pselect6 == SYS_pselect6_time64 || !IS32BIT(s)) | ||
| 31 | 		r = __syscall_cp(SYS_pselect6_time64, n, rfds, wfds, efds, | ||
| 32 | 			tv ? ((long long[]){s, ns}) : 0, | ||
| 33 | 			((syscall_arg_t[]){ 0, _NSIG/8 })); | ||
| 34 | 	if (SYS_pselect6 == SYS_pselect6_time64 || r!=-ENOSYS) | ||
| 35 | 		return __syscall_ret(r); | ||
| 36 | #endif | ||
| 9 | #ifdef SYS_select | 37 | #ifdef SYS_select |
| 10 | 	return syscall_cp(SYS_select, n, rfds, wfds, efds, tv); | 38 | 	return syscall_cp(SYS_select, n, rfds, wfds, efds, |
| 39 | 		tv ? ((long[]){s, us}) : 0); | ||
| 11 | #else | 40 | #else |
| 12 | 	syscall_arg_t data[2] = { 0, _NSIG/8 }; | 41 | 	return syscall_cp(SYS_pselect6, n, rfds, wfds, efds, |
| 13 | 	struct timespec ts; | 42 | 		tv ? ((long[]){s, ns}) : 0, ((syscall_arg_t[]){ 0, _NSIG/8 })); |
| 14 | 	if (tv) { | ||
| 15 | 		if (tv->tv_sec < 0 || tv->tv_usec < 0) | ||
| 16 | 			return __syscall_ret(-EINVAL); | ||
| 17 | 		time_t extra_secs = tv->tv_usec / 1000000; | ||
| 18 | 		ts.tv_nsec = tv->tv_usec % 1000000 * 1000; | ||
| 19 | 		const time_t max_time = (1ULL<<8*sizeof(time_t)-1)-1; | ||
| 20 | 		ts.tv_sec = extra_secs > max_time - tv->tv_sec ? | ||
| 21 | 			max_time : tv->tv_sec + extra_secs; | ||
| 22 | 	} | ||
| 23 | 	return syscall_cp(SYS_pselect6, n, rfds, wfds, efds, tv ? &ts : 0, data); | ||
| 24 | #endif | 43 | #endif |
| 25 | } | 44 | } |
lib/libc/musl/src/signal/getitimer.c+11| ... | @@ -3,5 +3,16 @@ | ... | @@ -3,5 +3,16 @@ |
| 3 | 3 | ||
| 4 | int getitimer(int which, struct itimerval *old) | 4 | int getitimer(int which, struct itimerval *old) |
| 5 | { | 5 | { |
| 6 | 	if (sizeof(time_t) > sizeof(long)) { | ||
| 7 | 		long old32[4]; | ||
| 8 | 		int r = __syscall(SYS_getitimer, which, old32); | ||
| 9 | 		if (!r) { | ||
| 10 | 			old->it_interval.tv_sec = old32[0]; | ||
| 11 | 			old->it_interval.tv_usec = old32[1]; | ||
| 12 | 			old->it_value.tv_sec = old32[2]; | ||
| 13 | 			old->it_value.tv_usec = old32[3]; | ||
| 14 | 		} | ||
| 15 | 		return __syscall_ret(r); | ||
| 16 | 	} | ||
| 6 | 	return syscall(SYS_getitimer, which, old); | 17 | 	return syscall(SYS_getitimer, which, old); |
| 7 | } | 18 | } |
lib/libc/musl/src/signal/setitimer.c+19| ... | @@ -1,7 +1,26 @@ | ... | @@ -1,7 +1,26 @@ |
| 1 | #include <sys/time.h> | 1 | #include <sys/time.h> |
| 2 | #include <errno.h> | ||
| 2 | #include "syscall.h" | 3 | #include "syscall.h" |
| 3 | 4 | ||
| 5 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 6 | |||
| 4 | int setitimer(int which, const struct itimerval *restrict new, struct itimerval *restrict old) | 7 | int setitimer(int which, const struct itimerval *restrict new, struct itimerval *restrict old) |
| 5 | { | 8 | { |
| 9 | 	if (sizeof(time_t) > sizeof(long)) { | ||
| 10 | 		time_t is = new->it_interval.tv_sec, vs = new->it_value.tv_sec; | ||
| 11 | 		long ius = new->it_interval.tv_usec, vus = new->it_value.tv_usec; | ||
| 12 | 		if (!IS32BIT(is) || !IS32BIT(vs)) | ||
| 13 | 			return __syscall_ret(-ENOTSUP); | ||
| 14 | 		long old32[4]; | ||
| 15 | 		int r = __syscall(SYS_setitimer, which, | ||
| 16 | 			((long[]){is, ius, vs, vus}), old32); | ||
| 17 | 		if (!r && old) { | ||
| 18 | 			old->it_interval.tv_sec = old32[0]; | ||
| 19 | 			old->it_interval.tv_usec = old32[1]; | ||
| 20 | 			old->it_value.tv_sec = old32[2]; | ||
| 21 | 			old->it_value.tv_usec = old32[3]; | ||
| 22 | 		} | ||
| 23 | 		return __syscall_ret(r); | ||
| 24 | 	} | ||
| 6 | 	return syscall(SYS_setitimer, which, new, old); | 25 | 	return syscall(SYS_setitimer, which, new, old); |
| 7 | } | 26 | } |
lib/libc/musl/src/signal/sigaction.c+1-1| ... | @@ -7,7 +7,7 @@ | ... | @@ -7,7 +7,7 @@ |
| 7 | #include "lock.h" | 7 | #include "lock.h" |
| 8 | #include "ksigaction.h" | 8 | #include "ksigaction.h" |
| 9 | 9 | ||
| 10 | volatile int dummy_lock[1] = { 0 }; | 10 | static volatile int dummy_lock[1] = { 0 }; |
| 11 | 11 | ||
| 12 | extern hidden volatile int __abort_lock[1]; | 12 | extern hidden volatile int __abort_lock[1]; |
| 13 | 13 |
lib/libc/musl/src/signal/sigtimedwait.c+24-4| ... | @@ -2,11 +2,31 @@ | ... | @@ -2,11 +2,31 @@ |
| 2 | #include <errno.h> | 2 | #include <errno.h> |
| 3 | #include "syscall.h" | 3 | #include "syscall.h" |
| 4 | 4 | ||
| 5 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 6 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 7 | |||
| 8 | static int do_sigtimedwait(const sigset_t *restrict mask, siginfo_t *restrict si, const struct timespec *restrict ts) | ||
| 9 | { | ||
| 10 | #ifdef SYS_rt_sigtimedwait_time64 | ||
| 11 | 	time_t s = ts ? ts->tv_sec : 0; | ||
| 12 | 	long ns = ts ? ts->tv_nsec : 0; | ||
| 13 | 	int r = -ENOSYS; | ||
| 14 | 	if (SYS_rt_sigtimedwait == SYS_rt_sigtimedwait_time64 || !IS32BIT(s)) | ||
| 15 | 		r = __syscall_cp(SYS_rt_sigtimedwait_time64, mask, si, | ||
| 16 | 			ts ? ((long long[]){s, ns}) : 0, _NSIG/8); | ||
| 17 | 	if (SYS_rt_sigtimedwait == SYS_rt_sigtimedwait_time64 || r!=-ENOSYS) | ||
| 18 | 		return r; | ||
| 19 | 	return __syscall_cp(SYS_rt_sigtimedwait, mask, si, | ||
| 20 | 		ts ? ((long[]){CLAMP(s), ns}) : 0, _NSIG/8);; | ||
| 21 | #else | ||
| 22 | 	return __syscall_cp(SYS_rt_sigtimedwait, mask, si, ts, _NSIG/8); | ||
| 23 | #endif | ||
| 24 | } | ||
| 25 | |||
| 5 | int sigtimedwait(const sigset_t *restrict mask, siginfo_t *restrict si, const struct timespec *restrict timeout) | 26 | int sigtimedwait(const sigset_t *restrict mask, siginfo_t *restrict si, const struct timespec *restrict timeout) |
| 6 | { | 27 | { |
| 7 | 	int ret; | 28 | 	int ret; |
| 8 | 	do ret = syscall_cp(SYS_rt_sigtimedwait, mask, | 29 | 	do ret = do_sigtimedwait(mask, si, timeout); |
| 9 | 		si, timeout, _NSIG/8); | 30 | 	while (ret==-EINTR); |
| 10 | 	while (ret<0 && errno==EINTR); | 31 | 	return __syscall_ret(ret); |
| 11 | 	return ret; | ||
| 12 | } | 32 | } |
lib/libc/musl/src/signal/x32/getitimer.c created+7| ... | @@ -0,0 +1,7 @@ | ||
| 1 | #include <sys/time.h> | ||
| 2 | #include "syscall.h" | ||
| 3 | |||
| 4 | int getitimer(int which, struct itimerval *old) | ||
| 5 | { | ||
| 6 | 	return syscall(SYS_getitimer, which, old); | ||
| 7 | } | ||
lib/libc/musl/src/signal/x32/setitimer.c created+7| ... | @@ -0,0 +1,7 @@ | ||
| 1 | #include <sys/time.h> | ||
| 2 | #include "syscall.h" | ||
| 3 | |||
| 4 | int setitimer(int which, const struct itimerval *restrict new, struct itimerval *restrict old) | ||
| 5 | { | ||
| 6 | 	return syscall(SYS_setitimer, which, new, old); | ||
| 7 | } | ||
lib/libc/musl/src/stat/fstat.c+3-11| ... | @@ -1,3 +1,4 @@ | ... | @@ -1,3 +1,4 @@ |
| 1 | #define _BSD_SOURCE | ||
| 1 | #include <sys/stat.h> | 2 | #include <sys/stat.h> |
| 2 | #include <errno.h> | 3 | #include <errno.h> |
| 3 | #include <fcntl.h> | 4 | #include <fcntl.h> |
| ... | @@ -5,17 +6,8 @@ | ... | @@ -5,17 +6,8 @@ |
| 5 | 6 | ||
| 6 | int fstat(int fd, struct stat *st) | 7 | int fstat(int fd, struct stat *st) |
| 7 | { | 8 | { |
| 8 | 	int ret = __syscall(SYS_fstat, fd, st); | 9 | 	if (fd<0) return __syscall_ret(-EBADF); |
| 9 | 	if (ret != -EBADF || __syscall(SYS_fcntl, fd, F_GETFD) < 0) | 10 | 	return fstatat(fd, "", st, AT_EMPTY_PATH); |
| 10 | 		return __syscall_ret(ret); | ||
| 11 | |||
| 12 | 	char buf[15+3*sizeof(int)]; | ||
| 13 | 	__procfdname(buf, fd); | ||
| 14 | #ifdef SYS_stat | ||
| 15 | 	return syscall(SYS_stat, buf, st); | ||
| 16 | #else | ||
| 17 | 	return syscall(SYS_fstatat, AT_FDCWD, buf, st, 0); | ||
| 18 | #endif | ||
| 19 | } | 11 | } |
| 20 | 12 | ||
| 21 | weak_alias(fstat, fstat64); | 13 | weak_alias(fstat, fstat64); |
lib/libc/musl/src/stat/fstatat.c+122-2| ... | @@ -1,9 +1,129 @@ | ... | @@ -1,9 +1,129 @@ |
| 1 | #define _BSD_SOURCE | ||
| 1 | #include <sys/stat.h> | 2 | #include <sys/stat.h> |
| 3 | #include <string.h> | ||
| 4 | #include <fcntl.h> | ||
| 5 | #include <errno.h> | ||
| 6 | #include <stdint.h> | ||
| 7 | #include <sys/sysmacros.h> | ||
| 2 | #include "syscall.h" | 8 | #include "syscall.h" |
| 9 | #include "kstat.h" | ||
| 3 | 10 | ||
| 4 | int fstatat(int fd, const char *restrict path, struct stat *restrict buf, int flag) | 11 | struct statx { |
| 12 | 	uint32_t stx_mask; | ||
| 13 | 	uint32_t stx_blksize; | ||
| 14 | 	uint64_t stx_attributes; | ||
| 15 | 	uint32_t stx_nlink; | ||
| 16 | 	uint32_t stx_uid; | ||
| 17 | 	uint32_t stx_gid; | ||
| 18 | 	uint16_t stx_mode; | ||
| 19 | 	uint16_t pad1; | ||
| 20 | 	uint64_t stx_ino; | ||
| 21 | 	uint64_t stx_size; | ||
| 22 | 	uint64_t stx_blocks; | ||
| 23 | 	uint64_t stx_attributes_mask; | ||
| 24 | 	struct { | ||
| 25 | 		int64_t tv_sec; | ||
| 26 | 		uint32_t tv_nsec; | ||
| 27 | 		int32_t pad; | ||
| 28 | 	} stx_atime, stx_btime, stx_ctime, stx_mtime; | ||
| 29 | 	uint32_t stx_rdev_major; | ||
| 30 | 	uint32_t stx_rdev_minor; | ||
| 31 | 	uint32_t stx_dev_major; | ||
| 32 | 	uint32_t stx_dev_minor; | ||
| 33 | 	uint64_t spare[14]; | ||
| 34 | }; | ||
| 35 | |||
| 36 | static int fstatat_statx(int fd, const char *restrict path, struct stat *restrict st, int flag) | ||
| 37 | { | ||
| 38 | 	struct statx stx; | ||
| 39 | |||
| 40 | 	int ret = __syscall(SYS_statx, fd, path, flag, 0x7ff, &stx); | ||
| 41 | 	if (ret) return ret; | ||
| 42 | |||
| 43 | 	*st = (struct stat){ | ||
| 44 | 		.st_dev = makedev(stx.stx_dev_major, stx.stx_dev_minor), | ||
| 45 | 		.st_ino = stx.stx_ino, | ||
| 46 | 		.st_mode = stx.stx_mode, | ||
| 47 | 		.st_nlink = stx.stx_nlink, | ||
| 48 | 		.st_uid = stx.stx_uid, | ||
| 49 | 		.st_gid = stx.stx_gid, | ||
| 50 | 		.st_rdev = makedev(stx.stx_rdev_major, stx.stx_rdev_minor), | ||
| 51 | 		.st_size = stx.stx_size, | ||
| 52 | 		.st_blksize = stx.stx_blksize, | ||
| 53 | 		.st_blocks = stx.stx_blocks, | ||
| 54 | 		.st_atim.tv_sec = stx.stx_atime.tv_sec, | ||
| 55 | 		.st_atim.tv_nsec = stx.stx_atime.tv_nsec, | ||
| 56 | 		.st_mtim.tv_sec = stx.stx_mtime.tv_sec, | ||
| 57 | 		.st_mtim.tv_nsec = stx.stx_mtime.tv_nsec, | ||
| 58 | 		.st_ctim.tv_sec = stx.stx_ctime.tv_sec, | ||
| 59 | 		.st_ctim.tv_nsec = stx.stx_ctime.tv_nsec, | ||
| 60 | 	}; | ||
| 61 | 	return 0; | ||
| 62 | } | ||
| 63 | |||
| 64 | static int fstatat_kstat(int fd, const char *restrict path, struct stat *restrict st, int flag) | ||
| 65 | { | ||
| 66 | 	int ret; | ||
| 67 | 	struct kstat kst; | ||
| 68 | |||
| 69 | 	if (flag==AT_EMPTY_PATH && fd>=0 && !*path) { | ||
| 70 | 		ret = __syscall(SYS_fstat, fd, &kst); | ||
| 71 | 		if (ret==-EBADF && __syscall(SYS_fcntl, fd, F_GETFD)>=0) { | ||
| 72 | 			ret = __syscall(SYS_fstatat, fd, path, &kst, flag); | ||
| 73 | 			if (ret==-EINVAL) { | ||
| 74 | 				char buf[15+3*sizeof(int)]; | ||
| 75 | 				__procfdname(buf, fd); | ||
| 76 | #ifdef SYS_stat | ||
| 77 | 				ret = __syscall(SYS_stat, buf, &kst); | ||
| 78 | #else | ||
| 79 | 				ret = __syscall(SYS_fstatat, AT_FDCWD, buf, &kst, 0); | ||
| 80 | #endif | ||
| 81 | 			} | ||
| 82 | 		} | ||
| 83 | 	} | ||
| 84 | #ifdef SYS_lstat | ||
| 85 | 	else if ((fd == AT_FDCWD || *path=='/') && flag==AT_SYMLINK_NOFOLLOW) | ||
| 86 | 		ret = __syscall(SYS_lstat, path, &kst); | ||
| 87 | #endif | ||
| 88 | #ifdef SYS_stat | ||
| 89 | 	else if ((fd == AT_FDCWD || *path=='/') && !flag) | ||
| 90 | 		ret = __syscall(SYS_stat, path, &kst); | ||
| 91 | #endif | ||
| 92 | 	else ret = __syscall(SYS_fstatat, fd, path, &kst, flag); | ||
| 93 | |||
| 94 | 	if (ret) return ret; | ||
| 95 | |||
| 96 | 	*st = (struct stat){ | ||
| 97 | 		.st_dev = kst.st_dev, | ||
| 98 | 		.st_ino = kst.st_ino, | ||
| 99 | 		.st_mode = kst.st_mode, | ||
| 100 | 		.st_nlink = kst.st_nlink, | ||
| 101 | 		.st_uid = kst.st_uid, | ||
| 102 | 		.st_gid = kst.st_gid, | ||
| 103 | 		.st_rdev = kst.st_rdev, | ||
| 104 | 		.st_size = kst.st_size, | ||
| 105 | 		.st_blksize = kst.st_blksize, | ||
| 106 | 		.st_blocks = kst.st_blocks, | ||
| 107 | 		.st_atim.tv_sec = kst.st_atime_sec, | ||
| 108 | 		.st_atim.tv_nsec = kst.st_atime_nsec, | ||
| 109 | 		.st_mtim.tv_sec = kst.st_mtime_sec, | ||
| 110 | 		.st_mtim.tv_nsec = kst.st_mtime_nsec, | ||
| 111 | 		.st_ctim.tv_sec = kst.st_ctime_sec, | ||
| 112 | 		.st_ctim.tv_nsec = kst.st_ctime_nsec, | ||
| 113 | 	}; | ||
| 114 | |||
| 115 | 	return 0; | ||
| 116 | } | ||
| 117 | |||
| 118 | int fstatat(int fd, const char *restrict path, struct stat *restrict st, int flag) | ||
| 5 | { | 119 | { |
| 6 | 	return syscall(SYS_fstatat, fd, path, buf, flag); | 120 | 	int ret; |
| 121 | 	if (sizeof((struct kstat){0}.st_atime_sec) < sizeof(time_t)) { | ||
| 122 | 		ret = fstatat_statx(fd, path, st, flag); | ||
| 123 | 		if (ret!=-ENOSYS) return __syscall_ret(ret); | ||
| 124 | 	} | ||
| 125 | 	ret = fstatat_kstat(fd, path, st, flag); | ||
| 126 | 	return __syscall_ret(ret); | ||
| 7 | } | 127 | } |
| 8 | 128 | ||
| 9 | weak_alias(fstatat, fstatat64); | 129 | weak_alias(fstatat, fstatat64); |
lib/libc/musl/src/stat/lstat.c+1-6| ... | @@ -1,14 +1,9 @@ | ... | @@ -1,14 +1,9 @@ |
| 1 | #include <sys/stat.h> | 1 | #include <sys/stat.h> |
| 2 | #include <fcntl.h> | 2 | #include <fcntl.h> |
| 3 | #include "syscall.h" | ||
| 4 | 3 | ||
| 5 | int lstat(const char *restrict path, struct stat *restrict buf) | 4 | int lstat(const char *restrict path, struct stat *restrict buf) |
| 6 | { | 5 | { |
| 7 | #ifdef SYS_lstat | 6 | 	return fstatat(AT_FDCWD, path, buf, AT_SYMLINK_NOFOLLOW); |
| 8 | 	return syscall(SYS_lstat, path, buf); | ||
| 9 | #else | ||
| 10 | 	return syscall(SYS_fstatat, AT_FDCWD, path, buf, AT_SYMLINK_NOFOLLOW); | ||
| 11 | #endif | ||
| 12 | } | 7 | } |
| 13 | 8 | ||
| 14 | weak_alias(lstat, lstat64); | 9 | weak_alias(lstat, lstat64); |
lib/libc/musl/src/stat/stat.c+1-6| ... | @@ -1,14 +1,9 @@ | ... | @@ -1,14 +1,9 @@ |
| 1 | #include <sys/stat.h> | 1 | #include <sys/stat.h> |
| 2 | #include <fcntl.h> | 2 | #include <fcntl.h> |
| 3 | #include "syscall.h" | ||
| 4 | 3 | ||
| 5 | int stat(const char *restrict path, struct stat *restrict buf) | 4 | int stat(const char *restrict path, struct stat *restrict buf) |
| 6 | { | 5 | { |
| 7 | #ifdef SYS_stat | 6 | 	return fstatat(AT_FDCWD, path, buf, 0); |
| 8 | 	return syscall(SYS_stat, path, buf); | ||
| 9 | #else | ||
| 10 | 	return syscall(SYS_fstatat, AT_FDCWD, path, buf, 0); | ||
| 11 | #endif | ||
| 12 | } | 7 | } |
| 13 | 8 | ||
| 14 | weak_alias(stat, stat64); | 9 | weak_alias(stat, stat64); |
lib/libc/musl/src/stat/utimensat.c+33-10| ... | @@ -4,28 +4,51 @@ | ... | @@ -4,28 +4,51 @@ |
| 4 | #include <errno.h> | 4 | #include <errno.h> |
| 5 | #include "syscall.h" | 5 | #include "syscall.h" |
| 6 | 6 | ||
| 7 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 8 | #define NS_SPECIAL(ns) ((ns)==UTIME_NOW || (ns)==UTIME_OMIT) | ||
| 9 | |||
| 7 | int utimensat(int fd, const char *path, const struct timespec times[2], int flags) | 10 | int utimensat(int fd, const char *path, const struct timespec times[2], int flags) |
| 8 | { | 11 | { |
| 9 | 	int r = __syscall(SYS_utimensat, fd, path, times, flags); | 12 | 	int r; |
| 13 | 	if (times && times[0].tv_nsec==UTIME_NOW && times[1].tv_nsec==UTIME_NOW) | ||
| 14 | 		times = 0; | ||
| 15 | #ifdef SYS_utimensat_time64 | ||
| 16 | 	r = -ENOSYS; | ||
| 17 | 	time_t s0=0, s1=0; | ||
| 18 | 	long ns0=0, ns1=0; | ||
| 19 | 	if (times) { | ||
| 20 | 		ns0 = times[0].tv_nsec; | ||
| 21 | 		ns1 = times[1].tv_nsec; | ||
| 22 | 		if (!NS_SPECIAL(ns0)) s0 = times[0].tv_sec; | ||
| 23 | 		if (!NS_SPECIAL(ns1)) s1 = times[1].tv_sec; | ||
| 24 | 	} | ||
| 25 | 	if (SYS_utimensat == SYS_utimensat_time64 || !IS32BIT(s0) || !IS32BIT(s1)) | ||
| 26 | 		r = __syscall(SYS_utimensat_time64, fd, path, times ? | ||
| 27 | 			((long long[]){s0, ns0, s1, ns1}) : 0, flags); | ||
| 28 | 	if (SYS_utimensat == SYS_utimensat_time64 || r!=-ENOSYS) | ||
| 29 | 		return __syscall_ret(r); | ||
| 30 | 	if (!IS32BIT(s0) || !IS32BIT(s1)) | ||
| 31 | 		return __syscall_ret(-ENOTSUP); | ||
| 32 | 	r = __syscall(SYS_utimensat, fd, path, | ||
| 33 | 		times ? ((long[]){s0, ns0, s1, ns1}) : 0, flags); | ||
| 34 | #else | ||
| 35 | 	r = __syscall(SYS_utimensat, fd, path, times, flags); | ||
| 36 | #endif | ||
| 37 | |||
| 10 | #ifdef SYS_futimesat | 38 | #ifdef SYS_futimesat |
| 11 | 	if (r != -ENOSYS || flags) return __syscall_ret(r); | 39 | 	if (r != -ENOSYS || flags) return __syscall_ret(r); |
| 12 | 	struct timeval *tv = 0, tmp[2]; | 40 | 	long *tv=0, tmp[4]; |
| 13 | 	if (times) { | 41 | 	if (times) { |
| 14 | 		int i; | 42 | 		int i; |
| 15 | 		tv = tmp; | 43 | 		tv = tmp; |
| 16 | 		for (i=0; i<2; i++) { | 44 | 		for (i=0; i<2; i++) { |
| 17 | 			if (times[i].tv_nsec >= 1000000000ULL) { | 45 | 			if (times[i].tv_nsec >= 1000000000ULL) { |
| 18 | 				if (times[i].tv_nsec == UTIME_NOW && | 46 | 				if (NS_SPECIAL(times[i].tv_nsec)) |
| 19 | 				 times[1-i].tv_nsec == UTIME_NOW) { | ||
| 20 | 					tv = 0; | ||
| 21 | 					break; | ||
| 22 | 				} | ||
| 23 | 				if (times[i].tv_nsec == UTIME_OMIT) | ||
| 24 | 					return __syscall_ret(-ENOSYS); | 47 | 					return __syscall_ret(-ENOSYS); |
| 25 | 				return __syscall_ret(-EINVAL); | 48 | 				return __syscall_ret(-EINVAL); |
| 26 | 			} | 49 | 			} |
| 27 | 			tmp[i].tv_sec = times[i].tv_sec; | 50 | 			tmp[2*i+0] = times[i].tv_sec; |
| 28 | 			tmp[i].tv_usec = times[i].tv_nsec / 1000; | 51 | 			tmp[2*i+1] = times[i].tv_nsec / 1000; |
| 29 | 		} | 52 | 		} |
| 30 | 	} | 53 | 	} |
| 31 | 54 |
lib/libc/musl/src/stdio/__stdio_seek.c+2-8| ... | @@ -1,13 +1,7 @@ | ... | @@ -1,13 +1,7 @@ |
| 1 | #include "stdio_impl.h" | 1 | #include "stdio_impl.h" |
| 2 | #include <unistd.h> | ||
| 2 | 3 | ||
| 3 | off_t __stdio_seek(FILE *f, off_t off, int whence) | 4 | off_t __stdio_seek(FILE *f, off_t off, int whence) |
| 4 | { | 5 | { |
| 5 | 	off_t ret; | 6 | 	return __lseek(f->fd, off, whence); |
| 6 | #ifdef SYS__llseek | ||
| 7 | 	if (syscall(SYS__llseek, f->fd, off>>32, off, &ret, whence)<0) | ||
| 8 | 		ret = -1; | ||
| 9 | #else | ||
| 10 | 	ret = syscall(SYS_lseek, f->fd, off, whence); | ||
| 11 | #endif | ||
| 12 | 	return ret; | ||
| 13 | } | 7 | } |
lib/libc/musl/src/stdio/vfwprintf.c+2| ... | @@ -53,6 +53,8 @@ static const unsigned char states[]['z'-'A'+1] = { | ... | @@ -53,6 +53,8 @@ static const unsigned char states[]['z'-'A'+1] = { |
| 53 | 	}, { /* 1: l-prefixed */ | 53 | 	}, { /* 1: l-prefixed */ |
| 54 | 		S('d') = LONG, S('i') = LONG, | 54 | 		S('d') = LONG, S('i') = LONG, |
| 55 | 		S('o') = ULONG, S('u') = ULONG, S('x') = ULONG, S('X') = ULONG, | 55 | 		S('o') = ULONG, S('u') = ULONG, S('x') = ULONG, S('X') = ULONG, |
| 56 | 		S('e') = DBL, S('f') = DBL, S('g') = DBL, S('a') = DBL, | ||
| 57 | 		S('E') = DBL, S('F') = DBL, S('G') = DBL, S('A') = DBL, | ||
| 56 | 		S('c') = INT, S('s') = PTR, S('n') = PTR, | 58 | 		S('c') = INT, S('s') = PTR, S('n') = PTR, |
| 57 | 		S('l') = LLPRE, | 59 | 		S('l') = LLPRE, |
| 58 | 	}, { /* 2: ll-prefixed */ | 60 | 	}, { /* 2: ll-prefixed */ |
lib/libc/musl/src/thread/__timedwait.c+22-2| ... | @@ -5,6 +5,27 @@ | ... | @@ -5,6 +5,27 @@ |
| 5 | #include "syscall.h" | 5 | #include "syscall.h" |
| 6 | #include "pthread_impl.h" | 6 | #include "pthread_impl.h" |
| 7 | 7 | ||
| 8 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 9 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 10 | |||
| 11 | static int __futex4_cp(volatile void *addr, int op, int val, const struct timespec *to) | ||
| 12 | { | ||
| 13 | 	int r; | ||
| 14 | #ifdef SYS_futex_time64 | ||
| 15 | 	time_t s = to ? to->tv_sec : 0; | ||
| 16 | 	long ns = to ? to->tv_nsec : 0; | ||
| 17 | 	r = -ENOSYS; | ||
| 18 | 	if (SYS_futex == SYS_futex_time64 || !IS32BIT(s)) | ||
| 19 | 		r = __syscall_cp(SYS_futex_time64, addr, op, val, | ||
| 20 | 			to ? ((long long[]){s, ns}) : 0); | ||
| 21 | 	if (SYS_futex == SYS_futex_time64 || r!=-ENOSYS) return r; | ||
| 22 | 	to = to ? (void *)(long[]){CLAMP(s), ns} : 0; | ||
| 23 | #endif | ||
| 24 | 	r = __syscall_cp(SYS_futex, addr, op, val, to); | ||
| 25 | 	if (r != -ENOSYS) return r; | ||
| 26 | 	return __syscall_cp(SYS_futex, addr, op & ~FUTEX_PRIVATE, val, to); | ||
| 27 | } | ||
| 28 | |||
| 8 | static volatile int dummy = 0; | 29 | static volatile int dummy = 0; |
| 9 | weak_alias(dummy, __eintr_valid_flag); | 30 | weak_alias(dummy, __eintr_valid_flag); |
| 10 | 31 | ||
| ... | @@ -28,8 +49,7 @@ int __timedwait_cp(volatile int *addr, int val, | ... | @@ -28,8 +49,7 @@ int __timedwait_cp(volatile int *addr, int val, |
| 28 | 		top = &to; | 49 | 		top = &to; |
| 29 | 	} | 50 | 	} |
| 30 | 51 | ||
| 31 | 	r = -__syscall_cp(SYS_futex, addr, FUTEX_WAIT|priv, val, top); | 52 | 	r = -__futex4_cp(addr, FUTEX_WAIT|priv, val, top); |
| 32 | 	if (r == ENOSYS) r = -__syscall_cp(SYS_futex, addr, FUTEX_WAIT, val, top); | ||
| 33 | 	if (r != EINTR && r != ETIMEDOUT && r != ECANCELED) r = 0; | 53 | 	if (r != EINTR && r != ETIMEDOUT && r != ECANCELED) r = 0; |
| 34 | 	/* Mitigate bug in old kernels wrongly reporting EINTR for non- | 54 | 	/* Mitigate bug in old kernels wrongly reporting EINTR for non- |
| 35 | 	 * interrupting (SA_RESTART) signal handlers. This is only practical | 55 | 	 * interrupting (SA_RESTART) signal handlers. This is only practical |
lib/libc/musl/src/thread/arm/atomics.s+2-2| ... | @@ -15,10 +15,10 @@ __a_barrier_oldkuser: | ... | @@ -15,10 +15,10 @@ __a_barrier_oldkuser: |
| 15 | 	mov r1,r0 | 15 | 	mov r1,r0 |
| 16 | 	mov r2,sp | 16 | 	mov r2,sp |
| 17 | 	ldr ip,=0xffff0fc0 | 17 | 	ldr ip,=0xffff0fc0 |
| 18 | 	mov lr,pc | 18 | 	bl 1f |
| 19 | 	mov pc,ip | ||
| 20 | 	pop {r0,r1,r2,r3,ip,lr} | 19 | 	pop {r0,r1,r2,r3,ip,lr} |
| 21 | 	bx lr | 20 | 	bx lr |
| 21 | 1:	bx ip | ||
| 22 | 22 | ||
| 23 | .global __a_barrier_v6 | 23 | .global __a_barrier_v6 |
| 24 | .hidden __a_barrier_v6 | 24 | .hidden __a_barrier_v6 |
lib/libc/musl/src/thread/arm/clone.s+3-7| ... | @@ -20,13 +20,9 @@ __clone: | ... | @@ -20,13 +20,9 @@ __clone: |
| 20 | 	bx lr | 20 | 	bx lr |
| 21 | 21 | ||
| 22 | 1:	mov r0,r6 | 22 | 1:	mov r0,r6 |
| 23 | 	tst r5,#1 | 23 | 	bl 3f |
| 24 | 	bne 1f | ||
| 25 | 	mov lr,pc | ||
| 26 | 	mov pc,r5 | ||
| 27 | 2:	mov r7,#1 | 24 | 2:	mov r7,#1 |
| 28 | 	svc 0 | 25 | 	svc 0 |
| 29 | |||
| 30 | 1:	mov lr,pc | ||
| 31 | 	bx r5 | ||
| 32 | 	b 2b | 26 | 	b 2b |
| 27 | |||
| 28 | 3:	bx r5 |
lib/libc/musl/src/thread/arm/syscall_cp.s+4-4| ... | @@ -11,19 +11,19 @@ | ... | @@ -11,19 +11,19 @@ |
| 11 | .type __syscall_cp_asm,%function | 11 | .type __syscall_cp_asm,%function |
| 12 | __syscall_cp_asm: | 12 | __syscall_cp_asm: |
| 13 | 	mov ip,sp | 13 | 	mov ip,sp |
| 14 | 	stmfd sp!,{r4,r5,r6,r7,lr} | 14 | 	stmfd sp!,{r4,r5,r6,r7} |
| 15 | __cp_begin: | 15 | __cp_begin: |
| 16 | 	ldr r0,[r0] | 16 | 	ldr r0,[r0] |
| 17 | 	cmp r0,#0 | 17 | 	cmp r0,#0 |
| 18 | 	blne __cp_cancel | 18 | 	bne __cp_cancel |
| 19 | 	mov r7,r1 | 19 | 	mov r7,r1 |
| 20 | 	mov r0,r2 | 20 | 	mov r0,r2 |
| 21 | 	mov r1,r3 | 21 | 	mov r1,r3 |
| 22 | 	ldmfd ip,{r2,r3,r4,r5,r6} | 22 | 	ldmfd ip,{r2,r3,r4,r5,r6} |
| 23 | 	svc 0 | 23 | 	svc 0 |
| 24 | __cp_end: | 24 | __cp_end: |
| 25 | 	ldmfd sp!,{r4,r5,r6,r7,lr} | 25 | 	ldmfd sp!,{r4,r5,r6,r7} |
| 26 | 	bx lr | 26 | 	bx lr |
| 27 | __cp_cancel: | 27 | __cp_cancel: |
| 28 | 	ldmfd sp!,{r4,r5,r6,r7,lr} | 28 | 	ldmfd sp!,{r4,r5,r6,r7} |
| 29 | 	b __cancel | 29 | 	b __cancel |
lib/libc/musl/src/thread/pthread_create.c+27-30| ... | @@ -172,23 +172,20 @@ void __do_cleanup_pop(struct __ptcb *cb) | ... | @@ -172,23 +172,20 @@ void __do_cleanup_pop(struct __ptcb *cb) |
| 172 | struct start_args { | 172 | struct start_args { |
| 173 | 	void *(*start_func)(void *); | 173 | 	void *(*start_func)(void *); |
| 174 | 	void *start_arg; | 174 | 	void *start_arg; |
| 175 | 	pthread_attr_t *attr; | 175 | 	volatile int control; |
| 176 | 	volatile int *perr; | ||
| 177 | 	unsigned long sig_mask[_NSIG/8/sizeof(long)]; | 176 | 	unsigned long sig_mask[_NSIG/8/sizeof(long)]; |
| 178 | }; | 177 | }; |
| 179 | 178 | ||
| 180 | static int start(void *p) | 179 | static int start(void *p) |
| 181 | { | 180 | { |
| 182 | 	struct start_args *args = p; | 181 | 	struct start_args *args = p; |
| 183 | 	if (args->attr) { | 182 | 	int state = args->control; |
| 184 | 		pthread_t self = __pthread_self(); | 183 | 	if (state) { |
| 185 | 		int ret = -__syscall(SYS_sched_setscheduler, self->tid, | 184 | 		if (a_cas(&args->control, 1, 2)==1) |
| 186 | 			args->attr->_a_policy, &args->attr->_a_prio); | 185 | 			__wait(&args->control, 0, 2, 1); |
| 187 | 		if (a_swap(args->perr, ret)==-2) | 186 | 		if (args->control) { |
| 188 | 			__wake(args->perr, 1, 1); | 187 | 			__syscall(SYS_set_tid_address, &args->control); |
| 189 | 		if (ret) { | 188 | 			for (;;) __syscall(SYS_exit, 0); |
| 190 | 			self->detach_state = DT_DETACHED; | ||
| 191 | 			__pthread_exit(0); | ||
| 192 | 		} | 189 | 		} |
| 193 | 	} | 190 | 	} |
| 194 | 	__syscall(SYS_rt_sigprocmask, SIG_SETMASK, &args->sig_mask, 0, _NSIG/8); | 191 | 	__syscall(SYS_rt_sigprocmask, SIG_SETMASK, &args->sig_mask, 0, _NSIG/8); |
| ... | @@ -233,7 +230,6 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att | ... | @@ -233,7 +230,6 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att |
| 233 | 		| CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID | CLONE_DETACHED; | 230 | 		| CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID | CLONE_DETACHED; |
| 234 | 	pthread_attr_t attr = { 0 }; | 231 | 	pthread_attr_t attr = { 0 }; |
| 235 | 	sigset_t set; | 232 | 	sigset_t set; |
| 236 | 	volatile int err = -1; | ||
| 237 | 233 | ||
| 238 | 	if (!libc.can_do_threads) return ENOSYS; | 234 | 	if (!libc.can_do_threads) return ENOSYS; |
| 239 | 	self = __pthread_self(); | 235 | 	self = __pthread_self(); |
| ... | @@ -325,13 +321,7 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att | ... | @@ -325,13 +321,7 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att |
| 325 | 	struct start_args *args = (void *)stack; | 321 | 	struct start_args *args = (void *)stack; |
| 326 | 	args->start_func = entry; | 322 | 	args->start_func = entry; |
| 327 | 	args->start_arg = arg; | 323 | 	args->start_arg = arg; |
| 328 | 	if (attr._a_sched) { | 324 | 	args->control = attr._a_sched ? 1 : 0; |
| 329 | 		args->attr = &attr; | ||
| 330 | 		args->perr = &err; | ||
| 331 | 	} else { | ||
| 332 | 		args->attr = 0; | ||
| 333 | 		args->perr = 0; | ||
| 334 | 	} | ||
| 335 | 325 | ||
| 336 | 	/* Application signals (but not the synccall signal) must be | 326 | 	/* Application signals (but not the synccall signal) must be |
| 337 | 	 * blocked before the thread list lock can be taken, to ensure | 327 | 	 * blocked before the thread list lock can be taken, to ensure |
| ... | @@ -349,29 +339,36 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att | ... | @@ -349,29 +339,36 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att |
| 349 | 	libc.threads_minus_1++; | 339 | 	libc.threads_minus_1++; |
| 350 | 	ret = __clone((c11 ? start_c11 : start), stack, flags, args, &new->tid, TP_ADJ(new), &__thread_list_lock); | 340 | 	ret = __clone((c11 ? start_c11 : start), stack, flags, args, &new->tid, TP_ADJ(new), &__thread_list_lock); |
| 351 | 341 | ||
| 352 | 	/* If clone succeeded, new thread must be linked on the thread | 342 | 	/* All clone failures translate to EAGAIN. If explicit scheduling |
| 353 | 	 * list before unlocking it, even if scheduling may still fail. */ | 343 | 	 * was requested, attempt it before unlocking the thread list so |
| 344 | 	 * that the failed thread is never exposed and so that we can | ||
| 345 | 	 * clean up all transient resource usage before returning. */ | ||
| 346 | 	if (ret < 0) { | ||
| 347 | 		ret = -EAGAIN; | ||
| 348 | 	} else if (attr._a_sched) { | ||
| 349 | 		ret = __syscall(SYS_sched_setscheduler, | ||
| 350 | 			new->tid, attr._a_policy, &attr._a_prio); | ||
| 351 | 		if (a_swap(&args->control, ret ? 3 : 0)==2) | ||
| 352 | 			__wake(&args->control, 1, 1); | ||
| 353 | 		if (ret) | ||
| 354 | 			__wait(&args->control, 0, 3, 0); | ||
| 355 | 	} | ||
| 356 | |||
| 354 | 	if (ret >= 0) { | 357 | 	if (ret >= 0) { |
| 355 | 		new->next = self->next; | 358 | 		new->next = self->next; |
| 356 | 		new->prev = self; | 359 | 		new->prev = self; |
| 357 | 		new->next->prev = new; | 360 | 		new->next->prev = new; |
| 358 | 		new->prev->next = new; | 361 | 		new->prev->next = new; |
| 362 | 	} else { | ||
| 363 | 		libc.threads_minus_1--; | ||
| 359 | 	} | 364 | 	} |
| 360 | 	__tl_unlock(); | 365 | 	__tl_unlock(); |
| 361 | 	__restore_sigs(&set); | 366 | 	__restore_sigs(&set); |
| 362 | 	__release_ptc(); | 367 | 	__release_ptc(); |
| 363 | 368 | ||
| 364 | 	if (ret < 0) { | 369 | 	if (ret < 0) { |
| 365 | 		libc.threads_minus_1--; | ||
| 366 | 		if (map) __munmap(map, size); | 370 | 		if (map) __munmap(map, size); |
| 367 | 		return EAGAIN; | 371 | 		return -ret; |
| 368 | 	} | ||
| 369 | |||
| 370 | 	if (attr._a_sched) { | ||
| 371 | 		if (a_cas(&err, -1, -2)==-1) | ||
| 372 | 			__wait(&err, 0, -2, 1); | ||
| 373 | 		ret = err; | ||
| 374 | 		if (ret) return ret; | ||
| 375 | 	} | 372 | 	} |
| 376 | 373 | ||
| 377 | 	*res = new; | 374 | 	*res = new; |
lib/libc/musl/src/thread/pthread_join.c+1| ... | @@ -1,3 +1,4 @@ | ... | @@ -1,3 +1,4 @@ |
| 1 | #define _GNU_SOURCE | ||
| 1 | #include "pthread_impl.h" | 2 | #include "pthread_impl.h" |
| 2 | #include <sys/mman.h> | 3 | #include <sys/mman.h> |
| 3 | 4 |
lib/libc/musl/src/thread/pthread_mutex_timedlock.c+19-1| ... | @@ -1,5 +1,23 @@ | ... | @@ -1,5 +1,23 @@ |
| 1 | #include "pthread_impl.h" | 1 | #include "pthread_impl.h" |
| 2 | 2 | ||
| 3 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 4 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 5 | |||
| 6 | static int __futex4(volatile void *addr, int op, int val, const struct timespec *to) | ||
| 7 | { | ||
| 8 | #ifdef SYS_futex_time64 | ||
| 9 | 	time_t s = to ? to->tv_sec : 0; | ||
| 10 | 	long ns = to ? to->tv_nsec : 0; | ||
| 11 | 	int r = -ENOSYS; | ||
| 12 | 	if (SYS_futex == SYS_futex_time64 || !IS32BIT(s)) | ||
| 13 | 		r = __syscall(SYS_futex_time64, addr, op, val, | ||
| 14 | 			to ? ((long long[]){s, ns}) : 0); | ||
| 15 | 	if (SYS_futex == SYS_futex_time64 || r!=-ENOSYS) return r; | ||
| 16 | 	to = to ? (void *)(long[]){CLAMP(s), ns} : 0; | ||
| 17 | #endif | ||
| 18 | 	return __syscall(SYS_futex, addr, op, val, to); | ||
| 19 | } | ||
| 20 | |||
| 3 | static int pthread_mutex_timedlock_pi(pthread_mutex_t *restrict m, const struct timespec *restrict at) | 21 | static int pthread_mutex_timedlock_pi(pthread_mutex_t *restrict m, const struct timespec *restrict at) |
| 4 | { | 22 | { |
| 5 | 	int type = m->_m_type; | 23 | 	int type = m->_m_type; |
| ... | @@ -9,7 +27,7 @@ static int pthread_mutex_timedlock_pi(pthread_mutex_t *restrict m, const struct | ... | @@ -9,7 +27,7 @@ static int pthread_mutex_timedlock_pi(pthread_mutex_t *restrict m, const struct |
| 9 | 27 | ||
| 10 | 	if (!priv) self->robust_list.pending = &m->_m_next; | 28 | 	if (!priv) self->robust_list.pending = &m->_m_next; |
| 11 | 29 | ||
| 12 | 	do e = -__syscall(SYS_futex, &m->_m_lock, FUTEX_LOCK_PI|priv, 0, at); | 30 | 	do e = -__futex4(&m->_m_lock, FUTEX_LOCK_PI|priv, 0, at); |
| 13 | 	while (e==EINTR); | 31 | 	while (e==EINTR); |
| 14 | 	if (e) self->robust_list.pending = 0; | 32 | 	if (e) self->robust_list.pending = 0; |
| 15 | 33 |
lib/libc/musl/src/thread/thrd_sleep.c+2-1| ... | @@ -1,10 +1,11 @@ | ... | @@ -1,10 +1,11 @@ |
| 1 | #include <threads.h> | 1 | #include <threads.h> |
| 2 | #include <time.h> | ||
| 2 | #include <errno.h> | 3 | #include <errno.h> |
| 3 | #include "syscall.h" | 4 | #include "syscall.h" |
| 4 | 5 | ||
| 5 | int thrd_sleep(const struct timespec *req, struct timespec *rem) | 6 | int thrd_sleep(const struct timespec *req, struct timespec *rem) |
| 6 | { | 7 | { |
| 7 | 	int ret = __syscall(SYS_nanosleep, req, rem); | 8 | 	int ret = -__clock_nanosleep(CLOCK_REALTIME, 0, req, rem); |
| 8 | 	switch (ret) { | 9 | 	switch (ret) { |
| 9 | 	case 0: return 0; | 10 | 	case 0: return 0; |
| 10 | 	case -EINTR: return -1; /* value specified by C11 */ | 11 | 	case -EINTR: return -1; /* value specified by C11 */ |
lib/libc/musl/src/thread/x32/syscall_cp.s+4-4| ... | @@ -6,10 +6,10 @@ | ... | @@ -6,10 +6,10 @@ |
| 6 | .global __cp_cancel | 6 | .global __cp_cancel |
| 7 | .hidden __cp_cancel | 7 | .hidden __cp_cancel |
| 8 | .hidden __cancel | 8 | .hidden __cancel |
| 9 | .global __syscall_cp_internal | 9 | .global __syscall_cp_asm |
| 10 | .hidden __syscall_cp_internal | 10 | .hidden __syscall_cp_asm |
| 11 | .type __syscall_cp_internal,@function | 11 | .type __syscall_cp_asm,@function |
| 12 | __syscall_cp_internal: | 12 | __syscall_cp_asm: |
| 13 | 13 | ||
| 14 | __cp_begin: | 14 | __cp_begin: |
| 15 | 	mov (%rdi),%eax | 15 | 	mov (%rdi),%eax |
lib/libc/musl/src/thread/x32/syscall_cp_fixup.c deleted-39| ... | @@ -1,39 +0,0 @@ | ||
| 1 | #include <sys/syscall.h> | ||
| 2 | #include <features.h> | ||
| 3 | |||
| 4 | hidden long __syscall_cp_internal(volatile void*, long long, long long, | ||
| 5 | long long, long long, long long, | ||
| 6 | long long, long long); | ||
| 7 | |||
| 8 | struct __timespec { long long tv_sec; long tv_nsec; }; | ||
| 9 | struct __timespec_kernel { long long tv_sec; long long tv_nsec; }; | ||
| 10 | #define __tsc(X) ((struct __timespec*)(unsigned long)(X)) | ||
| 11 | #define __fixup(X) do { if(X) { \ | ||
| 12 | 	ts->tv_sec = __tsc(X)->tv_sec; \ | ||
| 13 | 	ts->tv_nsec = __tsc(X)->tv_nsec; \ | ||
| 14 | 	(X) = (unsigned long)ts; } } while(0) | ||
| 15 | |||
| 16 | hidden long __syscall_cp_asm (volatile void * foo, long long n, long long a1, | ||
| 17 | long long a2, long long a3, long long a4, | ||
| 18 | long long a5, long long a6) | ||
| 19 | { | ||
| 20 | 	struct __timespec_kernel ts[1]; | ||
| 21 | 	switch (n) { | ||
| 22 | 	case SYS_mq_timedsend: case SYS_mq_timedreceive: case SYS_pselect6: | ||
| 23 | 		__fixup(a5); | ||
| 24 | 		break; | ||
| 25 | 	case SYS_futex: | ||
| 26 | 		if((a2 & (~128 /* FUTEX_PRIVATE_FLAG */)) == 0 /* FUTEX_WAIT */) | ||
| 27 | 			__fixup(a4); | ||
| 28 | 		break; | ||
| 29 | 	case SYS_clock_nanosleep: | ||
| 30 | 	case SYS_rt_sigtimedwait: case SYS_ppoll: | ||
| 31 | 		__fixup(a3); | ||
| 32 | 		break; | ||
| 33 | 	case SYS_nanosleep: | ||
| 34 | 		__fixup(a1); | ||
| 35 | 		break; | ||
| 36 | 	} | ||
| 37 | 	return __syscall_cp_internal(foo, n, a1, a2, a3, a4, a5, a6); | ||
| 38 | } | ||
| 39 | |||
lib/libc/musl/src/time/clock_getres.c+14| ... | @@ -3,5 +3,19 @@ | ... | @@ -3,5 +3,19 @@ |
| 3 | 3 | ||
| 4 | int clock_getres(clockid_t clk, struct timespec *ts) | 4 | int clock_getres(clockid_t clk, struct timespec *ts) |
| 5 | { | 5 | { |
| 6 | #ifdef SYS_clock_getres_time64 | ||
| 7 | 	/* On a 32-bit arch, use the old syscall if it exists. */ | ||
| 8 | 	if (SYS_clock_getres != SYS_clock_getres_time64) { | ||
| 9 | 		long ts32[2]; | ||
| 10 | 		int r = __syscall(SYS_clock_getres, clk, ts32); | ||
| 11 | 		if (!r && ts) { | ||
| 12 | 			ts->tv_sec = ts32[0]; | ||
| 13 | 			ts->tv_nsec = ts32[1]; | ||
| 14 | 		} | ||
| 15 | 		return __syscall_ret(r); | ||
| 16 | 	} | ||
| 17 | #endif | ||
| 18 | 	/* If reaching this point, it's a 64-bit arch or time64-only | ||
| 19 | 	 * 32-bit arch and we can get result directly into timespec. */ | ||
| 6 | 	return syscall(SYS_clock_getres, clk, ts); | 20 | 	return syscall(SYS_clock_getres, clk, ts); |
| 7 | } | 21 | } |
lib/libc/musl/src/time/clock_gettime.c+52| ... | @@ -8,9 +8,41 @@ | ... | @@ -8,9 +8,41 @@ |
| 8 | 8 | ||
| 9 | static void *volatile vdso_func; | 9 | static void *volatile vdso_func; |
| 10 | 10 | ||
| 11 | #ifdef VDSO_CGT32_SYM | ||
| 12 | static void *volatile vdso_func_32; | ||
| 13 | static int cgt_time32_wrap(clockid_t clk, struct timespec *ts) | ||
| 14 | { | ||
| 15 | 	long ts32[2]; | ||
| 16 | 	int (*f)(clockid_t, long[2]) = | ||
| 17 | 		(int (*)(clockid_t, long[2]))vdso_func_32; | ||
| 18 | 	int r = f(clk, ts32); | ||
| 19 | 	if (!r) { | ||
| 20 | 		/* Fallback to syscalls if time32 overflowed. Maybe | ||
| 21 | 		 * we lucked out and somehow migrated to a kernel with | ||
| 22 | 		 * time64 syscalls available. */ | ||
| 23 | 		if (ts32[0] < 0) { | ||
| 24 | 			a_cas_p(&vdso_func, (void *)cgt_time32_wrap, 0); | ||
| 25 | 			return -ENOSYS; | ||
| 26 | 		} | ||
| 27 | 		ts->tv_sec = ts32[0]; | ||
| 28 | 		ts->tv_nsec = ts32[1]; | ||
| 29 | 	} | ||
| 30 | 	return r; | ||
| 31 | } | ||
| 32 | #endif | ||
| 33 | |||
| 11 | static int cgt_init(clockid_t clk, struct timespec *ts) | 34 | static int cgt_init(clockid_t clk, struct timespec *ts) |
| 12 | { | 35 | { |
| 13 | 	void *p = __vdsosym(VDSO_CGT_VER, VDSO_CGT_SYM); | 36 | 	void *p = __vdsosym(VDSO_CGT_VER, VDSO_CGT_SYM); |
| 37 | #ifdef VDSO_CGT32_SYM | ||
| 38 | 	if (!p) { | ||
| 39 | 		void *q = __vdsosym(VDSO_CGT32_VER, VDSO_CGT32_SYM); | ||
| 40 | 		if (q) { | ||
| 41 | 			a_cas_p(&vdso_func_32, 0, q); | ||
| 42 | 			p = cgt_time32_wrap; | ||
| 43 | 		} | ||
| 44 | 	} | ||
| 45 | #endif | ||
| 14 | 	int (*f)(clockid_t, struct timespec *) = | 46 | 	int (*f)(clockid_t, struct timespec *) = |
| 15 | 		(int (*)(clockid_t, struct timespec *))p; | 47 | 		(int (*)(clockid_t, struct timespec *))p; |
| 16 | 	a_cas_p(&vdso_func, (void *)cgt_init, p); | 48 | 	a_cas_p(&vdso_func, (void *)cgt_init, p); |
| ... | @@ -40,6 +72,25 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) | ... | @@ -40,6 +72,25 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) |
| 40 | 	} | 72 | 	} |
| 41 | #endif | 73 | #endif |
| 42 | 74 | ||
| 75 | #ifdef SYS_clock_gettime64 | ||
| 76 | 	r = -ENOSYS; | ||
| 77 | 	if (sizeof(time_t) > 4) | ||
| 78 | 		r = __syscall(SYS_clock_gettime64, clk, ts); | ||
| 79 | 	if (SYS_clock_gettime == SYS_clock_gettime64 || r!=-ENOSYS) | ||
| 80 | 		return __syscall_ret(r); | ||
| 81 | 	long ts32[2]; | ||
| 82 | 	r = __syscall(SYS_clock_gettime, clk, ts32); | ||
| 83 | 	if (r==-ENOSYS && clk==CLOCK_REALTIME) { | ||
| 84 | 		r = __syscall(SYS_gettimeofday, ts32, 0); | ||
| 85 | 		ts32[1] *= 1000; | ||
| 86 | 	} | ||
| 87 | 	if (!r) { | ||
| 88 | 		ts->tv_sec = ts32[0]; | ||
| 89 | 		ts->tv_nsec = ts32[1]; | ||
| 90 | 		return r; | ||
| 91 | 	} | ||
| 92 | 	return __syscall_ret(r); | ||
| 93 | #else | ||
| 43 | 	r = __syscall(SYS_clock_gettime, clk, ts); | 94 | 	r = __syscall(SYS_clock_gettime, clk, ts); |
| 44 | 	if (r == -ENOSYS) { | 95 | 	if (r == -ENOSYS) { |
| 45 | 		if (clk == CLOCK_REALTIME) { | 96 | 		if (clk == CLOCK_REALTIME) { |
| ... | @@ -50,6 +101,7 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) | ... | @@ -50,6 +101,7 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) |
| 50 | 		r = -EINVAL; | 101 | 		r = -EINVAL; |
| 51 | 	} | 102 | 	} |
| 52 | 	return __syscall_ret(r); | 103 | 	return __syscall_ret(r); |
| 104 | #endif | ||
| 53 | } | 105 | } |
| 54 | 106 | ||
| 55 | weak_alias(__clock_gettime, clock_gettime); | 107 | weak_alias(__clock_gettime, clock_gettime); |
lib/libc/musl/src/time/clock_nanosleep.c+32-3| ... | @@ -2,8 +2,37 @@ | ... | @@ -2,8 +2,37 @@ |
| 2 | #include <errno.h> | 2 | #include <errno.h> |
| 3 | #include "syscall.h" | 3 | #include "syscall.h" |
| 4 | 4 | ||
| 5 | int clock_nanosleep(clockid_t clk, int flags, const struct timespec *req, struct timespec *rem) | 5 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) |
| 6 | #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) | ||
| 7 | |||
| 8 | int __clock_nanosleep(clockid_t clk, int flags, const struct timespec *req, struct timespec *rem) | ||
| 6 | { | 9 | { |
| 7 | 	int r = -__syscall_cp(SYS_clock_nanosleep, clk, flags, req, rem); | 10 | 	if (clk == CLOCK_THREAD_CPUTIME_ID) return EINVAL; |
| 8 | 	return clk == CLOCK_THREAD_CPUTIME_ID ? EINVAL : r; | 11 | #ifdef SYS_clock_nanosleep_time64 |
| 12 | 	time_t s = req->tv_sec; | ||
| 13 | 	long ns = req->tv_nsec; | ||
| 14 | 	int r = -ENOSYS; | ||
| 15 | 	if (SYS_clock_nanosleep == SYS_clock_nanosleep_time64 || !IS32BIT(s)) | ||
| 16 | 		r = __syscall_cp(SYS_clock_nanosleep_time64, clk, flags, | ||
| 17 | 			((long long[]){s, ns}), rem); | ||
| 18 | 	if (SYS_clock_nanosleep == SYS_clock_nanosleep_time64 || r!=-ENOSYS) | ||
| 19 | 		return -r; | ||
| 20 | 	long long extra = s - CLAMP(s); | ||
| 21 | 	long ts32[2] = { CLAMP(s), ns }; | ||
| 22 | 	if (clk == CLOCK_REALTIME && !flags) | ||
| 23 | 		r = __syscall_cp(SYS_nanosleep, &ts32, &ts32); | ||
| 24 | 	else | ||
| 25 | 		r = __syscall_cp(SYS_clock_nanosleep, clk, flags, &ts32, &ts32); | ||
| 26 | 	if (r==-EINTR && rem && !(flags & TIMER_ABSTIME)) { | ||
| 27 | 		rem->tv_sec = ts32[0] + extra; | ||
| 28 | 		rem->tv_nsec = ts32[1]; | ||
| 29 | 	} | ||
| 30 | 	return -r; | ||
| 31 | #else | ||
| 32 | 	if (clk == CLOCK_REALTIME && !flags) | ||
| 33 | 		return -__syscall_cp(SYS_nanosleep, req, rem); | ||
| 34 | 	return -__syscall_cp(SYS_clock_nanosleep, clk, flags, req, rem); | ||
| 35 | #endif | ||
| 9 | } | 36 | } |
| 37 | |||
| 38 | weak_alias(__clock_nanosleep, clock_nanosleep); |
lib/libc/musl/src/time/clock_settime.c+17| ... | @@ -1,7 +1,24 @@ | ... | @@ -1,7 +1,24 @@ |
| 1 | #include <time.h> | 1 | #include <time.h> |
| 2 | #include <errno.h> | ||
| 2 | #include "syscall.h" | 3 | #include "syscall.h" |
| 3 | 4 | ||
| 5 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 6 | |||
| 4 | int clock_settime(clockid_t clk, const struct timespec *ts) | 7 | int clock_settime(clockid_t clk, const struct timespec *ts) |
| 5 | { | 8 | { |
| 9 | #ifdef SYS_clock_settime64 | ||
| 10 | 	time_t s = ts->tv_sec; | ||
| 11 | 	long ns = ts->tv_nsec; | ||
| 12 | 	int r = -ENOSYS; | ||
| 13 | 	if (SYS_clock_settime == SYS_clock_settime64 || !IS32BIT(s)) | ||
| 14 | 		r = __syscall(SYS_clock_settime64, clk, | ||
| 15 | 			((long long[]){s, ns})); | ||
| 16 | 	if (SYS_clock_settime == SYS_clock_settime64 || r!=-ENOSYS) | ||
| 17 | 		return __syscall_ret(r); | ||
| 18 | 	if (!IS32BIT(s)) | ||
| 19 | 		return __syscall_ret(-ENOTSUP); | ||
| 20 | 	return syscall(SYS_clock_settime, clk, ((long[]){s, ns})); | ||
| 21 | #else | ||
| 6 | 	return syscall(SYS_clock_settime, clk, ts); | 22 | 	return syscall(SYS_clock_settime, clk, ts); |
| 23 | #endif | ||
| 7 | } | 24 | } |
lib/libc/musl/src/time/nanosleep.c+1-1| ... | @@ -3,5 +3,5 @@ | ... | @@ -3,5 +3,5 @@ |
| 3 | 3 | ||
| 4 | int nanosleep(const struct timespec *req, struct timespec *rem) | 4 | int nanosleep(const struct timespec *req, struct timespec *rem) |
| 5 | { | 5 | { |
| 6 | 	return syscall_cp(SYS_nanosleep, req, rem); | 6 | 	return __syscall_ret(-__clock_nanosleep(CLOCK_REALTIME, 0, req, rem)); |
| 7 | } | 7 | } |
lib/libc/musl/src/time/timer_create.c+2-2| ... | @@ -1,5 +1,6 @@ | ... | @@ -1,5 +1,6 @@ |
| 1 | #include <time.h> | 1 | #include <time.h> |
| 2 | #include <setjmp.h> | 2 | #include <setjmp.h> |
| 3 | #include <limits.h> | ||
| 3 | #include "pthread_impl.h" | 4 | #include "pthread_impl.h" |
| 4 | 5 | ||
| 5 | struct ksigevent { | 6 | struct ksigevent { |
| ... | @@ -48,7 +49,6 @@ static void *start(void *arg) | ... | @@ -48,7 +49,6 @@ static void *start(void *arg) |
| 48 | { | 49 | { |
| 49 | 	pthread_t self = __pthread_self(); | 50 | 	pthread_t self = __pthread_self(); |
| 50 | 	struct start_args *args = arg; | 51 | 	struct start_args *args = arg; |
| 51 | 	int id = self->timer_id; | ||
| 52 | 	jmp_buf jb; | 52 | 	jmp_buf jb; |
| 53 | 53 | ||
| 54 | 	void (*notify)(union sigval) = args->sev->sigev_notify_function; | 54 | 	void (*notify)(union sigval) = args->sev->sigev_notify_function; |
| ... | @@ -65,7 +65,7 @@ static void *start(void *arg) | ... | @@ -65,7 +65,7 @@ static void *start(void *arg) |
| 65 | 		} | 65 | 		} |
| 66 | 		if (self->timer_id < 0) break; | 66 | 		if (self->timer_id < 0) break; |
| 67 | 	} | 67 | 	} |
| 68 | 	__syscall(SYS_timer_delete, id); | 68 | 	__syscall(SYS_timer_delete, self->timer_id & INT_MAX); |
| 69 | 	return 0; | 69 | 	return 0; |
| 70 | } | 70 | } |
| 71 | 71 |
lib/libc/musl/src/time/timer_gettime.c+16| ... | @@ -8,5 +8,21 @@ int timer_gettime(timer_t t, struct itimerspec *val) | ... | @@ -8,5 +8,21 @@ int timer_gettime(timer_t t, struct itimerspec *val) |
| 8 | 		pthread_t td = (void *)((uintptr_t)t << 1); | 8 | 		pthread_t td = (void *)((uintptr_t)t << 1); |
| 9 | 		t = (void *)(uintptr_t)(td->timer_id & INT_MAX); | 9 | 		t = (void *)(uintptr_t)(td->timer_id & INT_MAX); |
| 10 | 	} | 10 | 	} |
| 11 | #ifdef SYS_timer_gettime64 | ||
| 12 | 	int r = -ENOSYS; | ||
| 13 | 	if (sizeof(time_t) > 4) | ||
| 14 | 		r = __syscall(SYS_timer_gettime64, t, val); | ||
| 15 | 	if (SYS_timer_gettime == SYS_timer_gettime64 || r!=-ENOSYS) | ||
| 16 | 		return __syscall_ret(r); | ||
| 17 | 	long val32[4]; | ||
| 18 | 	r = __syscall(SYS_timer_gettime, t, val32); | ||
| 19 | 	if (!r) { | ||
| 20 | 		val->it_interval.tv_sec = val32[0]; | ||
| 21 | 		val->it_interval.tv_nsec = val32[1]; | ||
| 22 | 		val->it_value.tv_sec = val32[2]; | ||
| 23 | 		val->it_value.tv_nsec = val32[3]; | ||
| 24 | 	} | ||
| 25 | 	return __syscall_ret(r); | ||
| 26 | #endif | ||
| 11 | 	return syscall(SYS_timer_gettime, t, val); | 27 | 	return syscall(SYS_timer_gettime, t, val); |
| 12 | } | 28 | } |
lib/libc/musl/src/time/timer_settime.c+25| ... | @@ -2,11 +2,36 @@ | ... | @@ -2,11 +2,36 @@ |
| 2 | #include <limits.h> | 2 | #include <limits.h> |
| 3 | #include "pthread_impl.h" | 3 | #include "pthread_impl.h" |
| 4 | 4 | ||
| 5 | #define IS32BIT(x) !((x)+0x80000000ULL>>32) | ||
| 6 | |||
| 5 | int timer_settime(timer_t t, int flags, const struct itimerspec *restrict val, struct itimerspec *restrict old) | 7 | int timer_settime(timer_t t, int flags, const struct itimerspec *restrict val, struct itimerspec *restrict old) |
| 6 | { | 8 | { |
| 7 | 	if ((intptr_t)t < 0) { | 9 | 	if ((intptr_t)t < 0) { |
| 8 | 		pthread_t td = (void *)((uintptr_t)t << 1); | 10 | 		pthread_t td = (void *)((uintptr_t)t << 1); |
| 9 | 		t = (void *)(uintptr_t)(td->timer_id & INT_MAX); | 11 | 		t = (void *)(uintptr_t)(td->timer_id & INT_MAX); |
| 10 | 	} | 12 | 	} |
| 13 | #ifdef SYS_timer_settime64 | ||
| 14 | 	time_t is = val->it_interval.tv_sec, vs = val->it_value.tv_sec; | ||
| 15 | 	long ins = val->it_interval.tv_nsec, vns = val->it_value.tv_nsec; | ||
| 16 | 	int r = -ENOSYS; | ||
| 17 | 	if (SYS_timer_settime == SYS_timer_settime64 | ||
| 18 | 	 || !IS32BIT(is) || !IS32BIT(vs) || (sizeof(time_t)>4 && old)) | ||
| 19 | 		r = __syscall(SYS_timer_settime64, t, flags, | ||
| 20 | 			((long long[]){is, ins, vs, vns}), old); | ||
| 21 | 	if (SYS_timer_settime == SYS_timer_settime64 || r!=-ENOSYS) | ||
| 22 | 		return __syscall_ret(r); | ||
| 23 | 	if (!IS32BIT(is) || !IS32BIT(vs)) | ||
| 24 | 		return __syscall_ret(-ENOTSUP); | ||
| 25 | 	long old32[4]; | ||
| 26 | 	r = __syscall(SYS_timer_settime, t, flags, | ||
| 27 | 		((long[]){is, ins, vs, vns}), old32); | ||
| 28 | 	if (!r && old) { | ||
| 29 | 		old->it_interval.tv_sec = old32[0]; | ||
| 30 | 		old->it_interval.tv_nsec = old32[1]; | ||
| 31 | 		old->it_value.tv_sec = old32[2]; | ||
| 32 | 		old->it_value.tv_nsec = old32[3]; | ||
| 33 | 	} | ||
| 34 | 	return __syscall_ret(r); | ||
| 35 | #endif | ||
| 11 | 	return syscall(SYS_timer_settime, t, flags, val, old); | 36 | 	return syscall(SYS_timer_settime, t, flags, val, old); |
| 12 | } | 37 | } |
lib/libc/musl/src/unistd/alarm.c+3-3| ... | @@ -4,7 +4,7 @@ | ... | @@ -4,7 +4,7 @@ |
| 4 | 4 | ||
| 5 | unsigned alarm(unsigned seconds) | 5 | unsigned alarm(unsigned seconds) |
| 6 | { | 6 | { |
| 7 | 	struct itimerval it = { .it_value.tv_sec = seconds }; | 7 | 	struct itimerval it = { .it_value.tv_sec = seconds }, old = { 0 }; |
| 8 | 	__syscall(SYS_setitimer, ITIMER_REAL, &it, &it); | 8 | 	setitimer(ITIMER_REAL, &it, &old); |
| 9 | 	return it.it_value.tv_sec + !!it.it_value.tv_usec; | 9 | 	return old.it_value.tv_sec + !!old.it_value.tv_usec; |
| 10 | } | 10 | } |
lib/libc/musl/src/unistd/lseek.c+3-2| ... | @@ -1,7 +1,7 @@ | ... | @@ -1,7 +1,7 @@ |
| 1 | #include <unistd.h> | 1 | #include <unistd.h> |
| 2 | #include "syscall.h" | 2 | #include "syscall.h" |
| 3 | 3 | ||
| 4 | off_t lseek(int fd, off_t offset, int whence) | 4 | off_t __lseek(int fd, off_t offset, int whence) |
| 5 | { | 5 | { |
| 6 | #ifdef SYS__llseek | 6 | #ifdef SYS__llseek |
| 7 | 	off_t result; | 7 | 	off_t result; |
| ... | @@ -11,4 +11,5 @@ off_t lseek(int fd, off_t offset, int whence) | ... | @@ -11,4 +11,5 @@ off_t lseek(int fd, off_t offset, int whence) |
| 11 | #endif | 11 | #endif |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | weak_alias(lseek, lseek64); | 14 | weak_alias(__lseek, lseek); |
| 15 | weak_alias(__lseek, lseek64); |
lib/libc/musl/src/unistd/mipsn32/lseek.c created+20| ... | @@ -0,0 +1,20 @@ | ||
| 1 | #include <unistd.h> | ||
| 2 | #include "syscall.h" | ||
| 3 | |||
| 4 | off_t __lseek(int fd, off_t offset, int whence) | ||
| 5 | { | ||
| 6 | 	register long long r4 __asm__("$4") = fd; | ||
| 7 | 	register long long r5 __asm__("$5") = offset; | ||
| 8 | 	register long long r6 __asm__("$6") = whence; | ||
| 9 | 	register long long r7 __asm__("$7"); | ||
| 10 | 	register long long r2 __asm__("$2") = SYS_lseek; | ||
| 11 | 	__asm__ __volatile__ ( | ||
| 12 | 		"syscall" | ||
| 13 | 		: "+&r"(r2), "=r"(r7) | ||
| 14 | 		: "r"(r4), "r"(r5), "r"(r6) | ||
| 15 | 		: SYSCALL_CLOBBERLIST); | ||
| 16 | 	return r7 ? __syscall_ret(-r2) : r2; | ||
| 17 | } | ||
| 18 | |||
| 19 | weak_alias(__lseek, lseek); | ||
| 20 | weak_alias(__lseek, lseek64); | ||
lib/libc/musl/src/unistd/x32/lseek.c created+15| ... | @@ -0,0 +1,15 @@ | ||
| 1 | #include <unistd.h> | ||
| 2 | #include "syscall.h" | ||
| 3 | |||
| 4 | off_t __lseek(int fd, off_t offset, int whence) | ||
| 5 | { | ||
| 6 | 	off_t ret; | ||
| 7 | 	__asm__ __volatile__ ("syscall" | ||
| 8 | 		: "=a"(ret) | ||
| 9 | 		: "a"(SYS_lseek), "D"(fd), "S"(offset), "d"(whence) | ||
| 10 | 		: "rcx", "r11", "memory"); | ||
| 11 | 	return ret < 0 ? __syscall_ret(ret) : ret; | ||
| 12 | } | ||
| 13 | |||
| 14 | weak_alias(__lseek, lseek); | ||
| 15 | weak_alias(__lseek, lseek64); | ||
lib/std/os/bits/linux/mipsel.zig+1| ... | @@ -484,6 +484,7 @@ pub const Stat = extern struct { | ... | @@ -484,6 +484,7 @@ pub const Stat = extern struct { |
| 484 | blksize: blksize_t, | 484 | blksize: blksize_t, |
| 485 | __pad3: [1]u32, | 485 | __pad3: [1]u32, |
| 486 | blocks: blkcnt_t, | 486 | blocks: blkcnt_t, |
| 487 | __pad4: [14]usize, | ||
| 487 | 488 | ||
| 488 | pub fn atime(self: Stat) timespec { | 489 | pub fn atime(self: Stat) timespec { |
| 489 | return self.atim; | 490 | return self.atim; |
src/install_files.h+8-1| ... | @@ -148,6 +148,7 @@ static const char *ZIG_MUSL_SRC_FILES[] = { | ... | @@ -148,6 +148,7 @@ static const char *ZIG_MUSL_SRC_FILES[] = { |
| 148 | "musl/src/env/clearenv.c", | 148 | "musl/src/env/clearenv.c", |
| 149 | "musl/src/env/getenv.c", | 149 | "musl/src/env/getenv.c", |
| 150 | "musl/src/env/putenv.c", | 150 | "musl/src/env/putenv.c", |
| 151 | "musl/src/env/secure_getenv.c", | ||
| 151 | "musl/src/env/setenv.c", | 152 | "musl/src/env/setenv.c", |
| 152 | "musl/src/env/unsetenv.c", | 153 | "musl/src/env/unsetenv.c", |
| 153 | "musl/src/errno/__errno_location.c", | 154 | "musl/src/errno/__errno_location.c", |
| ... | @@ -311,6 +312,7 @@ static const char *ZIG_MUSL_SRC_FILES[] = { | ... | @@ -311,6 +312,7 @@ static const char *ZIG_MUSL_SRC_FILES[] = { |
| 311 | "musl/src/linux/chroot.c", | 312 | "musl/src/linux/chroot.c", |
| 312 | "musl/src/linux/clock_adjtime.c", | 313 | "musl/src/linux/clock_adjtime.c", |
| 313 | "musl/src/linux/clone.c", | 314 | "musl/src/linux/clone.c", |
| 315 | "musl/src/linux/copy_file_range.c", | ||
| 314 | "musl/src/linux/epoll.c", | 316 | "musl/src/linux/epoll.c", |
| 315 | "musl/src/linux/eventfd.c", | 317 | "musl/src/linux/eventfd.c", |
| 316 | "musl/src/linux/fallocate.c", | 318 | "musl/src/linux/fallocate.c", |
| ... | @@ -1098,8 +1100,10 @@ static const char *ZIG_MUSL_SRC_FILES[] = { | ... | @@ -1098,8 +1100,10 @@ static const char *ZIG_MUSL_SRC_FILES[] = { |
| 1098 | "musl/src/process/fork.c", | 1100 | "musl/src/process/fork.c", |
| 1099 | "musl/src/process/i386/vfork.s", | 1101 | "musl/src/process/i386/vfork.s", |
| 1100 | "musl/src/process/posix_spawn.c", | 1102 | "musl/src/process/posix_spawn.c", |
| 1103 | "musl/src/process/posix_spawn_file_actions_addchdir.c", | ||
| 1101 | "musl/src/process/posix_spawn_file_actions_addclose.c", | 1104 | "musl/src/process/posix_spawn_file_actions_addclose.c", |
| 1102 | "musl/src/process/posix_spawn_file_actions_adddup2.c", | 1105 | "musl/src/process/posix_spawn_file_actions_adddup2.c", |
| 1106 | "musl/src/process/posix_spawn_file_actions_addfchdir.c", | ||
| 1103 | "musl/src/process/posix_spawn_file_actions_addopen.c", | 1107 | "musl/src/process/posix_spawn_file_actions_addopen.c", |
| 1104 | "musl/src/process/posix_spawn_file_actions_destroy.c", | 1108 | "musl/src/process/posix_spawn_file_actions_destroy.c", |
| 1105 | "musl/src/process/posix_spawn_file_actions_init.c", | 1109 | "musl/src/process/posix_spawn_file_actions_init.c", |
| ... | @@ -1251,7 +1255,9 @@ static const char *ZIG_MUSL_SRC_FILES[] = { | ... | @@ -1251,7 +1255,9 @@ static const char *ZIG_MUSL_SRC_FILES[] = { |
| 1251 | "musl/src/signal/sigtimedwait.c", | 1255 | "musl/src/signal/sigtimedwait.c", |
| 1252 | "musl/src/signal/sigwait.c", | 1256 | "musl/src/signal/sigwait.c", |
| 1253 | "musl/src/signal/sigwaitinfo.c", | 1257 | "musl/src/signal/sigwaitinfo.c", |
| 1258 | "musl/src/signal/x32/getitimer.c", | ||
| 1254 | "musl/src/signal/x32/restore.s", | 1259 | "musl/src/signal/x32/restore.s", |
| 1260 | "musl/src/signal/x32/setitimer.c", | ||
| 1255 | "musl/src/signal/x32/sigsetjmp.s", | 1261 | "musl/src/signal/x32/sigsetjmp.s", |
| 1256 | "musl/src/signal/x86_64/restore.s", | 1262 | "musl/src/signal/x86_64/restore.s", |
| 1257 | "musl/src/signal/x86_64/sigsetjmp.s", | 1263 | "musl/src/signal/x86_64/sigsetjmp.s", |
| ... | @@ -1707,7 +1713,6 @@ static const char *ZIG_MUSL_SRC_FILES[] = { | ... | @@ -1707,7 +1713,6 @@ static const char *ZIG_MUSL_SRC_FILES[] = { |
| 1707 | "musl/src/thread/x32/__unmapself.s", | 1713 | "musl/src/thread/x32/__unmapself.s", |
| 1708 | "musl/src/thread/x32/clone.s", | 1714 | "musl/src/thread/x32/clone.s", |
| 1709 | "musl/src/thread/x32/syscall_cp.s", | 1715 | "musl/src/thread/x32/syscall_cp.s", |
| 1710 | "musl/src/thread/x32/syscall_cp_fixup.c", | ||
| 1711 | "musl/src/thread/x86_64/__set_thread_area.s", | 1716 | "musl/src/thread/x86_64/__set_thread_area.s", |
| 1712 | "musl/src/thread/x86_64/__unmapself.s", | 1717 | "musl/src/thread/x86_64/__unmapself.s", |
| 1713 | "musl/src/thread/x86_64/clone.s", | 1718 | "musl/src/thread/x86_64/clone.s", |
| ... | @@ -1791,6 +1796,7 @@ static const char *ZIG_MUSL_SRC_FILES[] = { | ... | @@ -1791,6 +1796,7 @@ static const char *ZIG_MUSL_SRC_FILES[] = { |
| 1791 | "musl/src/unistd/lseek.c", | 1796 | "musl/src/unistd/lseek.c", |
| 1792 | "musl/src/unistd/mips/pipe.s", | 1797 | "musl/src/unistd/mips/pipe.s", |
| 1793 | "musl/src/unistd/mips64/pipe.s", | 1798 | "musl/src/unistd/mips64/pipe.s", |
| 1799 | "musl/src/unistd/mipsn32/lseek.c", | ||
| 1794 | "musl/src/unistd/mipsn32/pipe.s", | 1800 | "musl/src/unistd/mipsn32/pipe.s", |
| 1795 | "musl/src/unistd/nice.c", | 1801 | "musl/src/unistd/nice.c", |
| 1796 | "musl/src/unistd/pause.c", | 1802 | "musl/src/unistd/pause.c", |
| ... | @@ -1835,5 +1841,6 @@ static const char *ZIG_MUSL_SRC_FILES[] = { | ... | @@ -1835,5 +1841,6 @@ static const char *ZIG_MUSL_SRC_FILES[] = { |
| 1835 | "musl/src/unistd/usleep.c", | 1841 | "musl/src/unistd/usleep.c", |
| 1836 | "musl/src/unistd/write.c", | 1842 | "musl/src/unistd/write.c", |
| 1837 | "musl/src/unistd/writev.c", | 1843 | "musl/src/unistd/writev.c", |
| 1844 | "musl/src/unistd/x32/lseek.c", | ||
| 1838 | }; | 1845 | }; |
| 1839 | #endif | 1846 | #endif |