From: Rhys Kidd Date: Sat, 21 Feb 2015 12:24:18 +0000 (+0000) Subject: Fix OS X 10.10 (Yosemite) - missing system calls and fcntl code, courtesy of Bill... X-Git-Tag: svn/VALGRIND_3_11_0~641 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f3c4b1a67a5d42df50b429e101a2d404a68439c7;p=thirdparty%2Fvalgrind.git Fix OS X 10.10 (Yosemite) - missing system calls and fcntl code, courtesy of Bill Zissimopoulos git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14951 --- diff --git a/NEWS b/NEWS index 8c8b7c537e..afcfb81fea 100644 --- a/NEWS +++ b/NEWS @@ -84,6 +84,7 @@ where XXXXXX is the bug number as listed below. 342063 wrong format specifier for test mcblocklistsearch in gdbserver_tests 342221 socket connect false positive uninit memory for unknown af family 342603 Add I2C_SMBUS ioctl support +342635 OS X 10.10 (Yosemite) - missing system calls and fcntl code 342795 Internal glibc __GI_mempcpy call should be intercepted 343012 Unhandled syscall 319 (memfd_create) 343069 Patch updating v4l2 API support diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index 566d782966..1a40633ea5 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -558,10 +558,10 @@ DECL_TEMPLATE(darwin, bsdthread_ctl); // 478 // NYI sendmsg_x // 481 // NYI thread_selfusage // 482 // NYI csrctl // 483 -// NYI guarded_open_dprotected_np // 484 -// NYI guarded_write_np // 485 -// NYI guarded_pwrite_np // 486 -// NYI guarded_writev_np // 487 +DECL_TEMPLATE(darwin, guarded_open_dprotected_np); // 484 +DECL_TEMPLATE(darwin, guarded_write_np); // 485 +DECL_TEMPLATE(darwin, guarded_pwrite_np); // 486 +DECL_TEMPLATE(darwin, guarded_writev_np); // 487 // NYI rename_ext // 488 // NYI mremap_encrypted // 489 #endif /* DARWIN_VERS == DARWIN_10_10 */ diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 2067d8dc44..4da31a6523 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -1486,6 +1486,15 @@ PRE(fcntl) if (ARG2 == VKI_F_SETLKW) *flags |= SfMayBlock; break; +# if DARWIN_VERS >= DARWIN_10_10 + case VKI_F_SETLKWTIMEOUT: + PRINT("fcntl[ARG3=='locktimeout'] ( %ld, %ld, %#lx )", ARG1,ARG2,ARG3); + PRE_REG_READ3(long, "fcntl", + unsigned int, fd, unsigned int, cmd, + struct flocktimeout *, lock); + *flags |= SfMayBlock; + break; +# endif // none case VKI_F_CHKCLEAN: @@ -1650,7 +1659,10 @@ POST(fcntl) case VKI_F_GETLK: case VKI_F_SETLK: case VKI_F_SETLKW: +# if DARWIN_VERS >= DARWIN_10_10 + case VKI_F_SETLKWTIMEOUT: break; +# endif case VKI_F_PREALLOCATE: { @@ -1832,7 +1844,7 @@ POST(kqueue) PRE(fileport_makeport) { - PRINT("guarded_open_np(fd:%#lx, portnamep:%#lx) FIXME", + PRINT("fileport_makeport(fd:%#lx, portnamep:%#lx) FIXME", ARG1, ARG2); } @@ -9182,6 +9194,32 @@ PRE(bsdthread_ctl) void*, cmd, void*, arg1, void*, arg2, void*, arg3); } +PRE(guarded_open_dprotected_np) +{ + PRINT("guarded_open_dprotected_np(" + "path:%#lx(%s), guard:%#lx, guardflags:%#lx, flags:%#lx, " + "dpclass:%#lx, dpflags: %#lx) FIXME", + ARG1, (char*)ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); +} + +PRE(guarded_write_np) +{ + PRINT("guarded_write_np(fd:%ld, guard:%#lx, cbuf:%#lx, nbyte:%llu) FIXME", + ARG1, ARG2, ARG3, (ULong)ARG4); +} + +PRE(guarded_pwrite_np) +{ + PRINT("guarded_pwrite_np(fd:%ld, guard:%#lx, buf:%#lx, nbyte:%llu, offset:%lld) FIXME", + ARG1, ARG2, ARG3, (ULong)ARG4, (Long)ARG5); +} + +PRE(guarded_writev_np) +{ + PRINT("guarded_writev_np(fd:%ld, guard:%#lx, iovp:%#lx, iovcnt:%llu) FIXME", + ARG1, ARG2, ARG3, (ULong)ARG4); +} + #endif /* DARWIN_VERS >= DARWIN_10_10 */ @@ -9699,6 +9737,10 @@ const SyscallTableEntry ML_(syscall_table)[] = { MACXY(__NR_necp_match_policy, necp_match_policy), // 460 MACXY(__NR_getattrlistbulk, getattrlistbulk), // 461 MACX_(__NR_bsdthread_ctl, bsdthread_ctl), // 478 + MACX_(__NR_guarded_open_dprotected_np, guarded_open_dprotected_np), + MACX_(__NR_guarded_write_np, guarded_write_np), + MACX_(__NR_guarded_pwrite_np, guarded_pwrite_np), + MACX_(__NR_guarded_writev_np, guarded_writev_np), #endif // _____(__NR_MAXSYSCALL) MACX_(__NR_DARWIN_FAKE_SIGRETURN, FAKE_SIGRETURN) diff --git a/include/vki/vki-darwin.h b/include/vki/vki-darwin.h index ea50a7790d..9e53f25bfa 100644 --- a/include/vki/vki-darwin.h +++ b/include/vki/vki-darwin.h @@ -278,6 +278,9 @@ typedef uint32_t vki_u32; #define VKI_F_GETLK F_GETLK #define VKI_F_SETLK F_SETLK #define VKI_F_SETLKW F_SETLKW +#if DARWIN_VERS >= DARWIN_10_10 +#define VKI_F_SETLKWTIMEOUT F_SETLKWTIMEOUT +#endif #define VKI_F_CHKCLEAN F_CHKCLEAN #define VKI_F_PREALLOCATE F_PREALLOCATE diff --git a/include/vki/vki-scnums-darwin.h b/include/vki/vki-scnums-darwin.h index 8eeca10ae7..8fb9390d6b 100644 --- a/include/vki/vki-scnums-darwin.h +++ b/include/vki/vki-scnums-darwin.h @@ -711,10 +711,14 @@ #define __NR_vfs_purge VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(455) #endif /* DARWIN_VERS >= DARWIN_10_9 */ -#if DARWIN_VERS == DARWIN_10_10 +#if DARWIN_VERS >= DARWIN_10_10 #define __NR_necp_match_policy VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(460) #define __NR_getattrlistbulk VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(461) #define __NR_bsdthread_ctl VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(478) +#define __NR_guarded_open_dprotected_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(484) +#define __NR_guarded_write_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(485) +#define __NR_guarded_pwrite_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(486) +#define __NR_guarded_writev_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(487) #endif #if DARWIN_VERS < DARWIN_10_6