From ab59a0f6e7fe4b24bac82d99ec3bdabbab8996f3 Mon Sep 17 00:00:00 2001 From: Adrian McCarthy Date: Thu, 17 Sep 2015 20:52:29 +0000 Subject: Get the process ID from a minidump. llvm-svn: 247939 --- .../Windows/MiniDump/ProcessWinMiniDump.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp') diff --git a/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp b/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp index f2e9aa4be7d..2ffdd1bcefc 100644 --- a/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp +++ b/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp @@ -164,6 +164,7 @@ ProcessWinMiniDump::DoLoadCore() } GetTarget().SetArchitecture(DetermineArchitecture()); + ReadMiscInfo(); // notably for process ID ReadModuleList(); ReadExceptionRecord(); @@ -433,7 +434,8 @@ ProcessWinMiniDump::DetermineArchitecture() } void -ProcessWinMiniDump::ReadExceptionRecord() { +ProcessWinMiniDump::ReadExceptionRecord() +{ size_t size = 0; auto exception_stream_ptr = static_cast(FindDumpStream(ExceptionStream, &size)); if (exception_stream_ptr) @@ -443,7 +445,23 @@ ProcessWinMiniDump::ReadExceptionRecord() { } void -ProcessWinMiniDump::ReadModuleList() { +ProcessWinMiniDump::ReadMiscInfo() +{ + size_t size = 0; + const auto misc_info_ptr = static_cast(FindDumpStream(MiscInfoStream, &size)); + if (!misc_info_ptr || size < sizeof(MINIDUMP_MISC_INFO)) { + return; + } + + if ((misc_info_ptr->Flags1 & MINIDUMP_MISC1_PROCESS_ID) != 0) { + // This misc info record has the process ID. + SetID(misc_info_ptr->ProcessId); + } +} + +void +ProcessWinMiniDump::ReadModuleList() +{ size_t size = 0; auto module_list_ptr = static_cast(FindDumpStream(ModuleListStream, &size)); if (!module_list_ptr || module_list_ptr->NumberOfModules == 0) -- cgit v1.2.3