diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2006-12-19 15:24:18 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2006-12-19 15:24:18 +0000 |
commit | cd79df01c2ad40062d2cd75f40c55ac3ddd6fc54 (patch) | |
tree | 1371aa600fc500b782d6dc41a0e3136ca9a3b7cc /lib/System/Win32/DynamicLibrary.inc | |
parent | 85e36e474d795c95fd784e6312d3ef2fbfc0c99e (diff) |
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/DynamicLibrary.inc')
-rw-r--r-- | lib/System/Win32/DynamicLibrary.inc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/System/Win32/DynamicLibrary.inc b/lib/System/Win32/DynamicLibrary.inc index 19cd3ab7d3..91de11349d 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; } |