]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Adds initial support for new syscalls on MacOS X 10.10, including new
authorJulian Seward <jseward@acm.org>
Thu, 6 Nov 2014 20:29:01 +0000 (20:29 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 6 Nov 2014 20:29:01 +0000 (20:29 +0000)
syscall numbers, and dummy wrappers for bsdthread_ctl and
sysctlbyname.  Mash up of patches from fxcoudert@gcc.gnu.org and Rhys
Kidd (rhyskidd@gmail.com).  Part of bug 339045.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14698

coregrind/m_syswrap/priv_syswrap-darwin.h
coregrind/m_syswrap/syswrap-amd64-darwin.c
coregrind/m_syswrap/syswrap-darwin.c
include/vki/vki-scnums-darwin.h

index 7c9420548157fb8d8ae9e8bfb615620d3aeabeb5..c9e2b59b66559c917e3451dcc6939b8e0d2dfac7 100644 (file)
@@ -332,7 +332,13 @@ DECL_TEMPLATE(darwin, sem_unlink);              // 270
 DECL_TEMPLATE(darwin, sem_wait);                // 271
 DECL_TEMPLATE(darwin, sem_trywait);             // 272
 DECL_TEMPLATE(darwin, sem_post);                // 273
+
+#if DARWIN_VERS < DARWIN_10_10
 // NYI sem_getvalue 274
+#elif DARWIN_VERS == DARWIN_10_10
+DECL_TEMPLATE(darwin, sysctlbyname);            // 274
+#endif
+
 DECL_TEMPLATE(darwin, sem_init);                // 275
 DECL_TEMPLATE(darwin, sem_destroy);             // 276
 DECL_TEMPLATE(darwin, open_extended)            // 277
@@ -383,7 +389,7 @@ DECL_TEMPLATE(darwin, aio_write);              // 319
 // NYI lio_listio 320
 // NYI __pthread_cond_wait 321
 // NYI iopolicysys 322
-// 323
+// NYI process_policy 323
 // NYI mlockall 324
 // NYI munlockall 325
 // 326
@@ -496,6 +502,15 @@ DECL_TEMPLATE(darwin, audit_session_self);       // 428
 // NYI audit_session_join 429
 DECL_TEMPLATE(darwin, fileport_makeport);        // 430
 
+// NYI fileport_makefd 431
+// NYI audit_session_port 432
+// NYI pid_suspend 433
+// NYI pid_resume 434
+#if DARWIN_VERS == DARWIN_10_10
+// NYI pid_hibernate 435
+// NYI pid_shutdown_sockets 436
+#endif /* DARWIN_VERS == DARWIN_10_10 */
+// old old shared_region_slide_np 437
 // NYI shared_region_map_and_slide_np            // 438
 // NYI kas_info                                  // 439
 // NYI memorystatus_control                      // 440
@@ -503,10 +518,53 @@ DECL_TEMPLATE(darwin, guarded_open_np);          // 441
 DECL_TEMPLATE(darwin, guarded_close_np);         // 442
 DECL_TEMPLATE(darwin, guarded_kqueue_np);        // 443
 DECL_TEMPLATE(darwin, change_fdguard_np);        // 444
-
+// old __proc_suppress 445
 // NYI proc_rlimit_control                       // 446
 DECL_TEMPLATE(darwin, connectx);                 // 447
 DECL_TEMPLATE(darwin, disconnectx);              // 448
+// NYI peeloff // 449
+// NYI socket_delegate // 450
+// NYI telemetry // 451
+// NYI proc_uuid_policy // 452
+// NYI memorystatus_get_level // 453
+// NYI system_override // 454
+// NYI vfs_purge // 455
+#if DARWIN_VERS == DARWIN_10_10
+// NYI sfi_ctl         // 456
+// NYI sfi_pidctl      // 457
+// NYI coalition       // 458
+// NYI coalition_info  // 459
+// NYI necp_match_policy  // 460
+// NYI getattrlistbulk // 461
+// 462
+// NYI openat          // 463
+// NYI openat_nocancel // 464
+// NYI renameat        // 465
+// NYI faccessat       // 466
+// NYI fchmodat        // 467
+// NYI fchownat        // 468
+// NYI fstatat         // 469
+// NYI fstatat64       // 470
+// NYI linkat          // 471
+// NYI unlinkat        // 472
+// NYI readlinkat      // 473
+// NYI symlinkat       // 474
+// NYI mkdirat         // 475
+// NYI getattrlistat   // 476
+// NYI proc_trace_log  // 477
+DECL_TEMPLATE(darwin, bsdthread_ctl);            // 478
+// NYI openbyid_np     // 479
+// NYI recvmsg_x       // 480
+// 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
+// NYI rename_ext      // 488
+// NYI mremap_encrypted  // 489
+#endif /* DARWIN_VERS == DARWIN_10_10 */
 
 // Mach message helpers
 DECL_TEMPLATE(darwin, mach_port_set_context);
@@ -579,7 +637,7 @@ DECL_TEMPLATE(darwin, mach_msg_task);
 DECL_TEMPLATE(darwin, mach_msg_thread);
 
 // Mach traps
-#if DARWIN_VERS == DARWIN_10_8 || DARWIN_VERS == DARWIN_10_9
+#if DARWIN_VERS >= DARWIN_10_8
 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_allocate_trap);
 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_deallocate_trap);
 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_protect_trap);
