From: Julian Seward Date: Mon, 4 Oct 2010 20:03:27 +0000 (+0000) Subject: Support sys_readahead on Linux. X-Git-Tag: svn/VALGRIND_3_6_0~63 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=669d87bcc1e00a50415fdd30d0d12188347f10b6;p=thirdparty%2Fvalgrind.git Support sys_readahead on Linux. (Sean Bartell, wingedtachikoma@gmail.com) Fixes #247894. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11394 --- diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index c8fc006984..e2a21d6ba2 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -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); diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 466fe1fb5d..ecb3d00232 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index a1474759b4..159a011183 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 09159ac7b2..b0e5ca3ed9 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -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 ------------------------------------------------------------------ */ diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index e0bb3312a7..984c7bc2fa 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 4f1bf29b9e..1b064bdcb8 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -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 */ diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index ef0561ac96..c0a8b2b36c 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -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