[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