valgrind/r8730.diff

183 lines
7.3 KiB
Diff

------------------------------------------------------------------------
r8730 | sewardj | 2008-11-05 12:20:59 +0100 (Mi, 05 Nov 2008) | 3 lines
Support sys_pipe2 on {amd64,x86}-linux. Also, update syscall numbers
for all supported Linuxes to those in linux-2.6.28-rc3.
------------------------------------------------------------------------
Index: include/vki/vki-scnums-amd64-linux.h
===================================================================
--- include/vki/vki-scnums-amd64-linux.h (revision 8729)
+++ include/vki/vki-scnums-amd64-linux.h (revision 8730)
@@ -369,6 +369,13 @@
#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 */
Index: include/vki/vki-scnums-x86-linux.h
===================================================================
--- include/vki/vki-scnums-x86-linux.h (revision 8729)
+++ include/vki/vki-scnums-x86-linux.h (revision 8730)
@@ -361,6 +361,12 @@
#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 */
Index: include/vki/vki-scnums-ppc32-linux.h
===================================================================
--- include/vki/vki-scnums-ppc32-linux.h (revision 8729)
+++ include/vki/vki-scnums-ppc32-linux.h (revision 8730)
@@ -355,6 +355,12 @@
#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 */
Index: include/vki/vki-scnums-ppc64-linux.h
===================================================================
--- include/vki/vki-scnums-ppc64-linux.h (revision 8729)
+++ include/vki/vki-scnums-ppc64-linux.h (revision 8730)
@@ -347,6 +347,12 @@
#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 */
Index: coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- coregrind/m_syswrap/syswrap-linux.c (revision 8729)
+++ coregrind/m_syswrap/syswrap-linux.c (revision 8730)
@@ -2235,12 +2235,38 @@ PRE(sys_pipe)
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]);
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]);
+ }
+ }
+}
+
+/* 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)) {
Index: coregrind/m_syswrap/priv_syswrap-linux.h
===================================================================
--- coregrind/m_syswrap/priv_syswrap-linux.h (revision 8729)
+++ coregrind/m_syswrap/priv_syswrap-linux.h (revision 8730)
@@ -206,6 +206,7 @@ DECL_TEMPLATE(linux, sys_sched_getaffini
// 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);
Index: coregrind/m_syswrap/syswrap-amd64-linux.c
===================================================================
--- coregrind/m_syswrap/syswrap-amd64-linux.c (revision 8729)
+++ coregrind/m_syswrap/syswrap-amd64-linux.c (revision 8730)
@@ -1350,14 +1350,24 @@ const SyscallTableEntry ML_(syscall_tabl
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) =
Index: coregrind/m_syswrap/syswrap-x86-linux.c
===================================================================
--- coregrind/m_syswrap/syswrap-x86-linux.c (revision 8729)
+++ coregrind/m_syswrap/syswrap-x86-linux.c (revision 8730)
@@ -2231,8 +2231,16 @@ const SyscallTableEntry ML_(syscall_tabl
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) =