]>
git.saurik.com Git - wxWidgets.git/blob - src/unix/dl_macosx.cpp
4 * Author: Gilles Depeyrot (Gilles.Depeyrot@wanadoo.fr)
5 * Based on: dl_next.xs by Anno Siegel (siegel@zrz.TU-Berlin.DE)
6 * Based on: dl_dlopen.xs by Paul Marquess
7 * Created: Aug 15th, 1994
12 * dl_macosx.c is itself a port from dl_next.xs by Anno Siegel.
13 * dl_next.xs is itself a port from dl_dlopen.xs by Paul Marquess.
14 * The method used here is just to supply the sun style dlopen etc.
15 * functions in terms of NeXTs rld_*.
20 static char dl_last_error
[1024];
27 int dlclose(void *handle
) /* stub only */
33 #import <mach-o/dyld.h>
42 void TranslateError(const char *path
, enum dyldErrorSource type
, int number
)
45 static char *OFIErrorStrings
[] =
47 "%s(%d): Object Image Load Failure\n",
48 "%s(%d): Object Image Load Success\n",
49 "%s(%d): Not an recognisable object file\n",
50 "%s(%d): No valid architecture\n",
51 "%s(%d): Object image has an invalid format\n",
52 "%s(%d): Invalid access (permissions?)\n",
53 "%s(%d): Unknown error code from NSCreateObjectFileImageFromFile\n",
55 #define NUM_OFI_ERRORS (sizeof(OFIErrorStrings) / sizeof(OFIErrorStrings[0]))
61 if (index
> NUM_OFI_ERRORS
- 1)
62 index
= NUM_OFI_ERRORS
- 1;
63 sprintf(dl_last_error
, OFIErrorStrings
[index
], path
, number
);
67 sprintf(dl_last_error
, "%s(%d): Totally unknown error type %d\n",
73 void *dlopen(const char *path
, int mode
/* mode is ignored */)
76 NSObjectFileImage ofile
;
77 NSModule handle
= NULL
;
79 dyld_result
= NSCreateObjectFileImageFromFile(path
, &ofile
);
80 if (dyld_result
!= NSObjectFileImageSuccess
)
82 TranslateError(path
, OFImage
, dyld_result
);
86 // NSLinkModule will cause the run to abort on any link error's
87 // not very friendly but the error recovery functionality is limited.
88 handle
= NSLinkModule(ofile
, path
, TRUE
);
94 void *dlsym(void *handle
, const char *symbol
)
98 if (NSIsSymbolNameDefined(symbol
))
99 addr
= NSAddressOfSymbol(NSLookupAndBindSymbol(symbol
));