Allow LLI, in interpreter mode, to find stdin, stdout, and stderr. This is
authorReid Spencer <rspencer@reidspencer.com>
Wed, 10 Jan 2007 19:50:43 +0000 (19:50 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Wed, 10 Jan 2007 19:50:43 +0000 (19:50 +0000)
a bit of a hack but it lets some of the llvm-test programs run.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33058 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/DynamicLibrary.cpp

index 0876d5deecdaab7a62d5f28e31db2c789de4f6de..f0ab51b0f6150b409e20cc9657809177c916b55e 100644 (file)
@@ -141,10 +141,11 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
   // 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__
-  {
 #define EXPLICIT_SYMBOL(SYM) \
    extern void *SYM; if (!strcmp(symbolName, #SYM)) return &SYM
+  {
     EXPLICIT_SYMBOL(__ashldi3);
     EXPLICIT_SYMBOL(__ashrdi3);
     EXPLICIT_SYMBOL(__cmpdi2);
@@ -160,9 +161,18 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
     EXPLICIT_SYMBOL(__moddi3);
     EXPLICIT_SYMBOL(__udivdi3);
     EXPLICIT_SYMBOL(__umoddi3);
-#undef EXPLICIT_SYMBOL
   }
+#undef EXPLICIT_SYMBOL
 #endif
+#define EXPLICIT_SYMBOL(SYM) \
+   if (!strcmp(symbolName, #SYM)) return &SYM
+  // Try a few well known symbols just to give lli a shot at working.
+  {
+    EXPLICIT_SYMBOL(stdin);
+    EXPLICIT_SYMBOL(stdout);
+    EXPLICIT_SYMBOL(stderr);
+  }
+#undef EXPLICIT_SYMBOL
 
   return 0;
 }