|
From: Martin C. <mc...@so...> - 2025-10-10 07:32:14
|
https://sourceware.org/cgit/valgrind/commit/?id=c3f8f3ceb4ba6942993762f82911a670fa128789 commit c3f8f3ceb4ba6942993762f82911a670fa128789 Author: Martin Cermak <mc...@re...> Date: Wed Oct 8 10:07:30 2025 +0200 Wrap swapon and swapoff syscalls on non-mips arches. Drop the mips-specific syswraps for swapon and swapoff syscalls. Instead, wrap these syscalls on all the arches. https://bugs.kde.org/show_bug.cgi?id=368791 Diff: --- NEWS | 1 + coregrind/m_syswrap/priv_syswrap-linux.h | 3 +++ coregrind/m_syswrap/syswrap-amd64-linux.c | 4 ++-- coregrind/m_syswrap/syswrap-arm-linux.c | 4 ++-- coregrind/m_syswrap/syswrap-arm64-linux.c | 4 ++-- coregrind/m_syswrap/syswrap-linux.c | 13 +++++++++++++ coregrind/m_syswrap/syswrap-mips32-linux.c | 4 ++-- coregrind/m_syswrap/syswrap-mips64-linux.c | 18 ++---------------- coregrind/m_syswrap/syswrap-nanomips-linux.c | 18 ++---------------- coregrind/m_syswrap/syswrap-ppc32-linux.c | 4 ++-- coregrind/m_syswrap/syswrap-ppc64-linux.c | 4 ++-- coregrind/m_syswrap/syswrap-riscv64-linux.c | 2 ++ coregrind/m_syswrap/syswrap-s390x-linux.c | 4 ++-- coregrind/m_syswrap/syswrap-x86-linux.c | 4 ++-- 14 files changed, 39 insertions(+), 48 deletions(-) diff --git a/NEWS b/NEWS index ca3f9fca4a..b097e3789f 100644 --- a/NEWS +++ b/NEWS @@ -72,6 +72,7 @@ are not entered into bugzilla tend to get forgotten about or ignored. 309554 Wrap syscall remap_file_pages (216) 331311 Valgrind shows open files in /proc/self/fd that don't work for the process 338803 Handling of dwz debug alt files or cross-CU is broken +368791 Handle swapon and swapoff syscalls as linux generic 369030 Wrap linux syscall: 171 (setdomainname) 388526 Inconsistent severity in message text: "WARNING: Serious error" 418756 MAP_FIXED_NOREPLACE mmap flag unsupported diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 53aa1b582d..ca462e896f 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -288,6 +288,9 @@ DECL_TEMPLATE(linux, sys_init_module); DECL_TEMPLATE(linux, sys_finit_module); DECL_TEMPLATE(linux, sys_delete_module); +DECL_TEMPLATE(linux, sys_swapon); +DECL_TEMPLATE(linux, sys_swapoff); + // Linux-specific (oprofile-related) DECL_TEMPLATE(linux, sys_lookup_dcookie); // (*/32/64) L diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 4a3bad55f4..838bf5e848 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -670,8 +670,8 @@ static SyscallTableEntry syscall_table[] = { LINX_(__NR_mount, sys_mount), // 165 LINX_(__NR_umount2, sys_umount), // 166 - // (__NR_swapon, sys_swapon), // 167 - // (__NR_swapoff, sys_swapoff), // 168 + LINX_(__NR_swapon, sys_swapon), // 167 + LINX_(__NR_swapoff, sys_swapoff), // 168 // (__NR_reboot, sys_reboot), // 169 GENX_(__NR_sethostname, sys_sethostname), // 170 diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index f55ed05e61..1fda7ba8a0 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -653,7 +653,7 @@ static SyscallTableEntry syscall_main_table[] = { //zz GENXY(__NR_readlink, sys_readlink), // 85 //zz // (__NR_uselib, sys_uselib), // 86 */Linux -//zz // (__NR_swapon, sys_swapon), // 87 */Linux + LINX_(__NR_swapon, sys_swapon), // 87 */Linux //zz // (__NR_reboot, sys_reboot), // 88 */Linux //zz // (__NR_readdir, old_readdir), // 89 -- superseded //zz @@ -687,7 +687,7 @@ static SyscallTableEntry syscall_main_table[] = { // PLAXY(__NR_vm86old, sys_vm86old), // 113 __NR_syscall... weird GENXY(__NR_wait4, sys_wait4), // 114 //zz -//zz // (__NR_swapoff, sys_swapoff), // 115 */Linux + LINX_(__NR_swapoff, sys_swapoff), // 115 */Linux LINXY(__NR_sysinfo, sys_sysinfo), // 116 // _____(__NR_ipc, sys_ipc), // 117 GENX_(__NR_fsync, sys_fsync), // 118 diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c index b28b4598c0..175002e6ba 100644 --- a/coregrind/m_syswrap/syswrap-arm64-linux.c +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c @@ -772,8 +772,8 @@ static SyscallTableEntry syscall_main_table[] = { GENX_(__NR_execve, sys_execve), // 221 PLAX_(__NR_mmap, sys_mmap), // 222 PLAX_(__NR_fadvise64, sys_fadvise64), // 223 - // (__NR_swapon, sys_swapon), // 224 - // (__NR_swapoff, sys_swapoff), // 225 + LINX_(__NR_swapon, sys_swapon), // 224 + LINX_(__NR_swapoff, sys_swapoff), // 225 GENXY(__NR_mprotect, sys_mprotect), // 226 GENX_(__NR_msync, sys_msync), // 227 GENX_(__NR_mlock, sys_mlock), // 228 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index d891ac6daa..1402c3d1f5 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -2133,6 +2133,19 @@ POST(sys_ppoll_time64) ppoll_post_helper (tid, arrghs, status); } +PRE(sys_swapon) +{ + PRINT("sys_swapon ( %#lx, %#lx )", ARG1, ARG2); + PRE_REG_READ2(long, "swapon", const void *, path, int, flags); + PRE_MEM_RASCIIZ( "swapon(path)", ARG1); +} + +PRE(sys_swapoff) +{ + PRINT("sys_swapoff ( %#lx )", ARG1); + PRE_REG_READ1(long, "swapoff", const void *, path); + PRE_MEM_RASCIIZ( "swapoff(path)", ARG1); +} /* --------------------------------------------------------------------- epoll_* wrappers diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index c4d7a66206..4edfe8a703 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -852,7 +852,7 @@ static SyscallTableEntry syscall_main_table[] = { //.. // (__NR_oldlstat, sys_lstat), // 84 GENXY (__NR_readlink, sys_readlink), // 85 //.. // (__NR_uselib, sys_uselib), // 86 - //.. // (__NR_swapon, sys_swapon), // 87 + LINX_ (__NR_swapon, sys_swapon), // 87 //.. // (__NR_reboot, sys_reboot), // 88 //.. // (__NR_readdir, old_readdir), // 89 PLAX_ (__NR_mmap, sys_mmap), // 90 @@ -880,7 +880,7 @@ static SyscallTableEntry syscall_main_table[] = { //.. GENX_(__NR_idle, sys_ni_syscall), // 112 //.. // (__NR_vm86old, sys_vm86old), // 113 GENXY (__NR_wait4, sys_wait4), // 114 - //.. // (__NR_swapoff, sys_swapoff), // 115 + LINX_ (__NR_swapoff, sys_swapoff), // 115 LINXY (__NR_sysinfo, sys_sysinfo), // 116 LINXY (__NR_ipc, sys_ipc), // 117 GENX_ (__NR_fsync, sys_fsync), // 118 diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c index 45af0a3fd9..4fb6f060e3 100644 --- a/coregrind/m_syswrap/syswrap-mips64-linux.c +++ b/coregrind/m_syswrap/syswrap-mips64-linux.c @@ -215,8 +215,6 @@ SysRes sys_set_tls ( ThreadId tid, Addr tlsptr ) file, but that requires even more macro magic. */ DECL_TEMPLATE (mips_linux, sys_set_thread_area); -DECL_TEMPLATE (mips_linux, sys_swapon); -DECL_TEMPLATE (mips_linux, sys_swapoff); DECL_TEMPLATE (mips_linux, sys_sethostname); DECL_TEMPLATE (mips_linux, sys_reboot); DECL_TEMPLATE (mips_linux, sys_cacheflush); @@ -236,18 +234,6 @@ PRE(sys_sched_rr_get_interval) *flags |= SfMayBlock; } -PRE(sys_swapon) -{ - PRINT("sys_swapon ( %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )", ARG1, ARG2); - PRE_REG_READ2(long, "swapon", const void *, path, int, flags); -} - -PRE(sys_swapoff) -{ - PRINT("sys_swapoff ( %#" FMT_REGWORD "x )", ARG1); - PRE_REG_READ1(long, "swapoff", const void *, path); -} - /* Very much MIPS specific */ PRE(sys_cacheflush) { @@ -648,8 +634,8 @@ static SyscallTableEntry syscall_main_table[] = { LINX_ (__NR_mount, sys_mount), LINX_ (__NR_mount_setattr, sys_mount_setattr), LINX_ (__NR_umount2, sys_umount), - PLAX_ (__NR_swapon, sys_swapon), - PLAX_ (__NR_swapoff, sys_swapoff), + LINX_ (__NR_swapon, sys_swapon), + LINX_ (__NR_swapoff, sys_swapoff), PLAX_ (__NR_reboot, sys_reboot), PLAX_ (__NR_sethostname, sys_sethostname), LINX_ (__NR_setdomainname, sys_setdomainname), diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c index 94e4ce4d43..f1a0b3c593 100644 --- a/coregrind/m_syswrap/syswrap-nanomips-linux.c +++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c @@ -383,8 +383,6 @@ DECL_TEMPLATE (mips_linux, sys_ptrace); DECL_TEMPLATE (mips_linux, sys_unshare); DECL_TEMPLATE (mips_linux, sys_reboot); DECL_TEMPLATE (mips_linux, sys_sethostname); -DECL_TEMPLATE (mips_linux, sys_swapon); -DECL_TEMPLATE (mips_linux, sys_swapoff); PRE(sys_mmap2) { @@ -519,18 +517,6 @@ PRE(sys_sethostname) PRE_REG_READ2 (long, "sethostname", const void *, name, int, len); } -PRE(sys_swapon) -{ - PRINT("sys_swapon ( %#lx, %#lx )", ARG1, ARG2); - PRE_REG_READ2(long, "swapon", const void *, path, int, flags); -} - -PRE(sys_swapoff) -{ - PRINT("sys_swapoff ( %#lx )", ARG1); - PRE_REG_READ1(long, "swapoff", const void *, path); -} - #undef PRE #undef POST @@ -765,8 +751,8 @@ static SyscallTableEntry syscall_main_table[] = { GENX_ (__NR_execve, sys_execve), PLAX_ (__NR_mmap2, sys_mmap2), LINX_ (__NR_fadvise64_64, sys_fadvise64_64), - PLAX_ (__NR_swapon, sys_swapon), - PLAX_ (__NR_swapoff, sys_swapoff), + LINX_ (__NR_swapon, sys_swapon), + LINX_ (__NR_swapoff, sys_swapoff), GENXY (__NR_mprotect, sys_mprotect), GENX_ (__NR_msync, sys_msync), GENX_ (__NR_mlock, sys_mlock), diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 8bb0a04f56..b1390f3aba 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -716,7 +716,7 @@ static SyscallTableEntry syscall_table[] = { //.. GENXY(__NR_readlink, sys_readlink), // 85 //.. // (__NR_uselib, sys_uselib), // 86 */Linux -//.. // (__NR_swapon, sys_swapon), // 87 */Linux + LINX_(__NR_swapon, sys_swapon), // 87 */Linux //.. // (__NR_reboot, sys_reboot), // 88 */Linux //.. // (__NR_readdir, old_readdir), // 89 -- superseded @@ -750,7 +750,7 @@ static SyscallTableEntry syscall_table[] = { //.. // (__NR_vm86old, sys_vm86old), // 113 x86/Linux-only GENXY(__NR_wait4, sys_wait4), // 114 //.. -//.. // (__NR_swapoff, sys_swapoff), // 115 */Linux + LINX_(__NR_swapoff, sys_swapoff), // 115 */Linux LINXY(__NR_sysinfo, sys_sysinfo), // 116 LINXY(__NR_ipc, sys_ipc), // 117 GENX_(__NR_fsync, sys_fsync), // 118 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 0f51117289..4a08650846 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -704,7 +704,7 @@ static SyscallTableEntry syscall_table[] = { GENXY(__NR_readlink, sys_readlink), // 85 // _____(__NR_uselib, sys_uselib), // 86 -// _____(__NR_swapon, sys_swapon), // 87 + LINX_(__NR_swapon, sys_swapon), // 87 // _____(__NR_reboot, sys_reboot), // 88 // _____(__NR_readdir, sys_readdir), // 89 @@ -738,7 +738,7 @@ static SyscallTableEntry syscall_table[] = { // _____(__NR_vm86, sys_vm86), // 113 GENXY(__NR_wait4, sys_wait4), // 114 -// _____(__NR_swapoff, sys_swapoff), // 115 + LINX_(__NR_swapoff, sys_swapoff), // 115 LINXY(__NR_sysinfo, sys_sysinfo), // 116 LINXY(__NR_ipc, sys_ipc), // 117 GENX_(__NR_fsync, sys_fsync), // 118 diff --git a/coregrind/m_syswrap/syswrap-riscv64-linux.c b/coregrind/m_syswrap/syswrap-riscv64-linux.c index d806b92b8f..5a1ea2553d 100644 --- a/coregrind/m_syswrap/syswrap-riscv64-linux.c +++ b/coregrind/m_syswrap/syswrap-riscv64-linux.c @@ -530,6 +530,8 @@ static SyscallTableEntry syscall_main_table[] = { GENX_(__NR_execve, sys_execve), /* 221 */ PLAX_(__NR_mmap, sys_mmap), /* 222 */ GENX_(__NR_fadvise64, sys_ni_syscall), /* 223 */ + LINX_(__NR_swapon, sys_swapon), /* 224 */ + LINX_(__NR_swapoff, sys_swapoff), /* 225 */ GENXY(__NR_mprotect, sys_mprotect), /* 226 */ GENX_(__NR_msync, sys_msync), /* 227 */ GENX_(__NR_mlock, sys_mlock), /* 228 */ diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index 643549c64f..acb4aefee8 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -515,7 +515,7 @@ static SyscallTableEntry syscall_table[] = { GENXY(__NR_readlink, sys_readlink), // 85 // ?????(__NR_uselib, ), // 86 -// ?????(__NR_swapon, ), // 87 + LINX_(__NR_swapon, sys_swapon), // 87 // ?????(__NR_reboot, ), // 88 GENX_(89, sys_ni_syscall), /* unimplemented (by the kernel) */ // 89 @@ -549,7 +549,7 @@ static SyscallTableEntry syscall_table[] = { GENX_(113, sys_ni_syscall), /* unimplemented (by the kernel) */ // 113 GENXY(__NR_wait4, sys_wait4), // 114 -// ?????(__NR_swapoff, ), // 115 + LINX_(__NR_swapoff, sys_swapoff), // 115 LINXY(__NR_sysinfo, sys_sysinfo), // 116 LINXY(__NR_ipc, sys_ipc), // 117 GENX_(__NR_fsync, sys_fsync), // 118 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 42a69cb965..f697a9e19d 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -1261,7 +1261,7 @@ static SyscallTableEntry syscall_table[] = { //zz GENXY(__NR_readlink, sys_readlink), // 85 //zz // (__NR_uselib, sys_uselib), // 86 */Linux -//zz // (__NR_swapon, sys_swapon), // 87 */Linux + LINX_(__NR_swapon, sys_swapon), // 87 */Linux //zz // (__NR_reboot, sys_reboot), // 88 */Linux //zz // (__NR_readdir, old_readdir), // 89 -- superseded //zz @@ -1295,7 +1295,7 @@ static SyscallTableEntry syscall_table[] = { PLAXY(__NR_vm86old, sys_vm86old), // 113 x86/Linux-only GENXY(__NR_wait4, sys_wait4), // 114 //zz -//zz // (__NR_swapoff, sys_swapoff), // 115 */Linux + LINX_(__NR_swapoff, sys_swapoff), // 115 */Linux LINXY(__NR_sysinfo, sys_sysinfo), // 116 LINXY(__NR_ipc, sys_ipc), // 117 GENX_(__NR_fsync, sys_fsync), // 118 |