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 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/NEWS b/NEWS
index 8c8b7c5..afcfb81 100644
--- a/NEWS
+++ b/NEWS
@@ -84,6 +84,7 @@
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 566d782..1a40633 100644
--- a/coregrind/m_syswrap/priv_syswrap-darwin.h
+++ b/coregrind/m_syswrap/priv_syswrap-darwin.h
@@ -558,10 +558,10 @@
// 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 2067d8d..4da31a6 100644
--- a/coregrind/m_syswrap/syswrap-darwin.c
+++ b/coregrind/m_syswrap/syswrap-darwin.c
@@ -1486,6 +1486,15 @@
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 @@
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 @@
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 @@
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 @@
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 ea50a77..9e53f25 100644
--- a/include/vki/vki-darwin.h
+++ b/include/vki/vki-darwin.h
@@ -278,6 +278,9 @@
#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 8eeca10..8fb9390 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