[llvm-dev] Compilation error with MinGW
Slycelote via llvm-dev
llvm-dev at lists.llvm.org
Sat Aug 29 14:46:53 PDT 2015
Hi all,
I'm hitting the same problem as in this[1] thread. I use release_37
branch on 64-bit Windows 7.
The problem is here:
#ifdef __MINGW32__
#include <imagehlp.h>
#else
#include <dbghelp.h>
#endif
<skip>
typedef BOOL (WINAPI
*fpEnumerateLoadedModules)(HANDLE,PENUMLOADED_MODULES_CALLBACK64,PVOID);
imagehlp.h doesn't define PENUMLOADED_MODULES_CALLBACK64 type.
I fixed it on my side by the patch in the bottom of this email, but I
don't know if it's the right approach in general.
[1] http://comments.gmane.org/gmane.comp.compilers.clang.user/709
-- Sly.
diff --git a/lib/Support/Windows/DynamicLibrary.inc
b/lib/Support/Windows/DynamicLibrary.inc
index d38f197..b4c8f1b 100644
--- a/lib/Support/Windows/DynamicLibrary.inc
+++ b/lib/Support/Windows/DynamicLibrary.inc
@@ -31,7 +31,16 @@ using namespace sys;
//=== and must not be UNIX code.
//===----------------------------------------------------------------------===//
+#if defined(__MINGW32__) and !defined(_WIN64)
+typedef BOOL (WINAPI
*fpEnumerateLoadedModules)(HANDLE,PENUMLOADED_MODULES_CALLBACK,PVOID);
+static const char* sEnumerateLoadedModules = "EnumerateLoadedModules";
+typedef DWORD ModuleOffset;
+#else
typedef BOOL (WINAPI
*fpEnumerateLoadedModules)(HANDLE,PENUMLOADED_MODULES_CALLBACK64,PVOID);
+static const char* sEnumerateLoadedModules = "EnumerateLoadedModules64";
+typedef DWORD64 ModuleOffset;
+#endif
+
static fpEnumerateLoadedModules fEnumerateLoadedModules;
static DenseSet<HMODULE> *OpenedHandles;
@@ -39,13 +48,13 @@ static bool loadDebugHelp(void) {
HMODULE hLib = ::LoadLibraryW(L"Dbghelp.dll");
if (hLib) {
fEnumerateLoadedModules = (fpEnumerateLoadedModules)
- ::GetProcAddress(hLib, "EnumerateLoadedModules64");
+ ::GetProcAddress(hLib, sEnumerateLoadedModules);
}
return fEnumerateLoadedModules != 0;
}
static BOOL CALLBACK
-ELM_Callback(WIN32_ELMCB_PCSTR ModuleName, DWORD64 ModuleBase,
+ELM_Callback(WIN32_ELMCB_PCSTR ModuleName, ModuleOffset ModuleBase,
ULONG ModuleSize, PVOID UserContext) {
OpenedHandles->insert((HMODULE)ModuleBase);
return TRUE;
More information about the llvm-dev
mailing list