(Sean Bartell, wingedtachikoma@gmail.com) Fixes #247894.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11394
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);
// (__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
// 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
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
------------------------------------------------------------------ */
// 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
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 */
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