]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Wrap swapon and swapoff syscalls on non-mips arches.
authorMartin Cermak <mcermak@redhat.com>
Wed, 8 Oct 2025 08:07:30 +0000 (10:07 +0200)
committerMartin Cermak <mcermak@redhat.com>
Fri, 10 Oct 2025 07:29:56 +0000 (09:29 +0200)
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

14 files changed:
NEWS
coregrind/m_syswrap/priv_syswrap-linux.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-arm-linux.c
coregrind/m_syswrap/syswrap-arm64-linux.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-mips32-linux.c
coregrind/m_syswrap/syswrap-mips64-linux.c
coregrind/m_syswrap/syswrap-nanomips-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-riscv64-linux.c
coregrind/m_syswrap/syswrap-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c

diff --git a/NEWS b/NEWS
index ca3f9fca4a14a37a68cd561b465836c5c786ee52..b097e3789f2e371052015c887802ec59d4363d32 100644 (file)
--- 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
index 53aa1b582df7ae5d7834ea9a59ffaf28c339e077..ca462e896f7b88d0e1501945add63d7d2ce39cac 100644 (file)
@@ -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
 
index 4a3bad55f4bdc89452c8a311516678f0bf0f0ac1..838bf5e84801938464bc250ac4fb0b866654e08a 100644 (file)
@@ -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 
index f55ed05e61604a7cba02c9b78b0726f307211ad5..1fda7ba8a029f3ed89406ad51a604c283165af30 100644 (file)
@@ -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
index b28b4598c065a83ca74dec72ffacb58dbcf8c3ec..175002e6ba8ec6c61f324d1a289eace8f8b15d16 100644 (file)
@@ -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
index d891ac6daaa133887897530be4d283e906f64b35..1402c3d1f5f89f5ee31735feb66e5e75bd849272 100644 (file)
@@ -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
index c4d7a66206739b3b955c8056d549738a29e1fadb..4edfe8a703818b04cb6c3d6fdbe37be8be7af072 100644 (file)
@@ -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
index 45af0a3fd9fd04d310b814dee4b92d4f9bebd160..4fb6f060e360f17981ace189242bbb1573f5a4ff 100644 (file)
@@ -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),
index 94e4ce4d43545732f49055238f0edc4f0f179ef3..f1a0b3c59376c0381adf29263306e0652360f49b 100644 (file)
@@ -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),
index 8bb0a04f569b62ee2bfb3de5d660696f75c433b6..b1390f3aba83e724dde1dcdc7f63d3f2baa283d3 100644 (file)
@@ -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
index 0f511172890cc1491ba75c7c2c54ff1b833aaac5..4a08650846e9dccf996bb238b707990113263b35 100644 (file)
@@ -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
index d806b92b8f5a56024ffa675096d3476738a1c0cb..5a1ea2553d799caf0af732bc8b5ccc7020cb0786 100644 (file)
@@ -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 */
index 643549c64f918b1f235ec7d9aaaf5fa2d6a48049..acb4aefee87e49ba72f69e4531aa81912df31719 100644 (file)
@@ -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
index 42a69cb965fcdb11d79cd6046c687cf9dce5ba98..f697a9e19d8ff951e480c7a591858ec0d8f6c442 100644 (file)
@@ -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