Skip to content

Commit

Permalink
control trap
Browse files Browse the repository at this point in the history
  • Loading branch information
LouisBrunner committed Oct 21, 2024
1 parent 2bdfd68 commit 138d2de
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 2 deletions.
4 changes: 4 additions & 0 deletions coregrind/m_syswrap/priv_syswrap-darwin.h
Original file line number Diff line number Diff line change
Expand Up @@ -851,6 +851,10 @@ DECL_TEMPLATE(darwin, kernelrpc_mach_port_request_notification_trap);
DECL_TEMPLATE(darwin, mach_msg2);
#endif

#if DARWIN_VERS >= DARWIN_14_00
DECL_TEMPLATE(darwin, kernelrpc_mach_vm_purgable_control_trap);
#endif

// Machine-dependent traps
#if defined(VGA_arm64)
DECL_TEMPLATE(darwin, thread_set_tsd_base);
Expand Down
41 changes: 40 additions & 1 deletion coregrind/m_syswrap/syswrap-darwin.c
Original file line number Diff line number Diff line change
Expand Up @@ -10077,6 +10077,17 @@ static void munge_wll(UWord* a1, ULong* a2, ULong* a3,
# endif
}

static void munge_wlww(UWord* a1, ULong* a2, UWord* a3, UWord* a4,
UWord aRG1, UWord aRG2, UWord aRG3,
UWord aRG4, UWord aRG5)
{
# if defined(VGA_x86)
*a1 = aRG1; *a2 = LOHI64(aRG2,aRG3); *a3 = aRG4; *a4 = aRG5;
# else
*a1 = aRG1; *a2 = aRG2; *a3 = aRG3; *a4 = aRG4;
# endif
}

static void munge_wwlw(UWord* a1, UWord* a2, ULong* a3, UWord* a4,
UWord aRG1, UWord aRG2, UWord aRG3,
UWord aRG4, UWord aRG5)
Expand Down Expand Up @@ -11450,6 +11461,30 @@ PRE(map_with_linking_np)

#if DARWIN_VERS >= DARWIN_14_00

PRE(kernelrpc_mach_vm_purgable_control_trap)
{
UWord a1; ULong a2; UWord a3; UWord a4;
munge_wlww(&a1, &a2, &a3, &a4, ARG1, ARG2, ARG3, ARG4, ARG5);
PRINT("kernelrpc_mach_vm_purgable_control_trap"
"(target:%s, address:%#llx, control:%ld, state:%#lx)",
name_for_port(a1), a2, a3, a4);
PRE_REG_READ4(kern_return_t, "kernelrpc_mach_vm_purgable_control_trap",
mach_port_name_t, target, mach_vm_offset_t, address,
vm_purgable_t, control, int*/*really user_addr_t*/, state);
PRE_MEM_READ("kernelrpc_mach_vm_purgable_control_trap(state)", a4, sizeof(int));
PRE_MEM_WRITE("kernelrpc_mach_vm_purgable_control_trap(state)", a4, sizeof(int));
}

POST(kernelrpc_mach_vm_purgable_control_trap)
{
UWord a1; ULong a2; UWord a3; UWord a4;
munge_wlww(&a1, &a2, &a3, &a4, ARG1, ARG2, ARG3, ARG4, ARG5);
if (RES == 0) {
POST_MEM_WRITE(a4, sizeof(int));
PRINT("-> state: %#x", *(int*)a4);
}
}

#endif /* DARWIN_VERS >= DARWIN_14_00 */


Expand Down Expand Up @@ -12208,12 +12243,16 @@ const SyscallTableEntry ML_(mach_trap_table)[] = {
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(9)),

# if DARWIN_VERS >= DARWIN_10_8
MACXY(__NR_kernelrpc_mach_vm_allocate_trap, kernelrpc_mach_vm_allocate_trap),
MACXY(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(10), kernelrpc_mach_vm_allocate_trap),
# else
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(10)),
# endif

# if DARWIN_VERS >= DARWIN_14_00
MACXY(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(11), kernelrpc_mach_vm_purgable_control_trap),
# else
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(11)),
# endif

# if DARWIN_VERS >= DARWIN_10_8
MACXY(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(12), kernelrpc_mach_vm_deallocate_trap),
Expand Down
2 changes: 1 addition & 1 deletion include/vki/vki-scnums-darwin.h
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@
// osfmk/mach/syscall_sw.h

#define __NR_kernelrpc_mach_vm_allocate_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(10)

#define __NR_kernelrpc_mach_vm_purgable_control_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(11)
#define __NR_kernelrpc_mach_vm_deallocate_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(12)

#define __NR_kernelrpc_mach_vm_protect_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(14)
Expand Down

0 comments on commit 138d2de

Please sign in to comment.