summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian McCarthy <amccarth@google.com>2015-09-17 20:52:29 +0000
committerAdrian McCarthy <amccarth@google.com>2015-09-17 20:52:29 +0000
commitab59a0f6e7fe4b24bac82d99ec3bdabbab8996f3 (patch)
tree2dd0ce5346f1d231dd00597d1735487f06104c84
parent5dd66c3ca26442afcaf68547ada84ec1043b0232 (diff)
downloadbcm5719-llvm-ab59a0f6e7fe4b24bac82d99ec3bdabbab8996f3.tar.gz
bcm5719-llvm-ab59a0f6e7fe4b24bac82d99ec3bdabbab8996f3.zip
Get the process ID from a minidump.
llvm-svn: 247939
-rw-r--r--lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp22
-rw-r--r--lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h3
-rw-r--r--lldb/test/functionalities/postmortem/minidump/TestMiniDump.py2
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."""
OpenPOWER on IntegriCloud