use packed version of MINIDUMP_EXCEPTION_INFORMATION

dbghelp.dll expects that MINIDUMP_EXCEPTION_INFORMATION has a packed
layout and will crash if it doesn't (at least on 64-bit systems), but
as of this writing mingw-w64's version is not declared to be so.
Hence this workaround.
This commit is contained in:
Joel Dice 2011-02-10 11:54:00 -07:00
parent 8fdd547922
commit 8e57639ff5

View File

@ -856,6 +856,16 @@ typedef BOOL (*MiniDumpWriteDumpType)
const MINIDUMP_USER_STREAM_INFORMATION* userStream,
const MINIDUMP_CALLBACK_INFORMATION* callback);
// dbghelp.dll expects that MINIDUMP_EXCEPTION_INFORMATION has a
// packed layout and will crash if it doesn't (at least on 64-bit
// systems), but as of this writing mingw-w64's version is not
// declared to be so. Hence this workaround:
struct __attribute__ ((__packed__)) My_MINIDUMP_EXCEPTION_INFORMATION {
DWORD ThreadId;
PEXCEPTION_POINTERS ExceptionPointers;
WINBOOL ClientPointers;
};
void
dump(LPEXCEPTION_POINTERS e, const char* directory)
{
@ -877,7 +887,7 @@ dump(LPEXCEPTION_POINTERS e, const char* directory)
(name, FILE_WRITE_DATA, 0, 0, CREATE_ALWAYS, 0, 0);
if (file != INVALID_HANDLE_VALUE) {
MINIDUMP_EXCEPTION_INFORMATION exception
My_MINIDUMP_EXCEPTION_INFORMATION exception
= { GetCurrentThreadId(), e, true };
MiniDumpWriteDump
@ -885,7 +895,7 @@ dump(LPEXCEPTION_POINTERS e, const char* directory)
GetCurrentProcessId(),
file,
MiniDumpWithFullMemory,
&exception,
reinterpret_cast<MINIDUMP_EXCEPTION_INFORMATION*>(&exception),
0,
0);