From: Julian Seward Date: Wed, 5 Nov 2008 11:20:59 +0000 (+0000) Subject: Support sys_pipe2 on {amd64,x86}-linux. Also, update syscall numbers X-Git-Tag: svn/VALGRIND_3_4_0~164 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4bffe6909ca02df0e66d99df4809ba6a97b7b19;p=thirdparty%2Fvalgrind.git Support sys_pipe2 on {amd64,x86}-linux. Also, update syscall numbers for all supported Linuxes to those in linux-2.6.28-rc3. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8730 --- diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 85f2c38d72..32cd61f9f1 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -206,6 +206,7 @@ DECL_TEMPLATE(linux, sys_sched_getaffinity); // 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); diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 243415a7d8..b5cc76b5b1 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -1350,14 +1350,24 @@ const SyscallTableEntry ML_(syscall_table)[] = { 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) = diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index dc54ca10de..6be9124ee1 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -2235,7 +2235,6 @@ 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]); @@ -2250,6 +2249,33 @@ POST(sys_pipe) } } +/* 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); diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 8c5351ac1c..33ced73c36 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -2231,8 +2231,16 @@ const SyscallTableEntry ML_(syscall_table)[] = { 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) = diff --git a/include/vki/vki-scnums-amd64-linux.h b/include/vki/vki-scnums-amd64-linux.h index 0f1ae01f79..ed3d3e8510 100644 --- a/include/vki/vki-scnums-amd64-linux.h +++ b/include/vki/vki-scnums-amd64-linux.h @@ -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 */ diff --git a/include/vki/vki-scnums-ppc32-linux.h b/include/vki/vki-scnums-ppc32-linux.h index 8441d820ba..7259261add 100644 --- a/include/vki/vki-scnums-ppc32-linux.h +++ b/include/vki/vki-scnums-ppc32-linux.h @@ -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 */ diff --git a/include/vki/vki-scnums-ppc64-linux.h b/include/vki/vki-scnums-ppc64-linux.h index dba2012afa..3520c2cf61 100644 --- a/include/vki/vki-scnums-ppc64-linux.h +++ b/include/vki/vki-scnums-ppc64-linux.h @@ -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 */ diff --git a/include/vki/vki-scnums-x86-linux.h b/include/vki/vki-scnums-x86-linux.h index 95fee1008e..e564cf5546 100644 --- a/include/vki/vki-scnums-x86-linux.h +++ b/include/vki/vki-scnums-x86-linux.h @@ -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 */