Root/
Source at commit 1085 created 13 years 1 month ago. By azimutz, Runaway "min"; fixes build. | |
---|---|
1 | /*␊ |
2 | * Copyright (c) 1999-2008 Apple Inc. All rights reserved.␊ |
3 | *␊ |
4 | * @APPLE_LICENSE_HEADER_START@␊ |
5 | * ␊ |
6 | * This file contains Original Code and/or Modifications of Original Code␊ |
7 | * as defined in and that are subject to the Apple Public Source License␊ |
8 | * Version 2.0 (the 'License'). You may not use this file except in␊ |
9 | * compliance with the License. Please obtain a copy of the License at␊ |
10 | * http://www.opensource.apple.com/apsl/ and read it before using this␊ |
11 | * file.␊ |
12 | * ␊ |
13 | * The Original Code and all software distributed under the License are␊ |
14 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
15 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
16 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
17 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.␊ |
18 | * Please see the License for the specific language governing rights and␊ |
19 | * limitations under the License.␊ |
20 | * ␊ |
21 | * @APPLE_LICENSE_HEADER_END@␊ |
22 | */␊ |
23 | #ifndef _MACH_O_DYLD_H_␊ |
24 | #define _MACH_O_DYLD_H_␊ |
25 | ␊ |
26 | ␊ |
27 | #include <stddef.h>␊ |
28 | #include <stdint.h>␊ |
29 | #include <stdbool.h>␊ |
30 | ␊ |
31 | #include <mach-o/loader.h>␊ |
32 | #include <Availability.h>␊ |
33 | ␊ |
34 | #if __cplusplus␊ |
35 | extern "C" {␊ |
36 | #endif ␊ |
37 | ␊ |
38 | /*␊ |
39 | * The following functions allow you to iterate through all loaded images. ␊ |
40 | * This is not a thread safe operation. Another thread can add or remove␊ |
41 | * an image during the iteration. ␊ |
42 | *␊ |
43 | * Many uses of these routines can be replace by a call to dladdr() which ␊ |
44 | * will return the mach_header and name of an image, given an address in ␊ |
45 | * the image. dladdr() is thread safe.␊ |
46 | */␊ |
47 | extern uint32_t _dyld_image_count(void) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
48 | extern const struct mach_header* _dyld_get_image_header(uint32_t image_index) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
49 | extern intptr_t _dyld_get_image_vmaddr_slide(uint32_t image_index) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
50 | extern const char* _dyld_get_image_name(uint32_t image_index) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
51 | ␊ |
52 | ␊ |
53 | /*␊ |
54 | * The following functions allow you to install callbacks which will be called ␊ |
55 | * by dyld whenever an image is loaded or unloaded. During a call to _dyld_register_func_for_add_image()␊ |
56 | * the callback func is called for every existing image. Later, it is called as each new image␊ |
57 | * is loaded and bound (but initializers not yet run). The callback registered with␊ |
58 | * _dyld_register_func_for_remove_image() is called after any terminators in an image are run␊ |
59 | * and before the image is un-memory-mapped.␊ |
60 | */␊ |
61 | extern void _dyld_register_func_for_add_image(void (*func)(const struct mach_header* mh, intptr_t vmaddr_slide)) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
62 | extern void _dyld_register_func_for_remove_image(void (*func)(const struct mach_header* mh, intptr_t vmaddr_slide)) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
63 | ␊ |
64 | ␊ |
65 | /*␊ |
66 | * NSVersionOfRunTimeLibrary() returns the current_version number of the currently dylib ␊ |
67 | * specifed by the libraryName. The libraryName parameter would be "bar" for /path/libbar.3.dylib and␊ |
68 | * "Foo" for /path/Foo.framework/Versions/A/Foo. It returns -1 if no such library is loaded.␊ |
69 | */␊ |
70 | extern int32_t NSVersionOfRunTimeLibrary(const char* libraryName) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
71 | ␊ |
72 | ␊ |
73 | /*␊ |
74 | * NSVersionOfRunTimeLibrary() returns the current_version number that the main executable was linked␊ |
75 | * against at build time. The libraryName parameter would be "bar" for /path/libbar.3.dylib and␊ |
76 | * "Foo" for /path/Foo.framework/Versions/A/Foo. It returns -1 if the main executable did not link␊ |
77 | * against the specified library.␊ |
78 | */␊ |
79 | extern int32_t NSVersionOfLinkTimeLibrary(const char* libraryName) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
80 | ␊ |
81 | ␊ |
82 | /*␊ |
83 | * _NSGetExecutablePath() copies the path of the main executable into the buffer. The bufsize parameter␊ |
84 | * should initially be the size of the buffer. The function returns 0 if the path was successfully copied,␊ |
85 | * and *bufsize is left unchanged. It returns -1 if the buffer is not large enough, and *bufsize is set ␊ |
86 | * to the size required. ␊ |
87 | * ␊ |
88 | * Note that _NSGetExecutablePath will return "a path" to the executable not a "real path" to the executable. ␊ |
89 | * That is the path may be a symbolic link and not the real file. With deep directories the total bufsize ␊ |
90 | * needed could be more than MAXPATHLEN.␊ |
91 | */␊ |
92 | extern int _NSGetExecutablePath(char* buf, uint32_t* bufsize) __OSX_AVAILABLE_STARTING(__MAC_10_2, __IPHONE_2_0);␊ |
93 | ␊ |
94 | ␊ |
95 | ␊ |
96 | /*␊ |
97 | * _dyld_moninit() is a private interface between dyld and libSystem.␊ |
98 | */␊ |
99 | extern void _dyld_moninit(void (*monaddition)(char *lowpc, char *highpc)) __OSX_AVAILABLE_STARTING(__MAC_10_1, __IPHONE_2_0);␊ |
100 | ␊ |
101 | ␊ |
102 | ␊ |
103 | ␊ |
104 | ␊ |
105 | /*␊ |
106 | * The following dyld API's are deprecated as of Mac OS X 10.5. They are either ␊ |
107 | * no longer necessary or are superceeded by dlopen and friends in <dlfcn.h>.␊ |
108 | * dlopen/dlsym/dlclose have been available since Mac OS X 10.3 and work with ␊ |
109 | * dylibs and bundles. ␊ |
110 | *␊ |
111 | * NSAddImage -> dlopen␊ |
112 | * NSLookupSymbolInImage -> dlsym␊ |
113 | * NSCreateObjectFileImageFromFile -> dlopen␊ |
114 | * NSDestroyObjectFileImage -> dlclose␊ |
115 | * NSLinkModule -> not needed when dlopen used␊ |
116 | * NSUnLinkModule -> not needed when dlclose used␊ |
117 | * NSLookupSymbolInModule -> dlsym␊ |
118 | * _dyld_image_containing_address -> dladdr␊ |
119 | * NSLinkEditError -> dlerror␊ |
120 | *␊ |
121 | */␊ |
122 | ␊ |
123 | #ifndef ENUM_DYLD_BOOL␊ |
124 | #define ENUM_DYLD_BOOL␊ |
125 | #undef FALSE␊ |
126 | #undef TRUE␊ |
127 | enum DYLD_BOOL { FALSE, TRUE };␊ |
128 | #endif /* ENUM_DYLD_BOOL */␊ |
129 | ␊ |
130 | ␊ |
131 | /* Object file image API */␊ |
132 | typedef enum {␊ |
133 | NSObjectFileImageFailure, /* for this a message is printed on stderr */␊ |
134 | NSObjectFileImageSuccess,␊ |
135 | NSObjectFileImageInappropriateFile,␊ |
136 | NSObjectFileImageArch,␊ |
137 | NSObjectFileImageFormat, /* for this a message is printed on stderr */␊ |
138 | NSObjectFileImageAccess␊ |
139 | } NSObjectFileImageReturnCode;␊ |
140 | ␊ |
141 | typedef struct __NSObjectFileImage* NSObjectFileImage;␊ |
142 | ␊ |
143 | /* NSObjectFileImage can only be used with MH_BUNDLE files */␊ |
144 | extern NSObjectFileImageReturnCode NSCreateObjectFileImageFromFile(const char* pathName, NSObjectFileImage *objectFileImage) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
145 | extern NSObjectFileImageReturnCode NSCreateObjectFileImageFromMemory(const void *address, size_t size, NSObjectFileImage *objectFileImage) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
146 | extern bool NSDestroyObjectFileImage(NSObjectFileImage objectFileImage) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
147 | ␊ |
148 | extern uint32_t NSSymbolDefinitionCountInObjectFileImage(NSObjectFileImage objectFileImage) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
149 | extern const char* NSSymbolDefinitionNameInObjectFileImage(NSObjectFileImage objectFileImage, uint32_t ordinal) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
150 | extern uint32_t NSSymbolReferenceCountInObjectFileImage(NSObjectFileImage objectFileImage) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
151 | extern const char* NSSymbolReferenceNameInObjectFileImage(NSObjectFileImage objectFileImage, uint32_t ordinal, bool *tentative_definition) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
152 | extern bool NSIsSymbolDefinedInObjectFileImage(NSObjectFileImage objectFileImage, const char* symbolName) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
153 | extern void* NSGetSectionDataInObjectFileImage(NSObjectFileImage objectFileImage, const char* segmentName, const char* sectionName, size_t *size) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
154 | extern bool NSHasModInitObjectFileImage(NSObjectFileImage objectFileImage) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_3,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
155 | ␊ |
156 | typedef struct __NSModule* NSModule;␊ |
157 | extern const char* NSNameOfModule(NSModule m) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
158 | extern const char* NSLibraryNameForModule(NSModule m) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
159 | ␊ |
160 | extern NSModule NSLinkModule(NSObjectFileImage objectFileImage, const char* moduleName, uint32_t options) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
161 | #define NSLINKMODULE_OPTION_NONE 0x0␊ |
162 | #define NSLINKMODULE_OPTION_BINDNOW 0x1␊ |
163 | #define NSLINKMODULE_OPTION_PRIVATE 0x2␊ |
164 | #define NSLINKMODULE_OPTION_RETURN_ON_ERROR 0x4␊ |
165 | #define NSLINKMODULE_OPTION_DONT_CALL_MOD_INIT_ROUTINES 0x8␊ |
166 | #define NSLINKMODULE_OPTION_TRAILING_PHYS_NAME 0x10␊ |
167 | ␊ |
168 | extern bool NSUnLinkModule(NSModule module, uint32_t options) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
169 | #define NSUNLINKMODULE_OPTION_NONE 0x0␊ |
170 | #define NSUNLINKMODULE_OPTION_KEEP_MEMORY_MAPPED 0x1␊ |
171 | #define NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES␉0x2␊ |
172 | ␊ |
173 | /* symbol API */␊ |
174 | typedef struct __NSSymbol* NSSymbol;␊ |
175 | extern bool NSIsSymbolNameDefined(const char* symbolName) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
176 | extern bool NSIsSymbolNameDefinedWithHint(const char* symbolName, const char* libraryNameHint) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
177 | extern bool NSIsSymbolNameDefinedInImage(const struct mach_header* image, const char* symbolName) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
178 | extern NSSymbol NSLookupAndBindSymbol(const char* symbolName) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
179 | extern NSSymbol NSLookupAndBindSymbolWithHint(const char* symbolName, const char* libraryNameHint) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
180 | extern NSSymbol NSLookupSymbolInModule(NSModule module, const char* symbolName) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
181 | extern NSSymbol NSLookupSymbolInImage(const struct mach_header* image, const char* symbolName, uint32_t options) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
182 | #define NSLOOKUPSYMBOLINIMAGE_OPTION_BIND 0x0␊ |
183 | #define NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_NOW 0x1␊ |
184 | #define NSLOOKUPSYMBOLINIMAGE_OPTION_BIND_FULLY 0x2␊ |
185 | #define NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR 0x4␊ |
186 | extern const char* NSNameOfSymbol(NSSymbol symbol) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
187 | extern void * NSAddressOfSymbol(NSSymbol symbol) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
188 | extern NSModule NSModuleForSymbol(NSSymbol symbol) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
189 | ␊ |
190 | /* error handling API */␊ |
191 | typedef enum {␊ |
192 | NSLinkEditFileAccessError,␊ |
193 | NSLinkEditFileFormatError,␊ |
194 | NSLinkEditMachResourceError,␊ |
195 | NSLinkEditUnixResourceError,␊ |
196 | NSLinkEditOtherError,␊ |
197 | NSLinkEditWarningError,␊ |
198 | NSLinkEditMultiplyDefinedError,␊ |
199 | NSLinkEditUndefinedError␊ |
200 | } NSLinkEditErrors;␊ |
201 | ␊ |
202 | /*␊ |
203 | * For the NSLinkEditErrors value NSLinkEditOtherError these are the values␊ |
204 | * passed to the link edit error handler as the errorNumber (what would be an␊ |
205 | * errno value for NSLinkEditUnixResourceError or a kern_return_t value for␊ |
206 | * NSLinkEditMachResourceError).␊ |
207 | */␊ |
208 | typedef enum {␊ |
209 | NSOtherErrorRelocation, ␊ |
210 | NSOtherErrorLazyBind,␊ |
211 | NSOtherErrorIndrLoop,␊ |
212 | NSOtherErrorLazyInit,␊ |
213 | NSOtherErrorInvalidArgs␊ |
214 | } NSOtherErrorNumbers;␊ |
215 | ␊ |
216 | extern void NSLinkEditError(NSLinkEditErrors *c, int *errorNumber, const char** fileName, const char** errorString) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
217 | ␊ |
218 | typedef struct {␊ |
219 | void (*undefined)(const char* symbolName);␊ |
220 | NSModule (*multiple)(NSSymbol s, NSModule oldModule, NSModule newModule); ␊ |
221 | void (*linkEdit)(NSLinkEditErrors errorClass, int errorNumber,␊ |
222 | const char* fileName, const char* errorString);␊ |
223 | } NSLinkEditErrorHandlers;␊ |
224 | ␊ |
225 | extern void NSInstallLinkEditErrorHandlers(const NSLinkEditErrorHandlers *handlers) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
226 | ␊ |
227 | extern bool NSAddLibrary(const char* pathName) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
228 | extern bool NSAddLibraryWithSearching(const char* pathName) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
229 | extern const struct mach_header* NSAddImage(const char* image_name, uint32_t options) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
230 | #define NSADDIMAGE_OPTION_NONE ␉0x0␊ |
231 | #define NSADDIMAGE_OPTION_RETURN_ON_ERROR ␉0x1␊ |
232 | #define NSADDIMAGE_OPTION_WITH_SEARCHING ␉0x2␊ |
233 | #define NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED ␉0x4␊ |
234 | #define NSADDIMAGE_OPTION_MATCH_FILENAME_BY_INSTALLNAME␉0x8␊ |
235 | ␊ |
236 | extern bool _dyld_present(void) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
237 | extern bool _dyld_launched_prebound(void) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
238 | extern bool _dyld_all_twolevel_modules_prebound(void) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_3,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
239 | extern void _dyld_bind_objc_module(const void* objc_module) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
240 | extern bool _dyld_bind_fully_image_containing_address(const void* address) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
241 | extern bool _dyld_image_containing_address(const void* address) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_3,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
242 | extern void _dyld_lookup_and_bind(const char* symbol_name, void **address, NSModule* module) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
243 | extern void _dyld_lookup_and_bind_with_hint(const char* symbol_name, const char* library_name_hint, void** address, NSModule* module) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_4,__IPHONE_NA,__IPHONE_NA);␊ |
244 | extern void _dyld_lookup_and_bind_fully(const char* symbol_name, void** address, NSModule* module) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_1,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
245 | ␊ |
246 | extern const struct mach_header* _dyld_get_image_header_containing_address(const void* address) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_3,__MAC_10_5,__IPHONE_NA,__IPHONE_NA);␊ |
247 | ␊ |
248 | ␊ |
249 | #if __cplusplus␊ |
250 | }␊ |
251 | #endif ␊ |
252 | ␊ |
253 | #endif /* _MACH_O_DYLD_H_ */␊ |
254 |