dyld-640.2.tar.gz
[apple/dyld.git] / src / dyldSyscallInterface.h
1 /* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*-
2 *
3 * Copyright (c) 2004-2013 Apple Inc. All rights reserved.
4 *
5 * @APPLE_LICENSE_HEADER_START@
6 *
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
12 * file.
13 *
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.
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24
25
26 #ifndef __DYLD_SYSCALL_HELPERS__
27 #define __DYLD_SYSCALL_HELPERS__
28
29 #include <dirent.h>
30 #include <mach-o/loader.h>
31
32 #if __cplusplus
33 namespace dyld {
34 #endif
35
36 //
37 // This file contains the table of function pointers the host dyld supplies
38 // to the iOS simulator dyld.
39 //
40 struct SyscallHelpers
41 {
42 uintptr_t version;
43 int (*open)(const char* path, int oflag, int extra);
44 int (*close)(int fd);
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);
72 // Added in version 2
73 kern_return_t (*thread_switch)(mach_port_name_t, int, mach_msg_timeout_t);
74 // Added in version 3
75 DIR* (*opendir)(const char* path);
76 int (*readdir_r)(DIR* dirp, struct dirent* entry, struct dirent **result);
77 int (*closedir)(DIR* dirp);
78 // Added in version 4
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);
81 // Added in version 5
82 int (*proc_regionfilename)(int pid, uint64_t address, void* buffer, uint32_t buffersize);
83 int (*getpid)(void);
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);
87 // Added in version 6
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);
89 // Add in version 7
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);
98 // Add in version 8
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);
101 // Add in version 9
102 uint64_t (*kdebug_trace_string)(uint32_t debugid, uint64_t str_id, const char *str);
103 // Add in version 10
104 int (*amfi_check_dyld_policy_self)(uint64_t input_flags, uint64_t* output_flags);
105 // Add in version 11
106 void (*notifyMonitoringDyldMain)(void);
107 void (*notifyMonitoringDyld)(bool unloading, unsigned imageCount, const struct mach_header* loadAddresses[], const char* imagePaths[]);
108 // Add in version 12
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);
112 };
113 extern const struct SyscallHelpers* gSyscallHelpers;
114
115
116 #if __cplusplus
117 }
118 #endif
119
120 #endif