183 lines
7.3 KiB
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) =
|