[Lldb-commits] [lldb] r357896 - MinidumpParser: parse SystemInfo stream via llvm
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Mon Apr 8 02:53:03 PDT 2019
Author: labath
Date: Mon Apr 8 02:53:03 2019
New Revision: 357896
URL: http://llvm.org/viewvc/llvm-project?rev=357896&view=rev
Log:
MinidumpParser: parse SystemInfo stream via llvm
I also update the tests for SystemInfo parsing to use the yaml2minidump
capabilities in llvm instead of relying on checked-in binaries.
Modified:
lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp
lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h
lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp
Modified: lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp?rev=357896&r1=357895&r2=357896&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp (original)
+++ lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.cpp Mon Apr 8 02:53:03 2019
@@ -12,6 +12,7 @@
#include "Plugins/Process/Utility/LinuxProcMaps.h"
#include "lldb/Utility/LLDBAssert.h"
+#include "lldb/Utility/Log.h"
// C includes
// C++ includes
@@ -180,29 +181,19 @@ MinidumpParser::GetThreadContextWow64(co
// stored in the first slot of the 64-bit TEB (wow64teb.Reserved1[0]).
}
-const SystemInfo *MinidumpParser::GetSystemInfo() {
- llvm::ArrayRef<uint8_t> data = GetStream(StreamType::SystemInfo);
-
- if (data.size() == 0)
- return nullptr;
- const SystemInfo *system_info;
-
- Status error = consumeObject(data, system_info);
- if (error.Fail())
- return nullptr;
-
- return system_info;
-}
-
ArchSpec MinidumpParser::GetArchitecture() {
if (m_arch.IsValid())
return m_arch;
// Set the architecture in m_arch
- const SystemInfo *system_info = GetSystemInfo();
+ llvm::Expected<const SystemInfo &> system_info = m_file->getSystemInfo();
- if (!system_info)
+ if (!system_info) {
+ LLDB_LOG_ERROR(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS),
+ system_info.takeError(),
+ "Failed to read SystemInfo stream: {0}");
return m_arch;
+ }
// TODO what to do about big endiand flavors of arm ?
// TODO set the arm subarch stuff if the minidump has info about it
Modified: lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h?rev=357896&r1=357895&r2=357896&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h (original)
+++ lldb/trunk/source/Plugins/Process/minidump/MinidumpParser.h Mon Apr 8 02:53:03 2019
@@ -64,8 +64,6 @@ public:
llvm::ArrayRef<uint8_t> GetThreadContextWow64(const MinidumpThread &td);
- const SystemInfo *GetSystemInfo();
-
ArchSpec GetArchitecture();
const MinidumpMiscInfo *GetMiscInfo();
Modified: lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp?rev=357896&r1=357895&r2=357896&view=diff
==============================================================================
--- lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp (original)
+++ lldb/trunk/unittests/Process/minidump/MinidumpParserTest.cpp Mon Apr 8 02:53:03 2019
@@ -51,6 +51,22 @@ public:
ASSERT_GT(parser->GetData().size(), 0UL);
}
+ llvm::Error SetUpFromYaml(llvm::StringRef yaml) {
+ std::string data;
+ llvm::raw_string_ostream os(data);
+ if (llvm::Error E = llvm::MinidumpYAML::writeAsBinary(yaml, os))
+ return E;
+
+ os.flush();
+ auto data_buffer_sp =
+ std::make_shared<DataBufferHeap>(data.data(), data.size());
+ auto expected_parser = MinidumpParser::Create(std::move(data_buffer_sp));
+ if (!expected_parser)
+ return expected_parser.takeError();
+ parser = std::move(*expected_parser);
+ return llvm::Error::success();
+ }
+
llvm::Optional<MinidumpParser> parser;
};
@@ -159,7 +175,22 @@ TEST_F(MinidumpParserTest, GetMemoryList
}
TEST_F(MinidumpParserTest, GetArchitecture) {
- SetUpData("linux-x86_64.dmp");
+ ASSERT_THAT_ERROR(SetUpFromYaml(R"(
+--- !minidump
+Streams:
+ - Type: SystemInfo
+ Processor Arch: AMD64
+ Processor Level: 6
+ Processor Revision: 16130
+ Number of Processors: 1
+ Platform ID: Linux
+ CPU:
+ Vendor ID: GenuineIntel
+ Version Info: 0x00000000
+ Feature Info: 0x00000000
+...
+)"),
+ llvm::Succeeded());
ASSERT_EQ(llvm::Triple::ArchType::x86_64,
parser->GetArchitecture().GetMachine());
ASSERT_EQ(llvm::Triple::OSType::Linux,
@@ -404,15 +435,37 @@ TEST_F(MinidumpParserTest, GetMemoryRegi
}
// Windows Minidump tests
-// fizzbuzz_no_heap.dmp is copied from the WinMiniDump tests
TEST_F(MinidumpParserTest, GetArchitectureWindows) {
- SetUpData("fizzbuzz_no_heap.dmp");
+ ASSERT_THAT_ERROR(SetUpFromYaml(R"(
+--- !minidump
+Streams:
+ - Type: SystemInfo
+ Processor Arch: X86
+ Processor Level: 6
+ Processor Revision: 15876
+ Number of Processors: 32
+ Product type: 1
+ Major Version: 6
+ Minor Version: 1
+ Build Number: 7601
+ Platform ID: Win32NT
+ CSD Version: Service Pack 1
+ Suite Mask: 0x0100
+ CPU:
+ Vendor ID: GenuineIntel
+ Version Info: 0x000306E4
+ Feature Info: 0xBFEBFBFF
+ AMD Extended Features: 0x771EEC80
+...
+)"),
+ llvm::Succeeded());
ASSERT_EQ(llvm::Triple::ArchType::x86,
parser->GetArchitecture().GetMachine());
ASSERT_EQ(llvm::Triple::OSType::Win32,
parser->GetArchitecture().GetTriple().getOS());
}
+// fizzbuzz_no_heap.dmp is copied from the WinMiniDump tests
TEST_F(MinidumpParserTest, GetLinuxProcStatusWindows) {
SetUpData("fizzbuzz_no_heap.dmp");
llvm::Optional<LinuxProcStatus> proc_status = parser->GetLinuxProcStatus();
More information about the lldb-commits
mailing list