diff options
author | Jeff Cohen <jeffc@jolt-lang.org> | 2004-12-25 04:50:17 +0000 |
---|---|---|
committer | Jeff Cohen <jeffc@jolt-lang.org> | 2004-12-25 04:50:17 +0000 |
commit | f365c33b62f12ce6a9539224b9c1c33f854a32c0 (patch) | |
tree | e263f9af33a5ec74d0ff81595ab91fd94dbfe634 /llvm/lib | |
parent | 683b1a5e3c1ca96603dfccc21f6fd3a98a285658 (diff) | |
download | bcm5719-llvm-f365c33b62f12ce6a9539224b9c1c33f854a32c0.tar.gz bcm5719-llvm-f365c33b62f12ce6a9539224b9c1c33f854a32c0.zip |
mingw doesn't support the official debug API.
Old versions of the C runtime somehow get loaded into the process. Make
sure they aren't searched for symbols.
llvm-svn: 19141
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/System/Win32/DynamicLibrary.cpp | 37 |
1 files changed, 28 insertions, 9 deletions
diff --git a/llvm/lib/System/Win32/DynamicLibrary.cpp b/llvm/lib/System/Win32/DynamicLibrary.cpp index 27078836dd3..ef435f4afaf 100644 --- a/llvm/lib/System/Win32/DynamicLibrary.cpp +++ b/llvm/lib/System/Win32/DynamicLibrary.cpp @@ -7,12 +7,17 @@ // //===----------------------------------------------------------------------===// // -// This file provides the Win32 specific implementation of DynamicLibrary. +// This file provides the Win32 specific implementation of DynamicLibrary. // //===----------------------------------------------------------------------===// #include "Win32.h" + +#ifdef __MINGW +#include <imagehlp.h> +#else #include <dbghelp.h> +#endif #pragma comment(lib, "dbghelp.lib") @@ -26,13 +31,27 @@ using namespace sys; static std::vector<HMODULE> OpenedHandles; -BOOL CALLBACK ELM_Callback(PSTR ModuleName, - ULONG ModuleBase, - ULONG ModuleSize, - PVOID UserContext) -{ - OpenedHandles.push_back((HMODULE)ModuleBase); - return TRUE; +extern "C" { + static BOOL CALLBACK ELM_Callback(PSTR ModuleName, + ULONG ModuleBase, + ULONG ModuleSize, + PVOID UserContext) + { + // Ignore VC++ runtimes prior to 7.1. Somehow some of them get loaded + // into the process. + if (stricmp(ModuleName, "msvci70") != 0 && + stricmp(ModuleName, "msvcirt") != 0 && + stricmp(ModuleName, "msvcp50") != 0 && + stricmp(ModuleName, "msvcp60") != 0 && + stricmp(ModuleName, "msvcp70") != 0 && + stricmp(ModuleName, "msvcr70") != 0 && + stricmp(ModuleName, "msvcrt") != 0 && + stricmp(ModuleName, "msvcrt20") != 0 && + stricmp(ModuleName, "msvcrt40") != 0) { + OpenedHandles.push_back((HMODULE)ModuleBase); + } + return TRUE; + } } DynamicLibrary::DynamicLibrary() : handle(0) { @@ -83,7 +102,7 @@ void DynamicLibrary::LoadLibraryPermanently(const char* filename) { EnumerateLoadedModules(GetCurrentProcess(), ELM_Callback, 0); } - // Because we don't remember the handles, we will never free them; hence, + // Because we don't remember the handle, we will never free it; hence, // it is loaded permanently. } |