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