From: Jeff Cohen Date: Sat, 25 Dec 2004 04:50:17 +0000 (+0000) Subject: mingw doesn't support the official debug API. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c2b9162e5db5426321c0e2e5c95a3b8fe8060dd8;p=oota-llvm.git 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19141 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/System/Win32/DynamicLibrary.cpp b/lib/System/Win32/DynamicLibrary.cpp index 27078836dd3..ef435f4afaf 100644 --- a/lib/System/Win32/DynamicLibrary.cpp +++ b/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 +#else #include +#endif #pragma comment(lib, "dbghelp.lib") @@ -26,13 +31,27 @@ using namespace sys; static std::vector 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. } diff --git a/lib/System/Win32/DynamicLibrary.inc b/lib/System/Win32/DynamicLibrary.inc index 27078836dd3..ef435f4afaf 100644 --- a/lib/System/Win32/DynamicLibrary.inc +++ b/lib/System/Win32/DynamicLibrary.inc @@ -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 +#else #include +#endif #pragma comment(lib, "dbghelp.lib") @@ -26,13 +31,27 @@ using namespace sys; static std::vector 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. }