this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Implement more obsolete NS* dynamic linker functions

+121
+5
src/libdyld/darwin.map
··· 14 14 NSVersionOfRunTimeLibrary; 15 15 NSVersionOfLinkTimeLibrary; 16 16 _NSGetExecutablePath; 17 + NSCreateObjectFileImageFromFile; 18 + NSLinkModule; 19 + NSDestroyObjectFileImage; 20 + NSUnLinkModule; 21 + NSLinkEditError; 17 22 18 23 _dyld_image_count; 19 24 _dyld_get_image_header;
+72
src/libdyld/dl_public.cpp
··· 331 331 { 332 332 environ = _environ; 333 333 } 334 + 335 + static NSLinkEditErrorHandlers g_linkEditErrorHandlers; 336 + 337 + NSObjectFileImageReturnCode NSCreateObjectFileImageFromFile(const char* pathName, NSObjectFileImage * objectFileImage) 338 + { 339 + // TODO: this works here, but would not work for loading images from memory 340 + *objectFileImage = strdup(pathName); 341 + return NSObjectFileImageSuccess; 342 + } 343 + 344 + NSModule NSLinkModule( NSObjectFileImage objectFileImage, const char* moduleName, uint32_t options) 345 + { 346 + int opts = 0; 347 + void* module; 348 + 349 + if (options & NSLINKMODULE_OPTION_BINDNOW) 350 + opts |= DARWIN_RTLD_NOW; 351 + if (options & NSLINKMODULE_OPTION_PRIVATE) 352 + opts |= DARWIN_RTLD_LOCAL; 353 + else 354 + opts |= DARWIN_RTLD_GLOBAL; 355 + 356 + module = __darwin_dlopen((char*) objectFileImage, opts); 357 + if (!module && !(options & NSLINKMODULE_OPTION_RETURN_ON_ERROR)) 358 + { 359 + // invoke callback 360 + if (g_linkEditErrorHandlers.linkEdit) 361 + { 362 + g_linkEditErrorHandlers.linkEdit(NSLinkEditOtherError, -1, 363 + (char*) objectFileImage, __darwin_dlerror()); 364 + } 365 + } 366 + 367 + return NSModule(module); 368 + } 369 + 370 + bool NSDestroyObjectFileImage( NSObjectFileImage objectFileImage) 371 + { 372 + free(objectFileImage); 373 + return true; 374 + } 375 + 376 + bool NSUnLinkModule( NSModule module, uint32_t options) 377 + { 378 + return __darwin_dlclose(module) == 0; 379 + } 380 + 381 + void NSLinkEditError(NSLinkEditErrors *c, int *errorNumber, const char** fileName, const char** errorString) 382 + { 383 + const char* error; 384 + 385 + error = __darwin_dlerror(); 386 + if (error && *error) 387 + { 388 + *c = NSLinkEditOtherError; 389 + *errorNumber = -1; 390 + *fileName = "<TODO>"; 391 + *errorString = error; 392 + } 393 + else 394 + { 395 + *c = NSLinkEditUndefinedError; 396 + *errorNumber = 0; 397 + *fileName = NULL; 398 + *errorString = NULL; 399 + } 400 + } 401 + 402 + void NSInstallLinkEditErrorHandlers(const NSLinkEditErrorHandlers *handlers) 403 + { 404 + g_linkEditErrorHandlers = *handlers; 405 + }
+44
src/libdyld/dl_public.h
··· 35 35 #define DARWIN_RTLD_SELF ((void*)-3) 36 36 #define DARWIN_RTLD_MAIN_ONLY ((void*)-5) 37 37 38 + #define NSLINKMODULE_OPTION_NONE 0x0 39 + #define NSLINKMODULE_OPTION_BINDNOW 0x1 40 + #define NSLINKMODULE_OPTION_PRIVATE 0x2 41 + #define NSLINKMODULE_OPTION_RETURN_ON_ERROR 0x4 42 + #define NSLINKMODULE_OPTION_DONT_CALL_MOD_INIT_ROUTINES 0x8 43 + #define NSLINKMODULE_OPTION_TRAILING_PHYS_NAME 0x10 44 + 45 + typedef enum { 46 + NSLinkEditFileAccessError, 47 + NSLinkEditFileFormatError, 48 + NSLinkEditMachResourceError, 49 + NSLinkEditUnixResourceError, 50 + NSLinkEditOtherError, 51 + NSLinkEditWarningError, 52 + NSLinkEditMultiplyDefinedError, 53 + NSLinkEditUndefinedError 54 + } NSLinkEditErrors; 55 + 56 + typedef enum { 57 + NSObjectFileImageFailure, 58 + NSObjectFileImageSuccess, 59 + NSObjectFileImageInappropriateFile, 60 + NSObjectFileImageArch, 61 + NSObjectFileImageFormat, 62 + NSObjectFileImageAccess 63 + } NSObjectFileImageReturnCode; 64 + 38 65 namespace Darling 39 66 { 40 67 class LoadableObject; ··· 48 75 49 76 typedef void* NSSymbol; 50 77 typedef Darling::LoadableObject* NSModule; 78 + typedef void* NSObjectFileImage; 51 79 52 80 extern "C" 53 81 { ··· 70 98 int NSIsSymbolNameDefinedInImage(const struct mach_header *image, const char *symbolName); 71 99 const char* NSNameOfModule(NSModule m); 72 100 const char* NSLibraryNameForModule(NSModule m); 101 + 102 + NSObjectFileImageReturnCode NSCreateObjectFileImageFromFile(const char* pathName, NSObjectFileImage * objectFileImage); 103 + NSModule NSLinkModule( NSObjectFileImage objectFileImage, const char* moduleName, uint32_t options); 104 + bool NSDestroyObjectFileImage( NSObjectFileImage objectFileImage); 105 + bool NSUnLinkModule( NSModule module, uint32_t options); 106 + void NSLinkEditError(NSLinkEditErrors *c, int *errorNumber, const char** fileName, const char** errorString); 107 + 108 + typedef struct { 109 + void (*undefined)(const char* symbolName); 110 + NSModule (*multiple)(NSSymbol s, NSModule oldModule, NSModule newModule); 111 + void (*linkEdit)(NSLinkEditErrors errorClass, int errorNumber, 112 + const char* fileName, const char* errorString); 113 + } NSLinkEditErrorHandlers; 114 + 115 + void NSInstallLinkEditErrorHandlers(const NSLinkEditErrorHandlers *handlers); 116 + 73 117 // TODO: rest of these NS* calls if used anywhere 74 118 75 119 }