aboutsummaryrefslogtreecommitdiffstats
path: root/lib/System/Win32
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2006-12-19 15:24:18 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2006-12-19 15:24:18 +0000
commitcd79df01c2ad40062d2cd75f40c55ac3ddd6fc54 (patch)
tree1371aa600fc500b782d6dc41a0e3136ca9a3b7cc /lib/System/Win32
parent85e36e474d795c95fd784e6312d3ef2fbfc0c99e (diff)
downloadexternal_llvm-cd79df01c2ad40062d2cd75f40c55ac3ddd6fc54.zip
external_llvm-cd79df01c2ad40062d2cd75f40c55ac3ddd6fc54.tar.gz
external_llvm-cd79df01c2ad40062d2cd75f40c55ac3ddd6fc54.tar.bz2
Partly fixed JITing on mingw32 platform. The support is not full due to
absence of dllimport JIT codegen. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32673 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/System/Win32')
-rw-r--r--lib/System/Win32/DynamicLibrary.inc25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/System/Win32/DynamicLibrary.inc b/lib/System/Win32/DynamicLibrary.inc
index 19cd3ab..91de113 100644
--- a/lib/System/Win32/DynamicLibrary.inc
+++ b/lib/System/Win32/DynamicLibrary.inc
@@ -51,7 +51,11 @@ extern "C" {
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 @@ DynamicLibrary::~DynamicLibrary() {
}
}
+#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 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
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;
}