Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | /* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*- * * Copyright (c) 2004-2013 Apple Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ #ifndef __DYLD_SYSCALL_HELPERS__ #define __DYLD_SYSCALL_HELPERS__ #include <dirent.h> #include <mach-o/loader.h> #if __cplusplus namespace dyld { #endif // // This file contains the table of function pointers the host dyld supplies // to the iOS simulator dyld. // struct SyscallHelpers { uintptr_t version; int (*open)(const char* path, int oflag, int extra); int (*close)(int fd); ssize_t (*pread)(int fd, void* buf, size_t nbyte, off_t offset); ssize_t (*write)(int fd, const void* buf, size_t nbyte); void* (*mmap)(void* addr, size_t len, int prot, int flags, int fd, off_t offset); int (*munmap)(void* addr, size_t len); int (*madvise)(void* addr, size_t len, int advice); int (*stat)(const char* path, struct stat* buf); int (*fcntl)(int fildes, int cmd, void* result); int (*ioctl)(int fildes, unsigned long request, void* result); int (*issetugid)(void); char* (*getcwd)(char* buf, size_t size); char* (*realpath)(const char* file_name, char* resolved_name); kern_return_t (*vm_allocate)(vm_map_t target_task, vm_address_t *address, vm_size_t size, int flags); kern_return_t (*vm_deallocate)(vm_map_t target_task, vm_address_t address, vm_size_t size); 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); void (*vlog)(const char* format, va_list list); void (*vwarn)(const char* format, va_list list); int (*pthread_mutex_lock)(pthread_mutex_t* m); int (*pthread_mutex_unlock)(pthread_mutex_t* m); mach_port_t (*mach_thread_self)(void); kern_return_t (*mach_port_deallocate)(ipc_space_t task, mach_port_name_t name); mach_port_name_t(*task_self_trap)(void); kern_return_t (*mach_timebase_info)(mach_timebase_info_t info); bool (*OSAtomicCompareAndSwapPtrBarrier)(void* old, void* nw, void * volatile *value); void (*OSMemoryBarrier)(void); void* (*getProcessInfo)(void); // returns dyld_all_image_infos*; int* (*errnoAddress)(); uint64_t (*mach_absolute_time)(); // Added in version 2 kern_return_t (*thread_switch)(mach_port_name_t, int, mach_msg_timeout_t); // Added in version 3 DIR* (*opendir)(const char* path); int (*readdir_r)(DIR* dirp, struct dirent* entry, struct dirent **result); int (*closedir)(DIR* dirp); // Added in version 4 void (*coresymbolication_load_notifier)(void *connection, uint64_t load_timestamp, const char *image_path, const struct mach_header *mach_header); void (*coresymbolication_unload_notifier)(void *connection, uint64_t unload_timestamp, const char *image_path, const struct mach_header *mach_header); // Added in version 5 int (*proc_regionfilename)(int pid, uint64_t address, void* buffer, uint32_t buffersize); int (*getpid)(); 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); kern_return_t (*mach_port_allocate)(ipc_space_t, mach_port_right_t, mach_port_name_t*); 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); // Added in version 6 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); // Add in version 7 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); 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); 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); 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); kern_return_t (*task_register_dyld_set_dyld_state)(task_t task, uint8_t dyld_state); kern_return_t (*task_register_dyld_get_process_state)(task_t task, dyld_kernel_process_info_t *dyld_process_state); }; extern const struct SyscallHelpers* gSyscallHelpers; #if __cplusplus } #endif #endif |