diff options
| author | Adrian McCarthy <amccarth@google.com> | 2015-09-17 20:52:29 +0000 |
|---|---|---|
| committer | Adrian McCarthy <amccarth@google.com> | 2015-09-17 20:52:29 +0000 |
| commit | ab59a0f6e7fe4b24bac82d99ec3bdabbab8996f3 (patch) | |
| tree | 2dd0ce5346f1d231dd00597d1735487f06104c84 | |
| parent | 5dd66c3ca26442afcaf68547ada84ec1043b0232 (diff) | |
| download | bcm5719-llvm-ab59a0f6e7fe4b24bac82d99ec3bdabbab8996f3.tar.gz bcm5719-llvm-ab59a0f6e7fe4b24bac82d99ec3bdabbab8996f3.zip | |
Get the process ID from a minidump.
llvm-svn: 247939
3 files changed, 24 insertions, 3 deletions
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<MINIDUMP_EXCEPTION_STREAM*>(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<MINIDUMP_MISC_INFO*>(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<MINIDUMP_MODULE_LIST*>(FindDumpStream(ModuleListStream, &size)); if (!module_list_ptr || module_list_ptr->NumberOfModules == 0) diff --git a/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h b/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h index 2151c9eb5a2..7555a03c541 100644 --- a/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h +++ b/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h @@ -117,6 +117,9 @@ private: ReadExceptionRecord(); void + ReadMiscInfo(); + + void ReadModuleList(); // A thin wrapper around WinAPI's MiniDumpReadDumpStream to avoid redundant diff --git a/lldb/test/functionalities/postmortem/minidump/TestMiniDump.py b/lldb/test/functionalities/postmortem/minidump/TestMiniDump.py index 862eed84067..63cfd0ea07c 100644 --- a/lldb/test/functionalities/postmortem/minidump/TestMiniDump.py +++ b/lldb/test/functionalities/postmortem/minidump/TestMiniDump.py @@ -16,7 +16,7 @@ class MiniDumpTestCase(TestBase): """Test that lldb can read the process information from the minidump.""" self.assertTrue(self.process, PROCESS_IS_VALID) self.assertEqual(self.process.GetNumThreads(), 1) - # TODO(amccarth): Check the process ID. + self.assertEqual(self.process.GetProcessID(), 4440) def test_thread_info_in_mini_dump(self): """Test that lldb can read the thread information from the minidump.""" |

