[llvm-commits] CVS: llvm/lib/System/Win32/DynamicLibrary.inc

Anton Korobeynikov asl at math.spbu.ru
Tue Dec 19 07:24:33 PST 2006



Changes in directory llvm/lib/System/Win32:

DynamicLibrary.inc updated: 1.17 -> 1.18
---
Log message:

Partly fixed JITing on mingw32 platform. The support is not full due to 
absence of dllimport JIT codegen.


---
Diffs of the changes:  (+25 -0)

 DynamicLibrary.inc |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+)


Index: llvm/lib/System/Win32/DynamicLibrary.inc
diff -u llvm/lib/System/Win32/DynamicLibrary.inc:1.17 llvm/lib/System/Win32/DynamicLibrary.inc:1.18
--- llvm/lib/System/Win32/DynamicLibrary.inc:1.17	Fri Aug 25 16:37:17 2006
+++ llvm/lib/System/Win32/DynamicLibrary.inc	Tue Dec 19 09:24:18 2006
@@ -51,7 +51,11 @@
         stricmp(ModuleName, "msvcp60") != 0 &&
         stricmp(ModuleName, "msvcp70") != 0 &&
         stricmp(ModuleName, "msvcr70") != 0 &&
+#ifndef __MINGW32__
+        // Mingw32 uses msvcrt.dll by default. Don't ignore it.
+        // Otherwise, user should be aware, what he's doing :)
         stricmp(ModuleName, "msvcrt") != 0 &&
+#endif        
         stricmp(ModuleName, "msvcrt20") != 0 &&
         stricmp(ModuleName, "msvcrt40") != 0) {
       OpenedHandles.push_back((HMODULE)ModuleBase);
@@ -84,6 +88,17 @@
   }
 }
 
+#ifdef __MINGW32__
+  #define EXPLICIT_SYMBOL(SYM)                    \
+    if (!strcmp(symbolName, #SYM)) return (void*)&SYM
+  #define EXPLICIT_SYMBOL2(SYMFROM, SYMTO)        \
+    if (!strcmp(symbolName, #SYMFROM)) return (void*)&SYMTO
+  #define EXPLICIT_SYMBOL_DEF(SYM)                \
+    extern "C" { extern void *SYM; }
+  
+  EXPLICIT_SYMBOL_DEF(_alloca);
+#endif
+ 
 bool DynamicLibrary::LoadLibraryPermanently(const char *filename,
                                             std::string *ErrMsg) {
   if (filename) {
@@ -118,6 +133,16 @@
       return (void *) ptr;
   }
 
+#ifdef __MINGW32__  
+  {
+    EXPLICIT_SYMBOL(_alloca);
+    EXPLICIT_SYMBOL2(alloca, _alloca);
+#undef EXPLICIT_SYMBOL
+#undef EXPLICIT_SYMBOL2
+#undef EXPLICIT_SYMBOL_DEF    
+  }
+#endif
+
   return 0;
 }
 






More information about the llvm-commits mailing list