commit 67e7b20eb256baec225b3d7df1f03d731bf5e939 Author: Mark Wielaard Date: Fri Dec 10 17:41:59 2021 +0100 Implement linux rseq syscall as ENOSYS This implements rseq for amd64, arm, arm64, ppc32, ppc64, s390x and x86 linux as ENOSYS (without warning). glibc will start using rseq to accelerate sched_getcpu, if available. This would cause a warning from valgrind every time a new thread is started. Real rseq (restartable sequences) support is pretty hard, so for now just explicitly return ENOSYS (just like we do for clone3). https://sourceware.org/pipermail/libc-alpha/2021-December/133656.html diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 5062324a1..18b25f80a 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -862,6 +862,8 @@ static SyscallTableEntry syscall_table[] = { LINXY(__NR_statx, sys_statx), // 332 + GENX_(__NR_rseq, sys_ni_syscall), // 334 + LINX_(__NR_membarrier, sys_membarrier), // 324 LINX_(__NR_copy_file_range, sys_copy_file_range), // 326 diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index 556dd844b..d583cef0c 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -1024,6 +1024,7 @@ static SyscallTableEntry syscall_main_table[] = { LINX_(__NR_pwritev2, sys_pwritev2), // 393 LINXY(__NR_statx, sys_statx), // 397 + GENX_(__NR_rseq, sys_ni_syscall), // 398 LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c index b87107727..2066a38ea 100644 --- a/coregrind/m_syswrap/syswrap-arm64-linux.c +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c @@ -823,8 +823,9 @@ static SyscallTableEntry syscall_main_table[] = { // (__NR_pkey_mprotect, sys_ni_syscall), // 288 // (__NR_pkey_alloc, sys_ni_syscall), // 289 // (__NR_pkey_free, sys_ni_syscall), // 290 + LINXY(__NR_statx, sys_statx), // 291 - LINXY(__NR_statx, sys_statx), // 397 + GENX_(__NR_rseq, sys_ni_syscall), // 293 LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 6263ab845..637b2504e 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -1028,6 +1028,8 @@ static SyscallTableEntry syscall_table[] = { LINXY(__NR_statx, sys_statx), // 383 + GENX_(__NR_rseq, sys_ni_syscall), // 387 + LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index a26b41c32..93956d3cc 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -1019,6 +1019,8 @@ static SyscallTableEntry syscall_table[] = { LINXY(__NR_statx, sys_statx), // 383 + GENX_(__NR_rseq, sys_ni_syscall), // 387 + LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index 5c9209859..73f9684c4 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -860,6 +860,8 @@ static SyscallTableEntry syscall_table[] = { LINXY(__NR_statx, sys_statx), // 379 + GENX_(__NR_rseq, sys_ni_syscall), // 381 + LINXY(__NR_io_uring_setup, sys_io_uring_setup), // 425 LINXY(__NR_io_uring_enter, sys_io_uring_enter), // 426 LINXY(__NR_io_uring_register, sys_io_uring_register), // 427 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 1d8f45d33..8662ff501 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -1619,6 +1619,8 @@ static SyscallTableEntry syscall_table[] = { /* Explicitly not supported on i386 yet. */ GENX_(__NR_arch_prctl, sys_ni_syscall), // 384 + GENX_(__NR_rseq, sys_ni_syscall), // 386 + LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403 LINX_(__NR_clock_settime64, sys_clock_settime64), // 404 diff --git a/include/vki/vki-scnums-arm-linux.h b/include/vki/vki-scnums-arm-linux.h index ff560e19d..485db8b26 100644 --- a/include/vki/vki-scnums-arm-linux.h +++ b/include/vki/vki-scnums-arm-linux.h @@ -432,6 +432,7 @@ #define __NR_pkey_alloc 395 #define __NR_pkey_free 396 #define __NR_statx 397 +#define __NR_rseq 398 diff --git a/include/vki/vki-scnums-arm64-linux.h b/include/vki/vki-scnums-arm64-linux.h index 9aa3b2b5f..acdfb39c6 100644 --- a/include/vki/vki-scnums-arm64-linux.h +++ b/include/vki/vki-scnums-arm64-linux.h @@ -323,9 +323,11 @@ #define __NR_pkey_alloc 289 #define __NR_pkey_free 290 #define __NR_statx 291 +#define __NR_io_pgetevents 291 +#define __NR_rseq 293 #undef __NR_syscalls -#define __NR_syscalls 292 +#define __NR_syscalls 294 ///* // * All syscalls below here should go away really, diff --git a/include/vki/vki-scnums-ppc32-linux.h b/include/vki/vki-scnums-ppc32-linux.h index 6987ad941..08fa77df0 100644 --- a/include/vki/vki-scnums-ppc32-linux.h +++ b/include/vki/vki-scnums-ppc32-linux.h @@ -415,6 +415,7 @@ #define __NR_pkey_alloc 384 #define __NR_pkey_free 385 #define __NR_pkey_mprotect 386 +#define __NR_rseq 387 #endif /* __VKI_SCNUMS_PPC32_LINUX_H */ diff --git a/include/vki/vki-scnums-ppc64-linux.h b/include/vki/vki-scnums-ppc64-linux.h index 6827964fd..a76fa6d32 100644 --- a/include/vki/vki-scnums-ppc64-linux.h +++ b/include/vki/vki-scnums-ppc64-linux.h @@ -407,6 +407,7 @@ #define __NR_pkey_alloc 384 #define __NR_pkey_free 385 #define __NR_pkey_mprotect 386 +#define __NR_rseq 387 #endif /* __VKI_SCNUMS_PPC64_LINUX_H */ diff --git a/include/vki/vki-scnums-s390x-linux.h b/include/vki/vki-scnums-s390x-linux.h index 6487e20c9..869c04584 100644 --- a/include/vki/vki-scnums-s390x-linux.h +++ b/include/vki/vki-scnums-s390x-linux.h @@ -342,8 +342,11 @@ #define __NR_s390_guarded_storage 378 #define __NR_statx 379 #define __NR_s390_sthyi 380 +#define __NR_kexec_file_load 381 +#define __NR_io_pgetevents 382 +#define __NR_rseq 383 -#define NR_syscalls 381 +#define NR_syscalls 384 /* * There are some system calls that are not present on 64 bit, some