]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Darwin syscall: initial wrapper for mach_voucher_extract_attr_recipe
authorPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 7 Dec 2025 08:52:04 +0000 (09:52 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 7 Dec 2025 08:52:04 +0000 (09:52 +0100)
It doesn't do any checking yet. However, with this change running
TextEditor with --tool=none gets as far as drawing a white box on
the screen. Then it fails because there is a missing mach trap handler
for

/* 11 */ MACH_TRAP(_kernelrpc_mach_vm_purgable_control_trap, 4, 5, munge_wlww),

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

index 1e770d43a06d0ab18c8772e5a6e5526790b2f16f..2a8d2809d93b91dcf8bdcf30bbd4e9b7c6da7e96 100644 (file)
@@ -722,6 +722,7 @@ DECL_TEMPLATE(darwin, mach_msg_bootstrap);
 DECL_TEMPLATE(darwin, mach_msg_host);
 DECL_TEMPLATE(darwin, mach_msg_task);
 DECL_TEMPLATE(darwin, mach_msg_thread);
+DECL_TEMPLATE(darwin, mach_voucher_extract_attr_recipe_trap); // MACH 72
 
 // Mach traps
 #if DARWIN_VERS >= DARWIN_10_8
index 183598812638d474cb11cdfb025adcf255072582..b265765bf8cf1d395fe2a0f143b6fb0124dfb931 100644 (file)
@@ -10689,15 +10689,28 @@ PRE(host_create_mach_voucher_trap)
     PRINT("host_create_mach_voucher_trap"
         "(host:%s, recipes:%#lx, recipes_size:%ld, voucher:%#lx)",
         name_for_port(ARG1), ARG2, ARG3, ARG4);
+    // FIXME PJF PRE_REG_READ?
     PRE_MEM_READ( "host_create_mach_voucher_trap(recipes)", ARG2, ARG3 );
     PRE_MEM_WRITE( "host_create_mach_voucher_trap(voucher)", ARG4, sizeof(mach_port_name_t) );
 }
+
 POST(host_create_mach_voucher_trap)
 {
   vg_assert(SUCCESS);
   POST_MEM_WRITE( ARG4, sizeof(mach_port_name_t) );
 }
 
+// MACH 72
+// kern_return_t mach_voucher_extract_attr_recipe(ipc_voucher_t                           voucher,
+//                                                mach_voucher_attr_key_t                 key,
+//                                                mach_voucher_attr_raw_recipe_t          raw_recipe,
+//                                                mach_voucher_attr_raw_recipe_size_t     *in_out_size)
+PRE(mach_voucher_extract_attr_recipe_trap)
+{
+    PRINT("mach_voucher_extract_attr_recipe(voucher:%#lx, key:%lu, raw_recipe:%#lx, in_out_size:%#lx)", ARG1, ARG2, ARG3, ARG4);
+    // FIXME PJF add MEM READ/WRITE and POST as needed
+}
+
 PRE(task_register_dyld_image_infos)
 {
 //#pragma pack(4)
@@ -11673,7 +11686,7 @@ const SyscallTableEntry ML_(mach_trap_table)[] = {
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(70)),
 #endif
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(71)),
-   _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(72)),
+   MACX_(__NR_mach_voucher_extract_attr_recipe_trap, mach_voucher_extract_attr_recipe_trap),
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(73)),
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(74)),
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(75)),
index f7f3b1105711435e83650828b71cbf27a52138c8..094852bca794dc85fd80ae5be18f182ea8ad37bf 100644 (file)
 #define __NR_host_create_mach_voucher_trap    VG_DARWIN_SYSCALL_CONSTRUCT_MACH(70)
 #endif
 
+#define __NR_mach_voucher_extract_attr_recipe_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(72)
+
 #define __NR_mach_timebase_info               VG_DARWIN_SYSCALL_CONSTRUCT_MACH(89)
 #define __NR_mach_wait_until                  VG_DARWIN_SYSCALL_CONSTRUCT_MACH(90)
 #define __NR_mk_timer_create                  VG_DARWIN_SYSCALL_CONSTRUCT_MACH(91)