#include <mach/mach_types.defs>
#include <mach_debug/mach_debug_types.defs>
+#define CONCAT(a,b) a ## b
#if !KERNEL && !LIBSYSCALL_INTERFACE
-#define PREFIX(NAME) _kernelrpc_ ## NAME
+#define PREFIX(NAME) CONCAT(_kernelrpc_, NAME)
#else
#define PREFIX(NAME) NAME
#endif
+#if KERNEL_SERVER
+#define KERNEL_SERVER_SUFFIX(NAME) CONCAT(NAME, _external)
+#else
+#define KERNEL_SERVER_SUFFIX(NAME) NAME
+#endif
+
/*
* Allocate zero-filled memory in the address space
* of the target task, either at the specified address,
* allocation actually took place is returned.
*/
#if !defined(_MACH_VM_PUBLISH_AS_LOCAL_)
-routine PREFIX(mach_vm_allocate) (
+routine PREFIX(KERNEL_SERVER_SUFFIX(mach_vm_allocate)) (
target : vm_task_entry_t;
inout address : mach_vm_address_t;
size : mach_vm_size_t;
#if !KERNEL && !LIBSYSCALL_INTERFACE
skip;
#else
-routine PREFIX(vm_allocate) (
+routine PREFIX(KERNEL_SERVER_SUFFIX(vm_allocate)) (
target : vm_task_entry_t;
inout address : mach_vm_address_t;
size : mach_vm_size_t;
* for further consistency.]
*/
#if !defined(_MACH_VM_PUBLISH_AS_LOCAL_)
-routine PREFIX(mach_vm_map) (
+routine PREFIX(KERNEL_SERVER_SUFFIX(mach_vm_map)) (
#else
#if defined(__arm__) && !LIBSYSCALL_INTERFACE
routine _vm_map_arm(
#else
-routine PREFIX(vm_map) (
+routine PREFIX(KERNEL_SERVER_SUFFIX(vm_map)) (
#endif
#endif
target_task : vm_task_entry_t;
* Map portion of a task's address space.
*/
#if !defined(_MACH_VM_PUBLISH_AS_LOCAL_)
-routine PREFIX(mach_vm_remap) (
+routine PREFIX(KERNEL_SERVER_SUFFIX(mach_vm_remap)) (
#else
-routine PREFIX(vm_remap) (
+routine PREFIX(KERNEL_SERVER_SUFFIX(vm_remap)) (
#endif
target_task : vm_map_t;
inout target_address : mach_vm_address_t;
skip;
#endif
+#if !defined(_MACH_VM_PUBLISH_AS_LOCAL_)
+routine mach_vm_page_range_query(
+ target_map : vm_map_t;
+ address : mach_vm_offset_t;
+ size : mach_vm_size_t;
+ dispositions : mach_vm_address_t;
+ inout dispositions_count : mach_vm_size_t);
+#else
+skip;
+#endif
+
/****************************** Legacy section ***************************/
/* The following definitions are exist to provide compatibility with */
/* the legacy APIs. They are no different. We just need to produce */