#ifndef _MACH_SHARED_REGION_H_
#define _MACH_SHARED_REGION_H_
#include <sys/cdefs.h>
#include <mach/vm_prot.h>
#include <mach/vm_types.h>
#include <mach/mach_types.h>
#define SHARED_REGION_BASE_I386 0x90000000ULL
#define SHARED_REGION_SIZE_I386 0x20000000ULL
#define SHARED_REGION_NESTING_BASE_I386 0x90000000ULL
#define SHARED_REGION_NESTING_SIZE_I386 0x20000000ULL
#define SHARED_REGION_NESTING_MIN_I386 0x00200000ULL
#define SHARED_REGION_NESTING_MAX_I386 0xFFE00000ULL
#define SHARED_REGION_BASE_X86_64 0x00007FFF00000000ULL
#define SHARED_REGION_SIZE_X86_64 0x00000000FFE00000ULL
#define SHARED_REGION_NESTING_BASE_X86_64 0x00007FFF00000000ULL
#define SHARED_REGION_NESTING_SIZE_X86_64 0x00000000FFE00000ULL
#define SHARED_REGION_NESTING_MIN_X86_64 0x0000000000200000ULL
#define SHARED_REGION_NESTING_MAX_X86_64 0xFFFFFFFFFFE00000ULL
#ifdef XNU_KERNEL_PRIVATE
#endif
#define SHARED_REGION_BASE_PPC 0x90000000ULL
#define SHARED_REGION_SIZE_PPC 0x20000000ULL
#define SHARED_REGION_NESTING_BASE_PPC 0x90000000ULL
#define SHARED_REGION_NESTING_SIZE_PPC 0x10000000ULL
#define SHARED_REGION_NESTING_MIN_PPC 0x10000000ULL
#define SHARED_REGION_NESTING_MAX_PPC 0x10000000ULL
#define SHARED_REGION_BASE_PPC64 0x00007FFF60000000ULL
#define SHARED_REGION_SIZE_PPC64 0x00000000A0000000ULL
#define SHARED_REGION_NESTING_BASE_PPC64 0x00007FFF60000000ULL
#define SHARED_REGION_NESTING_SIZE_PPC64 0x00000000A0000000ULL
#define SHARED_REGION_NESTING_MIN_PPC64 0x0000000010000000ULL
#define SHARED_REGION_NESTING_MAX_PPC64 0x0000000010000000ULL
#define SHARED_REGION_BASE_ARM 0x40000000ULL
#define SHARED_REGION_SIZE_ARM 0x40000000ULL
#define SHARED_REGION_NESTING_BASE_ARM 0x40000000ULL
#define SHARED_REGION_NESTING_SIZE_ARM 0x40000000ULL
#define SHARED_REGION_NESTING_MIN_ARM ?
#define SHARED_REGION_NESTING_MAX_ARM ?
#define SHARED_REGION_BASE_ARM64_32 0x1A000000ULL
#define SHARED_REGION_SIZE_ARM64_32 0x40000000ULL
#define SHARED_REGION_NESTING_BASE_ARM64_32 0x1A000000ULL
#define SHARED_REGION_NESTING_SIZE_ARM64_32 0x40000000ULL
#define SHARED_REGION_NESTING_MIN_ARM64_32 ?
#define SHARED_REGION_NESTING_MAX_ARM64_32 ?
#ifdef XNU_KERNEL_PRIVATE
#endif
#define SHARED_REGION_BASE_ARM64 0x180000000ULL
#define SHARED_REGION_SIZE_ARM64 0x100000000ULL
#define SHARED_REGION_NESTING_BASE_ARM64 SHARED_REGION_BASE_ARM64
#define SHARED_REGION_NESTING_SIZE_ARM64 SHARED_REGION_SIZE_ARM64
#define SHARED_REGION_NESTING_MIN_ARM64 ?
#define SHARED_REGION_NESTING_MAX_ARM64 ?
#if defined(__i386__)
#define SHARED_REGION_BASE SHARED_REGION_BASE_I386
#define SHARED_REGION_SIZE SHARED_REGION_SIZE_I386
#define SHARED_REGION_NESTING_BASE SHARED_REGION_NESTING_BASE_I386
#define SHARED_REGION_NESTING_SIZE SHARED_REGION_NESTING_SIZE_I386
#define SHARED_REGION_NESTING_MIN SHARED_REGION_NESTING_MIN_I386
#define SHARED_REGION_NESTING_MAX SHARED_REGION_NESTING_MAX_I386
#elif defined(__x86_64__)
#define SHARED_REGION_BASE SHARED_REGION_BASE_X86_64
#define SHARED_REGION_SIZE SHARED_REGION_SIZE_X86_64
#define SHARED_REGION_NESTING_BASE SHARED_REGION_NESTING_BASE_X86_64
#define SHARED_REGION_NESTING_SIZE SHARED_REGION_NESTING_SIZE_X86_64
#define SHARED_REGION_NESTING_MIN SHARED_REGION_NESTING_MIN_X86_64
#define SHARED_REGION_NESTING_MAX SHARED_REGION_NESTING_MAX_X86_64
#elif defined(__arm__)
#define SHARED_REGION_BASE SHARED_REGION_BASE_ARM
#define SHARED_REGION_SIZE SHARED_REGION_SIZE_ARM
#define SHARED_REGION_NESTING_BASE SHARED_REGION_NESTING_BASE_ARM
#define SHARED_REGION_NESTING_SIZE SHARED_REGION_NESTING_SIZE_ARM
#define SHARED_REGION_NESTING_MIN SHARED_REGION_NESTING_MIN_ARM
#define SHARED_REGION_NESTING_MAX SHARED_REGION_NESTING_MAX_ARM
#elif defined(__arm64__) && !defined(__LP64__)
#define SHARED_REGION_BASE SHARED_REGION_BASE_ARM64_32
#define SHARED_REGION_SIZE SHARED_REGION_SIZE_ARM64_32
#define SHARED_REGION_NESTING_BASE SHARED_REGION_NESTING_BASE_ARM64_32
#define SHARED_REGION_NESTING_SIZE SHARED_REGION_NESTING_SIZE_ARM64_32
#define SHARED_REGION_NESTING_MIN SHARED_REGION_NESTING_MIN_ARM64_32
#define SHARED_REGION_NESTING_MAX SHARED_REGION_NESTING_MAX_ARM64_32
#elif defined(__arm64__) && defined(__LP64__)
#define SHARED_REGION_BASE SHARED_REGION_BASE_ARM64
#define SHARED_REGION_SIZE SHARED_REGION_SIZE_ARM64
#define SHARED_REGION_NESTING_BASE SHARED_REGION_NESTING_BASE_ARM64
#define SHARED_REGION_NESTING_SIZE SHARED_REGION_NESTING_SIZE_ARM64
#define SHARED_REGION_NESTING_MIN SHARED_REGION_NESTING_MIN_ARM64
#define SHARED_REGION_NESTING_MAX SHARED_REGION_NESTING_MAX_ARM64
#endif
#ifdef KERNEL_PRIVATE
void post_sys_powersource(int);
#endif
struct shared_file_mapping_np {
mach_vm_address_t sfm_address;
mach_vm_size_t sfm_size;
mach_vm_offset_t sfm_file_offset;
vm_prot_t sfm_max_prot;
vm_prot_t sfm_init_prot;
};
struct shared_file_mapping_slide_np {
mach_vm_address_t sms_address;
mach_vm_size_t sms_size;
mach_vm_offset_t sms_file_offset;
user_addr_t sms_slide_size;
user_addr_t sms_slide_start;
vm_prot_t sms_max_prot;
vm_prot_t sms_init_prot;
};
struct shared_file_np {
int sf_fd;
uint32_t sf_mappings_count;
uint32_t sf_slide;
};
#define VM_PROT_COW 0x08
#define VM_PROT_ZF 0x10
#define VM_PROT_SLIDE 0x20
#define VM_PROT_NOAUTH 0x40
#define VM_PROT_TRANSLATED_ALLOW_EXECUTE 0x80
#ifndef KERNEL
__BEGIN_DECLS
int shared_region_check_np(uint64_t *startaddress);
int shared_region_map_np(int fd,
uint32_t mappingCount,
const struct shared_file_mapping_np *mappings);
int shared_region_slide_np(void);
__END_DECLS
#endif
#endif