|
From: <sv...@va...> - 2010-10-04 20:03:36
|
Author: sewardj
Date: 2010-10-04 21:03:27 +0100 (Mon, 04 Oct 2010)
New Revision: 11394
Log:
Support sys_readahead on Linux.
(Sean Bartell, win...@gm...) Fixes #247894.
Modified:
trunk/coregrind/m_syswrap/priv_syswrap-linux.h
trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
trunk/coregrind/m_syswrap/syswrap-arm-linux.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
Modified: trunk/coregrind/m_syswrap/priv_syswrap-linux.h
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2010-10-04 19:17:21 UTC (rev 11393)
+++ trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2010-10-04 20:03:27 UTC (rev 11394)
@@ -53,6 +53,7 @@
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);
Modified: trunk/coregrind/m_syswrap/syswrap-amd64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2010-10-04 19:17:21 UTC (rev 11393)
+++ trunk/coregrind/m_syswrap/syswrap-amd64-linux.c 2010-10-04 20:03:27 UTC (rev 11394)
@@ -1276,7 +1276,7 @@
// (__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
Modified: trunk/coregrind/m_syswrap/syswrap-arm-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-arm-linux.c 2010-10-04 19:17:21 UTC (rev 11393)
+++ trunk/coregrind/m_syswrap/syswrap-arm-linux.c 2010-10-04 20:03:27 UTC (rev 11394)
@@ -1498,7 +1498,7 @@
// 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
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2010-10-04 19:17:21 UTC (rev 11393)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2010-10-04 20:03:27 UTC (rev 11394)
@@ -2638,6 +2638,29 @@
}
/* ---------------------------------------------------------------------
+ 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
------------------------------------------------------------------ */
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2010-10-04 19:17:21 UTC (rev 11393)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2010-10-04 20:03:27 UTC (rev 11394)
@@ -1746,7 +1746,7 @@
// 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
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2010-10-04 19:17:21 UTC (rev 11393)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2010-10-04 20:03:27 UTC (rev 11394)
@@ -1392,7 +1392,7 @@
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 */
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.c
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2010-10-04 19:17:21 UTC (rev 11393)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2010-10-04 20:03:27 UTC (rev 11394)
@@ -2146,7 +2146,7 @@
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
|