mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 06:29:05 +00:00
Alternative fix to make sure that the extern declarations used by
DynamicLibrary::SearchForAddressOfSymbol refer to declarations in the global namespace. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92023 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -69,29 +69,7 @@ bool DynamicLibrary::LoadLibraryPermanently(const char *Filename,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
|
static void *SearchForAddressOfSpecialSymbol(const char* symbolName) {
|
||||||
// First check symbols added via AddSymbol().
|
|
||||||
if (ExplicitSymbols) {
|
|
||||||
std::map<std::string, void *>::iterator I =
|
|
||||||
ExplicitSymbols->find(symbolName);
|
|
||||||
std::map<std::string, void *>::iterator E = ExplicitSymbols->end();
|
|
||||||
|
|
||||||
if (I != E)
|
|
||||||
return I->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now search the libraries.
|
|
||||||
if (OpenedHandles) {
|
|
||||||
for (std::vector<void *>::iterator I = OpenedHandles->begin(),
|
|
||||||
E = OpenedHandles->end(); I != E; ++I) {
|
|
||||||
//lt_ptr ptr = lt_dlsym(*I, symbolName);
|
|
||||||
void *ptr = dlsym(*I, symbolName);
|
|
||||||
if (ptr) {
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define EXPLICIT_SYMBOL(SYM) \
|
#define EXPLICIT_SYMBOL(SYM) \
|
||||||
extern void *SYM; if (!strcmp(symbolName, #SYM)) return &SYM
|
extern void *SYM; if (!strcmp(symbolName, #SYM)) return &SYM
|
||||||
|
|
||||||
@@ -128,6 +106,34 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef EXPLICIT_SYMBOL
|
#undef EXPLICIT_SYMBOL
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
|
||||||
|
// First check symbols added via AddSymbol().
|
||||||
|
if (ExplicitSymbols) {
|
||||||
|
std::map<std::string, void *>::iterator I =
|
||||||
|
ExplicitSymbols->find(symbolName);
|
||||||
|
std::map<std::string, void *>::iterator E = ExplicitSymbols->end();
|
||||||
|
|
||||||
|
if (I != E)
|
||||||
|
return I->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now search the libraries.
|
||||||
|
if (OpenedHandles) {
|
||||||
|
for (std::vector<void *>::iterator I = OpenedHandles->begin(),
|
||||||
|
E = OpenedHandles->end(); I != E; ++I) {
|
||||||
|
//lt_ptr ptr = lt_dlsym(*I, symbolName);
|
||||||
|
void *ptr = dlsym(*I, symbolName);
|
||||||
|
if (ptr) {
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (void *Result = SearchForAddressOfSpecialSymbol(symbolName))
|
||||||
|
return Result;
|
||||||
|
|
||||||
// This macro returns the address of a well-known, explicit symbol
|
// This macro returns the address of a well-known, explicit symbol
|
||||||
#define EXPLICIT_SYMBOL(SYM) \
|
#define EXPLICIT_SYMBOL(SYM) \
|
||||||
|
Reference in New Issue
Block a user