]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Support sys_readahead on Linux.
authorJulian Seward <jseward@acm.org>
Mon, 4 Oct 2010 20:03:27 +0000 (20:03 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 4 Oct 2010 20:03:27 +0000 (20:03 +0000)
(Sean Bartell, wingedtachikoma@gmail.com)  Fixes #247894.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11394

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-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c

index c8fc006984784a202da04ef601fa24a565fa5a2a..e2a21d6ba2e1af5df782e6378a1d84d126bcfd69 100644 (file)
@@ -53,6 +53,7 @@ DECL_TEMPLATE(linux, sys_pwritev);
 DECL_TEMPLATE(linux, sys_dup3);
 DECL_TEMPLATE(linux, sys_getcpu);
 DECL_TEMPLATE(linux, sys_splice);
+DECL_TEMPLATE(linux, sys_readahead);
 
 // POSIX, but various sub-cases differ between Linux and Darwin.
 DECL_TEMPLATE(linux, sys_fcntl);
index 466fe1fb5d8e85ac3a6756d64563b02ea7e477a0..ecb3d002329439d47eafe49becd45c341be8d156 100644 (file)
@@ -1276,7 +1276,7 @@ static SyscallTableEntry syscall_table[] = {
 
    //   (__NR_security,          sys_ni_syscall),     // 185 
    LINX_(__NR_gettid,            sys_gettid),         // 186 
-   //   (__NR_readahead,         sys_readahead),      // 187 
+   LINX_(__NR_readahead,         sys_readahead),      // 187 
    LINX_(__NR_setxattr,          sys_setxattr),       // 188 
    LINX_(__NR_lsetxattr,         sys_lsetxattr),      // 189 
 
index a1474759b4f3a44785f8354576e165d3d7597597..159a011183458725c940d25e453377e1ab57545e 100644 (file)
@@ -1498,7 +1498,7 @@ static SyscallTableEntry syscall_main_table[] = {
 //   PLAXY(223,                    sys_syscall223),     // 223 // sys_bproc?
    LINX_(__NR_gettid,            sys_gettid),         // 224
 
-//zz    //   (__NR_readahead,         sys_readahead),      // 225 */(Linux?)
+   LINX_(__NR_readahead,         sys_readahead),      // 225 */Linux
    LINX_(__NR_setxattr,          sys_setxattr),       // 226
    LINX_(__NR_lsetxattr,         sys_lsetxattr),      // 227
    LINX_(__NR_fsetxattr,         sys_fsetxattr),      // 228
index 09159ac7b2af6e70c847ce64b2172c666ea56a1f..b0e5ca3ed9054c4d5d13259684709a6e7a1c04dd 100644 (file)
@@ -2637,6 +2637,29 @@ PRE(sys_lseek)
                  unsigned int, fd, vki_off_t, offset, unsigned int, whence);
 }
 
+/* ---------------------------------------------------------------------
+   readahead wrapper
+   ------------------------------------------------------------------ */
+
+PRE(sys_readahead)
+{
+   *flags |= SfMayBlock;
+#if VG_WORDSIZE == 4
+   PRINT("sys_readahead ( %ld, %lld, %ld )", ARG1, MERGE64(ARG2,ARG3), ARG4);
+   PRE_REG_READ4(vki_off_t, "readahead",
+                 int, fd, unsigned, MERGE64_FIRST(offset),
+                 unsigned, MERGE64_SECOND(offset), vki_size_t, count);
+#elif VG_WORDSIZE == 8
+   PRINT("sys_readahead ( %ld, %lld, %ld )", ARG1, (Long)ARG2, ARG3);
+   PRE_REG_READ3(vki_off_t, "readahead",
+                 int, fd, vki_loff_t, offset, vki_size_t, count);
+#else
+#  error Unexpected word size
+#endif
+   if (!ML_(fd_allowed)(ARG1, "readahead", tid, False))
+      SET_STATUS_Failure( VKI_EBADF );
+}
+
 /* ---------------------------------------------------------------------
    sig* wrappers
    ------------------------------------------------------------------ */
index e0bb3312a7826f725144a237e9a645d604c9fe38..984c7bc2fa57a69409d23aac718b055548c4f406 100644 (file)
@@ -1746,7 +1746,7 @@ static SyscallTableEntry syscall_table[] = {
    // Nb: we treat vfork as fork
    GENX_(__NR_vfork,             sys_fork),              // 189
    GENXY(__NR_ugetrlimit,        sys_getrlimit),         // 190
-//__NR_readahead      // 191 ppc/Linux only?
+   LINX_(__NR_readahead,         sys_readahead),         // 191 */Linux
    PLAX_(__NR_mmap2,             sys_mmap2),             // 192
    GENX_(__NR_truncate64,        sys_truncate64),        // 193
    GENX_(__NR_ftruncate64,       sys_ftruncate64),       // 194
index 4f1bf29b9e148e10e6f75e9ac1d5fb49ed80eb71..1b064bdcb81f098bc30603bfc06a872d36e5093b 100644 (file)
@@ -1392,7 +1392,7 @@ static SyscallTableEntry syscall_table[] = {
    GENX_(__NR_vfork,             sys_fork),               // 189 treat as fork
 
    GENXY(__NR_ugetrlimit,        sys_getrlimit),          // 190
-// _____(__NR_readahead,         sys_readahead),          // 191
+   LINX_(__NR_readahead,         sys_readahead),          // 191
 // /* #define __NR_mmap2           192     32bit only */
 // /* #define __NR_truncate64      193     32bit only */
 // /* #define __NR_ftruncate64     194     32bit only */
index ef0561ac96d466ca660d232f5b3338b7a4443b8c..c0a8b2b36c872c33d2351e49fc07fb3cfff5aa41 100644 (file)
@@ -2146,7 +2146,7 @@ static SyscallTableEntry syscall_table[] = {
    PLAXY(223,                    sys_syscall223),     // 223 // sys_bproc?
    LINX_(__NR_gettid,            sys_gettid),         // 224
 
-//zz    //   (__NR_readahead,         sys_readahead),      // 225 */(Linux?)
+   LINX_(__NR_readahead,         sys_readahead),      // 225 */Linux
    LINX_(__NR_setxattr,          sys_setxattr),       // 226
    LINX_(__NR_lsetxattr,         sys_lsetxattr),      // 227
    LINX_(__NR_fsetxattr,         sys_fsetxattr),      // 228