From: Rhys Kidd Date: Wed, 20 May 2015 13:31:02 +0000 (+0000) Subject: Fix unhandled syscall: unix:473 (readlinkat) on OS X 10.10 X-Git-Tag: svn/VALGRIND_3_11_0~364 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2a3a28aecfd6ba9568b56b67e5c5df59589a7853;p=thirdparty%2Fvalgrind.git Fix unhandled syscall: unix:473 (readlinkat) on OS X 10.10 bz#344936 Before: == 595 tests, 229 stderr failures, 23 stdout failures, 1 stderrB failure, 1 stdoutB failure, 30 post failures == After: == 595 tests, 228 stderr failures, 23 stdout failures, 1 stderrB failure, 1 stdoutB failure, 30 post failures == git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15260 --- diff --git a/NEWS b/NEWS index 8b3ea137f0..7b1e70af8c 100644 --- a/NEWS +++ b/NEWS @@ -175,6 +175,7 @@ where XXXXXX is the bug number as listed below. 344621 Fix memcheck/tests/err_disable4 test on OS X 344686 Fix suppression for pthread_rwlock_init on OS X 10.10 344702 Fix missing libobjc suppressions on OS X 10.10 +344936 Fix unhandled syscall: unix:473 (readlinkat) on OS X 10.10 344939 Fix memcheck/tests/xml1 on OS X 10.10 345016 helgrind/tests/locked_vs_unlocked2 is failing sometimes 345079 Fix build problems in VEX/useful/test_main.c diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index d2c7f0e195..b68af4208e 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -547,7 +547,7 @@ DECL_TEMPLATE(darwin, getattrlistbulk); // 461 // NYI fstatat64 // 470 // NYI linkat // 471 // NYI unlinkat // 472 -// NYI readlinkat // 473 +DECL_TEMPLATE(darwin, readlinkat); // 473 // NYI symlinkat // 474 // NYI mkdirat // 475 // NYI getattrlistat // 476 diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 31ffc39606..2295047a33 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -9308,6 +9308,28 @@ POST(getattrlistbulk) POST_MEM_WRITE(ARG3, ARG4); } +PRE(readlinkat) +{ + Word saved = SYSNO; + + PRINT("readlinkat ( %ld, %#lx(%s), %#lx, %llu )", ARG1,ARG2,(char*)ARG2,ARG3,(ULong)ARG4); + PRE_REG_READ4(long, "readlinkat", + int, dfd, const char *, path, char *, buf, int, bufsiz); + PRE_MEM_RASCIIZ( "readlinkat(path)", ARG2 ); + PRE_MEM_WRITE( "readlinkat(buf)", ARG3,ARG4 ); + + /* + * Refer to coregrind/m_syswrap/syswrap-linux.c + */ + { + /* Normal case */ + SET_STATUS_from_SysRes( VG_(do_syscall4)(saved, ARG1, ARG2, ARG3, ARG4)); + } + + if (SUCCESS && RES > 0) + POST_MEM_WRITE( ARG3, RES ); +} + PRE(bsdthread_ctl) { // int bsdthread_ctl(user_addr_t cmd, user_addr_t arg1, @@ -9863,6 +9885,7 @@ const SyscallTableEntry ML_(syscall_table)[] = { MACXY(__NR_sysctlbyname, sysctlbyname), // 274 MACXY(__NR_necp_match_policy, necp_match_policy), // 460 MACXY(__NR_getattrlistbulk, getattrlistbulk), // 461 + MACX_(__NR_readlinkat, readlinkat), // 473 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), diff --git a/include/vki/vki-scnums-darwin.h b/include/vki/vki-scnums-darwin.h index 8fb9390d6b..60b569eb63 100644 --- a/include/vki/vki-scnums-darwin.h +++ b/include/vki/vki-scnums-darwin.h @@ -714,6 +714,7 @@ #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_readlinkat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(473) #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) diff --git a/none/tests/procfs-non-linux.stderr.exp b/none/tests/procfs-non-linux.stderr.exp index ec92dfaecb..9d656f733e 100644 --- a/none/tests/procfs-non-linux.stderr.exp +++ b/none/tests/procfs-non-linux.stderr.exp @@ -5,6 +5,6 @@ open(): No such file or directory open(): No such file or directory readlink: No such file or directory readlink: No such file or directory -readlinkat: Function not implemented -readlinkat: Function not implemented +readlinkat: No such file or directory +readlinkat: No such file or directory