@@ -598,7 +656,7 @@ DECL_TEMPLATE(darwin, kernelrpc_mach_port_guard_trap);
 DECL_TEMPLATE(darwin, kernelrpc_mach_port_unguard_trap);
 DECL_TEMPLATE(darwin, iopolicysys);
 DECL_TEMPLATE(darwin, process_policy);
-#endif /* DARWIN_VERS == DARWIN_10_8 || DARWIN_VERS == DARWIN_10_9 */
+#endif /* DARWIN_VERS >= DARWIN_10_8 */
 DECL_TEMPLATE(darwin, mach_msg_unhandled);
 DECL_TEMPLATE(darwin, mach_msg_unhandled_check);
 DECL_TEMPLATE(darwin, mach_msg);
index b51b652169d3c0a1946111da6f85079885213a2f..b1790bb4767aa914228e24249b4975eee2df6606 100644 (file)
@@ -467,6 +467,11 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
    Bool is_reuse = reuse != 0;
 #  elif DARWIN_VERS == DARWIN_10_8 || DARWIN_VERS == DARWIN_10_9
    Bool is_reuse = (reuse & 0x20000 /* == WQ_FLAG_THREAD_REUSE */) != 0;
+#  elif DARWIN_VERS == DARWIN_10_10
+   // XXX FIXME is this correct?
+   Bool is_reuse = (reuse & 0x20000 /* == WQ_FLAG_THREAD_REUSE */) != 0;
+#  else
+#    error "Unsupported Darwin version"
 #  endif
 
    if (is_reuse) {
@@ -478,7 +483,7 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem,
        UWord magic_delta = 0;
 #      elif DARWIN_VERS == DARWIN_10_7 || DARWIN_VERS == DARWIN_10_8
        UWord magic_delta = 0x60;
-#      elif DARWIN_VERS == DARWIN_10_9
+#      elif DARWIN_VERS == DARWIN_10_9 || DARWIN_VERS == DARWIN_10_10
        UWord magic_delta = 0xE0;
 #      else
 #        error "magic_delta: to be computed on new OS version"
index c8c33a439b5dc74a24d0d1354e5e9d9d02e74cfc..016ef7f0df05d67b77f2530d6f1ba1558f6a416c 100644 (file)
@@ -8918,6 +8918,31 @@ PRE(kernelrpc_mach_port_unguard_trap)
 #endif /* DARWIN_VERS >= DARWIN_10_9 */
 
 
+/* ---------------------------------------------------------------------
+   Added for OSX 10.10 (Yosemite)
+   ------------------------------------------------------------------ */
+
+#if DARWIN_VERS >= DARWIN_10_10
+
+PRE(bsdthread_ctl)
+{
+   // int bsdthread_ctl(user_addr_t cmd, user_addr_t arg1, 
+   //                   user_addr_t arg2, user_addr_t arg3)
+   PRINT("bsdthread_ctl(FIXME)(%lx,%lx,%lx,%lx)", ARG1, ARG2, ARG3, ARG4);
+}
+
+PRE(sysctlbyname)
+{
+   // int sysctlbyname(const char *name, size_t namelen, void *old,
+   //                  size_t *oldlenp, void *new, size_t newlen)
+  PRINT("sysctlbyname(FIXME)(%lx(%s),%ld, %lx,%lx, %lx,%lx",
+       ARG1, ARG1 ? (const HChar*)ARG1 : "(null)",
+       ARG2, ARG3, ARG4, ARG5, ARG6);
+}
+
+#endif /* DARWIN_VERS >= DARWIN_10_10 */
+
+
 /* ---------------------------------------------------------------------
    syscall tables
    ------------------------------------------------------------------ */
@@ -9234,7 +9259,8 @@ const SyscallTableEntry ML_(syscall_table)[] = {
    MACX_(__NR_sem_wait,    sem_wait), 
    MACX_(__NR_sem_trywait, sem_trywait), 
    MACX_(__NR_sem_post,    sem_post), 
-// _____(__NR_sem_getvalue), 
+   // 274 seems to have been repurposed for 10.10.  Was sem_getvalue,
+   //     has become sysctlbyname.  See below.
    MACXY(__NR_sem_init,    sem_init), 
    MACX_(__NR_sem_destroy, sem_destroy), 
    MACX_(__NR_open_extended,  open_extended),    // 277
@@ -9426,7 +9452,10 @@ const SyscallTableEntry ML_(syscall_table)[] = {
     MACX_(__NR_connectx, connectx),
     MACX_(__NR_disconnectx, disconnectx),
 #endif
-
+#if DARWIN_VERS >= DARWIN_10_10
+   MACX_(__NR_bsdthread_ctl, bsdthread_ctl),
+   MACX_(__NR_sysctlbyname,  sysctlbyname),
+#endif
 // _____(__NR_MAXSYSCALL)
    MACX_(__NR_DARWIN_FAKE_SIGRETURN, FAKE_SIGRETURN)
 };
index cb958c6516d3541a23f4f34259c03dfe79800b43..9146a5e165963018ecc4f7e26a01e83a859585c0 100644 (file)
 #define        __NR_sem_wait       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(271)
 #define        __NR_sem_trywait    VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(272)
 #define        __NR_sem_post       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(273)
+
+#if DARWIN_VERS < DARWIN_10_10
 #define        __NR_sem_getvalue   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(274)
+#elif DARWIN_VERS == DARWIN_10_10
+#define        __NR_sysctlbyname   VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(274)
+#endif
+
 #define        __NR_sem_init       VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(275)
 #define        __NR_sem_destroy    VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(276)
 #define        __NR_open_extended  VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(277)
 #define __NR_fsgetpath              VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(427)
 #define __NR_audit_session_self     VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(428)
 #define __NR_audit_session_join     VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(429)
-#endif
+#endif /* DARWIN_VERS >= DARWIN_10_6 */
 #if DARWIN_VERS >= DARWIN_10_9
 #define __NR_fileport_makeport      VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(430)
 #define __NR_fileport_makefd        VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(431)
 #define __NR_memorystatus_get_level VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(453)
 #define __NR_system_override        VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(454)
 #define __NR_vfs_purge              VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(455)
+#endif /* DARWIN_VERS >= DARWIN_10_9 */
+
+#if DARWIN_VERS == DARWIN_10_10
+#define __NR_bsdthread_ctl          VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(478)
 #endif
 
 #if DARWIN_VERS < DARWIN_10_6
 #define        __NR_MAXSYSCALL             VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(430)
 #elif DARWIN_VERS == DARWIN_10_9
 #define        __NR_MAXSYSCALL             VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(456)
+#elif DARWIN_VERS == DARWIN_10_10
+#define __NR_MAXSYSCALL             VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(490)
 #else
 #error unknown darwin version
 #endif