1 /* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*-
3 * Copyright (c) 2004-2013 Apple Inc. All rights reserved.
5 * @APPLE_LICENSE_HEADER_START@
7 * This file contains Original Code and/or Modifications of Original Code
8 * as defined in and that are subject to the Apple Public Source License
9 * Version 2.0 (the 'License'). You may not use this file except in
10 * compliance with the License. Please obtain a copy of the License at
11 * http://www.opensource.apple.com/apsl/ and read it before using this
14 * The Original Code and all software distributed under the License are
15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
19 * Please see the License for the specific language governing rights and
20 * limitations under the License.
22 * @APPLE_LICENSE_HEADER_END@
26 #ifndef __DYLD_SYSCALL_HELPERS__
27 #define __DYLD_SYSCALL_HELPERS__
30 #include <mach-o/loader.h>
37 // This file contains the table of function pointers the host dyld supplies
38 // to the iOS simulator dyld.
43 int (*open
)(const char* path
, int oflag
, int extra
);
45 ssize_t (*pread
)(int fd
, void* buf
, size_t nbyte
, off_t offset
);
46 ssize_t (*write
)(int fd
, const void* buf
, size_t nbyte
);
47 void* (*mmap
)(void* addr
, size_t len
, int prot
, int flags
, int fd
, off_t offset
);
48 int (*munmap
)(void* addr
, size_t len
);
49 int (*madvise
)(void* addr
, size_t len
, int advice
);
50 int (*stat
)(const char* path
, struct stat
* buf
);
51 int (*fcntl
)(int fildes
, int cmd
, void* result
);
52 int (*ioctl
)(int fildes
, unsigned long request
, void* result
);
53 int (*issetugid
)(void);
54 char* (*getcwd
)(char* buf
, size_t size
);
55 char* (*realpath
)(const char* file_name
, char* resolved_name
);
56 kern_return_t (*vm_allocate
)(vm_map_t target_task
, vm_address_t
*address
, vm_size_t size
, int flags
);
57 kern_return_t (*vm_deallocate
)(vm_map_t target_task
, vm_address_t address
, vm_size_t size
);
58 kern_return_t (*vm_protect
)(vm_map_t target_task
, vm_address_t address
, vm_size_t size
, boolean_t max
, vm_prot_t prot
);
59 void (*vlog
)(const char* format
, va_list list
);
60 void (*vwarn
)(const char* format
, va_list list
);
61 int (*pthread_mutex_lock
)(pthread_mutex_t
* m
);
62 int (*pthread_mutex_unlock
)(pthread_mutex_t
* m
);
63 mach_port_t (*mach_thread_self
)(void);
64 kern_return_t (*mach_port_deallocate
)(ipc_space_t task
, mach_port_name_t name
);
65 mach_port_name_t(*task_self_trap
)(void);
66 kern_return_t (*mach_timebase_info
)(mach_timebase_info_t info
);
67 bool (*OSAtomicCompareAndSwapPtrBarrier
)(void* old
, void* nw
, void * volatile *value
);
68 void (*OSMemoryBarrier
)(void);
69 void* (*getProcessInfo
)(void); // returns dyld_all_image_infos*;
70 int* (*errnoAddress
)(void);
71 uint64_t (*mach_absolute_time
)(void);
73 kern_return_t (*thread_switch
)(mach_port_name_t
, int, mach_msg_timeout_t
);
75 DIR* (*opendir
)(const char* path
);
76 int (*readdir_r
)(DIR* dirp
, struct dirent
* entry
, struct dirent
**result
);
77 int (*closedir
)(DIR* dirp
);
79 void (*coresymbolication_load_notifier
)(void *connection
, uint64_t load_timestamp
, const char *image_path
, const struct mach_header
*mach_header
);
80 void (*coresymbolication_unload_notifier
)(void *connection
, uint64_t unload_timestamp
, const char *image_path
, const struct mach_header
*mach_header
);
82 int (*proc_regionfilename
)(int pid
, uint64_t address
, void* buffer
, uint32_t buffersize
);
84 kern_return_t (*mach_port_insert_right
)(ipc_space_t task
, mach_port_name_t name
, mach_port_t poly
, mach_msg_type_name_t polyPoly
);
85 kern_return_t (*mach_port_allocate
)(ipc_space_t
, mach_port_right_t
, mach_port_name_t
*);
86 kern_return_t (*mach_msg
)(mach_msg_header_t
*, mach_msg_option_t
, mach_msg_size_t
, mach_msg_size_t
, mach_port_name_t
, mach_msg_timeout_t
, mach_port_name_t
);
88 void (*abort_with_payload
)(uint32_t reason_namespace
, uint64_t reason_code
, void* payload
, uint32_t payload_size
, const char* reason_string
, uint64_t reason_flags
);
90 kern_return_t (*task_register_dyld_image_infos
)(task_t task
, dyld_kernel_image_info_array_t dyld_images
, mach_msg_type_number_t dyld_imagesCnt
);
91 kern_return_t (*task_unregister_dyld_image_infos
)(task_t task
, dyld_kernel_image_info_array_t dyld_images
, mach_msg_type_number_t dyld_imagesCnt
);
92 kern_return_t (*task_get_dyld_image_infos
)(task_t task
, dyld_kernel_image_info_array_t
*dyld_images
, mach_msg_type_number_t
*dyld_imagesCnt
);
93 kern_return_t (*task_register_dyld_shared_cache_image_info
)(task_t task
, dyld_kernel_image_info_t dyld_cache_image
, boolean_t no_cache
, boolean_t private_cache
);
94 kern_return_t (*task_register_dyld_set_dyld_state
)(task_t task
, uint8_t dyld_state
);
95 kern_return_t (*task_register_dyld_get_process_state
)(task_t task
, dyld_kernel_process_info_t
*dyld_process_state
);
96 kern_return_t (*task_info
)(task_name_t target_task
, task_flavor_t flavor
, task_info_t task_info_out
, mach_msg_type_number_t
*task_info_outCnt
);
97 kern_return_t (*thread_info
)(thread_inspect_t target_act
, thread_flavor_t flavor
, thread_info_t thread_info_out
, mach_msg_type_number_t
*thread_info_outCnt
);
99 bool (*kdebug_is_enabled
)(uint32_t code
);
100 int (*kdebug_trace
)(uint32_t code
, uint64_t arg1
, uint64_t arg2
, uint64_t arg3
, uint64_t arg4
);
102 uint64_t (*kdebug_trace_string
)(uint32_t debugid
, uint64_t str_id
, const char *str
);
104 int (*amfi_check_dyld_policy_self
)(uint64_t input_flags
, uint64_t* output_flags
);
106 void (*notifyMonitoringDyldMain
)(void);
107 void (*notifyMonitoringDyld
)(bool unloading
, unsigned imageCount
, const struct mach_header
* loadAddresses
[], const char* imagePaths
[]);
109 void (*mach_msg_destroy
)(mach_msg_header_t
*msg
);
110 kern_return_t (*mach_port_construct
)(ipc_space_t task
, mach_port_options_ptr_t options
, mach_port_context_t context
, mach_port_name_t
*name
);
111 kern_return_t (*mach_port_destruct
)(ipc_space_t task
, mach_port_name_t name
, mach_port_delta_t srdelta
, mach_port_context_t guard
);
113 extern const struct SyscallHelpers
* gSyscallHelpers
;