mingw doesn't support the official debug API.
authorJeff Cohen <jeffc@jolt-lang.org>
Sat, 25 Dec 2004 04:50:17 +0000 (04:50 +0000)
committerJeff Cohen <jeffc@jolt-lang.org>
Sat, 25 Dec 2004 04:50:17 +0000 (04:50 +0000)
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

lib/System/Win32/DynamicLibrary.cpp
lib/System/Win32/DynamicLibrary.inc

index 27078836dd30a154d7eafd9c81b0ff921b600957..ef435f4afaf61882f3aaf7c736a6e847fefa8b8b 100644 (file)
@@ -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.
 }
 
index 27078836dd30a154d7eafd9c81b0ff921b600957..ef435f4afaf61882f3aaf7c736a6e847fefa8b8b 100644 (file)
@@ -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.
 }