Hi all, My application uses AddVectoredExceptionHandler to register an exception handler which, if it can't handle the exception, tries to create a mini dump file for later analysis. This involves using MiniDumpWriteDump from dbghelp.dll, which accepts a pointer to a MINIDUMP_EXCEPTION_INFORMATION instance which wraps the LPEXCEPTION_POINTERS instance provided to the exception handler by the OS.
All this works great on 32-bit systems, but crashes on 64-bit ones. To find out why, I ran my app in WinDbg and found that code in MiniDumpWriteDump was triggering an EXCEPTION_ACCESS_VIOLATION. Tracing through the disassembled code revealed that MiniDumpWriteDump is looking for the ExceptionPointers field at a four byte offset from the beginning of the MINIDUMP_EXCEPTION_INFORMATION instance I passed as a parameter. However, the natural alignment of that field is 8 bytes, so GCC added padding after the first field (ThreadId) to achieve that alignment. Once I realized what was happening, I defined my own version of MINIDUMP_EXCEPTION_INFORMATION with __attribute__ ((__packed__)) to eliminate the padding, and this fixed the crash. Should MINIDUMP_EXCEPTION_INFORMATION be declared with __attribute__ ((__packed__)) in dbghelp.h? Are there other structures in that header that should be similarly declared? Thanks. ------------------------------------------------------------------------------ The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: Pinpoint memory and threading errors before they happen. Find and fix more than 250 security defects in the development cycle. Locate bottlenecks in serial and parallel code that limit performance. http://p.sf.net/sfu/intel-dev2devfeb _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
