|
From: Paul F. <pa...@so...> - 2025-12-07 08:55:14
|
https://sourceware.org/cgit/valgrind/commit/?id=f916877a38e88b935574530a8cc4ca98ccfd1d07 commit f916877a38e88b935574530a8cc4ca98ccfd1d07 Author: Paul Floyd <pj...@wa...> Date: Sun Dec 7 09:52:04 2025 +0100 Darwin syscall: initial wrapper for mach_voucher_extract_attr_recipe 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), Diff: --- coregrind/m_syswrap/priv_syswrap-darwin.h | 1 + coregrind/m_syswrap/syswrap-darwin.c | 15 ++++++++++++++- include/vki/vki-scnums-darwin.h | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index 1e770d43a0..2a8d2809d9 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -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 diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 1835988126..b265765bf8 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -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)), diff --git a/include/vki/vki-scnums-darwin.h b/include/vki/vki-scnums-darwin.h index f7f3b11057..094852bca7 100644 --- a/include/vki/vki-scnums-darwin.h +++ b/include/vki/vki-scnums-darwin.h @@ -213,6 +213,8 @@ #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) |