diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index d87c2aaed..9ca783c1a 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,8 @@ +2014-04-21 Jon TURNEY + + * Makefile.in (minidumper.exe): Link directly with dbghelp. + * minidumper.cc (minidump): Ditto. + 2014-04-21 Jon TURNEY * minidumper.cc (minidump): Fix copy and paste error in checking diff --git a/winsup/utils/Makefile.in b/winsup/utils/Makefile.in index 80e074a4b..28d730652 100644 --- a/winsup/utils/Makefile.in +++ b/winsup/utils/Makefile.in @@ -96,6 +96,7 @@ strace.exe: MINGW_LDFLAGS += -lntdll ldd.exe:CYGWIN_LDFLAGS += -lpsapi pldd.exe: CYGWIN_LDFLAGS += -lpsapi +minidumper.exe: CYGWIN_LDFLAGS += -ldbghelp ldh.exe: MINGW_LDFLAGS += -nostdlib -lkernel32 diff --git a/winsup/utils/minidumper.cc b/winsup/utils/minidumper.cc index e8cb36a37..ea1e193c2 100644 --- a/winsup/utils/minidumper.cc +++ b/winsup/utils/minidumper.cc @@ -26,42 +26,16 @@ #include #include #include +#include BOOL verbose = FALSE; BOOL nokill = FALSE; -typedef DWORD MINIDUMP_TYPE; - -typedef BOOL (WINAPI *MiniDumpWriteDump_type)( - HANDLE hProcess, - DWORD dwPid, - HANDLE hFile, - MINIDUMP_TYPE DumpType, - CONST void *ExceptionParam, - CONST void *UserStreamParam, - CONST void *allbackParam); - static void minidump(DWORD pid, MINIDUMP_TYPE dump_type, const char *minidump_file) { HANDLE dump_file; HANDLE process; - MiniDumpWriteDump_type MiniDumpWriteDump_fp; - HMODULE module; - - module = LoadLibrary("dbghelp.dll"); - if (!module) - { - fprintf (stderr, "error loading DbgHelp\n"); - return; - } - - MiniDumpWriteDump_fp = (MiniDumpWriteDump_type)GetProcAddress(module, "MiniDumpWriteDump"); - if (!MiniDumpWriteDump_fp) - { - fprintf (stderr, "error getting the address of MiniDumpWriteDump\n"); - return; - } dump_file = CreateFile(minidump_file, GENERIC_READ | GENERIC_WRITE, @@ -85,13 +59,13 @@ minidump(DWORD pid, MINIDUMP_TYPE dump_type, const char *minidump_file) return; } - BOOL success = (*MiniDumpWriteDump_fp)(process, - pid, - dump_file, - dump_type, - NULL, - NULL, - NULL); + BOOL success = MiniDumpWriteDump(process, + pid, + dump_file, + dump_type, + NULL, + NULL, + NULL); if (success) { if (verbose) @@ -112,7 +86,6 @@ minidump(DWORD pid, MINIDUMP_TYPE dump_type, const char *minidump_file) CloseHandle(process); CloseHandle(dump_file); - FreeLibrary(module); } static void @@ -164,7 +137,7 @@ main (int argc, char **argv) int opt; const char *p = ""; DWORD pid; - MINIDUMP_TYPE dump_type = 0; // MINIDUMP_NORMAL + MINIDUMP_TYPE dump_type = MiniDumpNormal; while ((opt = getopt_long (argc, argv, opts, longopts, NULL) ) != EOF) switch (opt) @@ -172,7 +145,7 @@ main (int argc, char **argv) case 't': { char *endptr; - dump_type = strtoul(optarg, &endptr, 0); + dump_type = (MINIDUMP_TYPE)strtoul(optarg, &endptr, 0); if (*endptr != '\0') { fprintf (stderr, "syntax error in minidump type \"%s\" near character #%d.\n", optarg, (int) (endptr - optarg));