[llvm-commits] CVS: llvm/lib/System/Win32/DynamicLibrary.cpp

Jeff Cohen jeffc at jolt-lang.org
Fri Dec 24 20:50:30 PST 2004



Changes in directory llvm/lib/System/Win32:

DynamicLibrary.cpp updated: 1.7 -> 1.8
---
Log message:

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.


---
Diffs of the changes:  (+28 -9)

Index: llvm/lib/System/Win32/DynamicLibrary.cpp
diff -u llvm/lib/System/Win32/DynamicLibrary.cpp:1.7 llvm/lib/System/Win32/DynamicLibrary.cpp:1.8
--- llvm/lib/System/Win32/DynamicLibrary.cpp:1.7	Fri Dec 24 01:57:09 2004
+++ llvm/lib/System/Win32/DynamicLibrary.cpp	Fri Dec 24 22:50:17 2004
@@ -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 @@
 
 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 @@
     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.
 }
 






More information about the llvm-commits mailing list