for all supported Linuxes to those in linux-2.6.28-rc3.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8730
// Also, some archs on Linux do not match the generic wrapper for sys_pipe.
DECL_TEMPLATE(linux, sys_munlockall);
DECL_TEMPLATE(linux, sys_pipe);
+DECL_TEMPLATE(linux, sys_pipe2);
DECL_TEMPLATE(linux, sys_quotactl);
DECL_TEMPLATE(linux, sys_waitid);
LINX_(__NR_sync_file_range, sys_sync_file_range), // 277
// LINX_(__NR_vmsplice, sys_ni_syscall), // 278
// LINX_(__NR_move_pages, sys_ni_syscall), // 279
+
LINX_(__NR_utimensat, sys_utimensat), // 280
LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 281
LINXY(__NR_signalfd, sys_signalfd), // 282
LINXY(__NR_timerfd_create, sys_timerfd_create), // 283
LINX_(__NR_eventfd, sys_eventfd), // 284
+
// LINX_(__NR_fallocate, sys_ni_syscall), // 285
LINXY(__NR_timerfd_settime, sys_timerfd_settime), // 286
LINXY(__NR_timerfd_gettime, sys_timerfd_gettime), // 287
+ // (__NR_paccept, sys_ni_syscall) // 288
+ // (__NR_signalfd4, sys_ni_syscall) // 289
+
+ // (__NR_eventfd2, sys_ni_syscall) // 290
+ // (__NR_epoll_create1, sys_ni_syscall) // 291
+ // (__NR_dup3, sys_ni_syscall) // 292
+ LINXY(__NR_pipe2, sys_pipe2) // 293
+ // (__NR_inotify_init1, sys_ni_syscall) // 294
};
const UInt ML_(syscall_table_size) =
POST(sys_pipe)
{
Int *p = (Int *)ARG1;
-
if (!ML_(fd_allowed)(p[0], "pipe", tid, True) ||
!ML_(fd_allowed)(p[1], "pipe", tid, True)) {
VG_(close)(p[0]);
}
}
+/* pipe2 (a kernel 2.6.twentysomething invention) is like pipe, except
+ there's a second arg containing flags to be applied to the new file
+ descriptors. It hardly seems worth the effort to factor out the
+ duplicated code, hence: */
+PRE(sys_pipe2)
+{
+ PRINT("sys_pipe2 ( %#lx, %#lx )", ARG1, ARG2);
+ PRE_REG_READ2(int, "pipe", int *, filedes, long, flags);
+ PRE_MEM_WRITE( "pipe2(filedes)", ARG1, 2*sizeof(int) );
+}
+POST(sys_pipe2)
+{
+ Int *p = (Int *)ARG1;
+ if (!ML_(fd_allowed)(p[0], "pipe2", tid, True) ||
+ !ML_(fd_allowed)(p[1], "pipe2", tid, True)) {
+ VG_(close)(p[0]);
+ VG_(close)(p[1]);
+ SET_STATUS_Failure( VKI_EMFILE );
+ } else {
+ POST_MEM_WRITE( ARG1, 2*sizeof(int) );
+ if (VG_(clo_track_fds)) {
+ ML_(record_fd_open_nameless)(tid, p[0]);
+ ML_(record_fd_open_nameless)(tid, p[1]);
+ }
+ }
+}
+
PRE(sys_quotactl)
{
PRINT("sys_quotactl (0x%lx, %#lx, 0x%lx, 0x%lx )", ARG1,ARG2,ARG3, ARG4);
LINXY(__NR_timerfd_create, sys_timerfd_create), // 322
LINX_(__NR_eventfd, sys_eventfd), // 323
// LINX_(__NR_fallocate, sys_ni_syscall), // 324
+
LINXY(__NR_timerfd_settime, sys_timerfd_settime), // 325
LINXY(__NR_timerfd_gettime, sys_timerfd_gettime), // 326
+ // (__NR_signalfd4, sys_ni_syscall) // 327
+ // (__NR_eventfd2, sys_ni_syscall) // 328
+ // (__NR_epoll_create1, sys_ni_syscall) // 329
+
+ // (__NR_dup3, sys_ni_syscall) // 330
+ LINXY(__NR_pipe2, sys_pipe2) // 331
+ // (__NR_inotify_init1, sys_ni_syscall) // 332
};
const UInt ML_(syscall_table_size) =
#define __NR_fallocate 285
#define __NR_timerfd_settime 286
#define __NR_timerfd_gettime 287
+#define __NR_paccept 288
+#define __NR_signalfd4 289
+#define __NR_eventfd2 290
+#define __NR_epoll_create1 291
+#define __NR_dup3 292
+#define __NR_pipe2 293
+#define __NR_inotify_init1 294
#endif /* __VKI_SCNUMS_AMD64_LINUX_H */
#define __NR_subpage_prot 310
#define __NR_timerfd_settime 311
#define __NR_timerfd_gettime 312
+#define __NR_signalfd4 313
+#define __NR_eventfd2 314
+#define __NR_epoll_create1 315
+#define __NR_dup3 316
+#define __NR_pipe2 317
+#define __NR_inotify_init1 318
#endif /* __VKI_SCNUMS_PPC32_LINUX_H */
#define __NR_subpage_prot 310
#define __NR_timerfd_settime 311
#define __NR_timerfd_gettime 312
+#define __NR_signalfd4 313
+#define __NR_eventfd2 314
+#define __NR_epoll_create1 315
+#define __NR_dup3 316
+#define __NR_pipe2 317
+#define __NR_inotify_init1 318
#endif /* __VKI_SCNUMS_PPC64_LINUX_H */
#define __NR_fallocate 324
#define __NR_timerfd_settime 325
#define __NR_timerfd_gettime 326
+#define __NR_signalfd4 327
+#define __NR_eventfd2 328
+#define __NR_epoll_create1 329
+#define __NR_dup3 330
+#define __NR_pipe2 331
+#define __NR_inotify_init1 332
#endif /* __VKI_SCNUMS_X86_LINUX_H */