// Mach traps
#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_allocate_trap); // MACH 10
+DECL_TEMPLATE(darwin, kernelrpc_mach_vm_purgable_control_trap); // MACH 11
+DECL_TEMPLATE(darwin, kernelrpc_mach_vm_deallocate_trap); // MACH 12
DECL_TEMPLATE(darwin, kernelrpc_mach_vm_protect_trap);
DECL_TEMPLATE(darwin, kernelrpc_mach_vm_map_trap);
DECL_TEMPLATE(darwin, kernelrpc_mach_port_allocate_trap);
PRE_MEM_WRITE("kernelrpc_mach_vm_allocate_trap(address)",
a2, sizeof(void*));
}
+
POST(kernelrpc_mach_vm_allocate_trap)
{
UWord a1; UWord a2; ULong a3; UWord a4;
}
}
+// MACH 11
+// kern_return_t _kernelrpc_mach_vm_purgable_control_trap(mach_port_name_t target,
+// mach_vm_offset_t address,
+// vm_purgable_t control,
+// int *state);
+PRE(kernelrpc_mach_vm_purgable_control_trap)
+{
+ // FIXME PJF munge?
+ PRINT("kernelrpc_mach_vm_purgable_control_trap"
+ "(target:%#lx, address:%#lx, control:%ld, state:%#lx)",
+ ARG1, ARG2, SARG3, ARG4);
+ // FIXME PJF PRE_REG_READ and READ/WRITE MEM
+}
+
PRE(kernelrpc_mach_vm_deallocate_trap)
{
UWord a1; ULong a2; ULong a3;
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(10)),
# endif
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(11)),
+ MACX_(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(11), kernelrpc_mach_vm_purgable_control_trap),
# if DARWIN_VERS >= DARWIN_10_8
MACXY(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(12), kernelrpc_mach_vm_deallocate_trap),
// 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)