summaryrefslogtreecommitdiff
path: root/lib/System/DynamicLibrary.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-12-23 19:04:10 +0000
committerDouglas Gregor <dgregor@apple.com>2009-12-23 19:04:10 +0000
commit0b64472737a1267d15ae218b833d516808848051 (patch)
treefe3a49726f467e2fbfd6ee84a9090541354e6969 /lib/System/DynamicLibrary.cpp
parent0f706ab789c29030c57da6e0b0d820b80689728d (diff)
downloadllvm-0b64472737a1267d15ae218b833d516808848051.tar.gz
llvm-0b64472737a1267d15ae218b833d516808848051.tar.bz2
llvm-0b64472737a1267d15ae218b833d516808848051.tar.xz
Revert 92020 until I figure out a more portable fix
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92021 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/System/DynamicLibrary.cpp')
-rw-r--r--lib/System/DynamicLibrary.cpp34
1 files changed, 28 insertions, 6 deletions
diff --git a/lib/System/DynamicLibrary.cpp b/lib/System/DynamicLibrary.cpp
index b511a3cad2..7eb9f5f3ef 100644
--- a/lib/System/DynamicLibrary.cpp
+++ b/lib/System/DynamicLibrary.cpp
@@ -69,10 +69,6 @@ bool DynamicLibrary::LoadLibraryPermanently(const char *Filename,
return false;
}
-#define EXPLICIT_SYMBOL(SYM) \
- extern "C" void *SYM;
-#include "DynamicLibrarySymbolDefs.def"
-
void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
// First check symbols added via AddSymbol().
if (ExplicitSymbols) {
@@ -97,15 +93,41 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
}
#define EXPLICIT_SYMBOL(SYM) \
- if (!strcmp(symbolName, #SYM)) return &SYM;
+ extern void *SYM; if (!strcmp(symbolName, #SYM)) return &SYM
// If this is darwin, it has some funky issues, try to solve them here. Some
// important symbols are marked 'private external' which doesn't allow
// SearchForAddressOfSymbol to find them. As such, we special case them here,
// there is only a small handful of them.
+
+#ifdef __APPLE__
+ {
+ EXPLICIT_SYMBOL(__ashldi3);
+ EXPLICIT_SYMBOL(__ashrdi3);
+ EXPLICIT_SYMBOL(__cmpdi2);
+ EXPLICIT_SYMBOL(__divdi3);
+ EXPLICIT_SYMBOL(__eprintf);
+ EXPLICIT_SYMBOL(__fixdfdi);
+ EXPLICIT_SYMBOL(__fixsfdi);
+ EXPLICIT_SYMBOL(__fixunsdfdi);
+ EXPLICIT_SYMBOL(__fixunssfdi);
+ EXPLICIT_SYMBOL(__floatdidf);
+ EXPLICIT_SYMBOL(__floatdisf);
+ EXPLICIT_SYMBOL(__lshrdi3);
+ EXPLICIT_SYMBOL(__moddi3);
+ EXPLICIT_SYMBOL(__udivdi3);
+ EXPLICIT_SYMBOL(__umoddi3);
+ }
+#endif
+
+#ifdef __CYGWIN__
{
-#include "DynamicLibrarySymbolDefs.def"
+ EXPLICIT_SYMBOL(_alloca);
+ EXPLICIT_SYMBOL(__main);
}
+#endif
+
+#undef EXPLICIT_SYMBOL
// This macro returns the address of a well-known, explicit symbol
#define EXPLICIT_SYMBOL(SYM) \