summaryrefslogtreecommitdiffstats
path: root/lldb/unittests/Process
diff options
context:
space:
mode:
authorPavel Labath <pavel@labath.sk>2019-04-21 13:12:40 +0000
committerPavel Labath <pavel@labath.sk>2019-04-21 13:12:40 +0000
commitf6e8063145fea09915d2382a817328cf0be7150d (patch)
tree869fb157f00376719094a6b1c27fb747af8285a6 /lldb/unittests/Process
parentba7ffae0c56474c9ddfe7bac4a06f8b98911ab08 (diff)
downloadbcm5719-llvm-f6e8063145fea09915d2382a817328cf0be7150d.tar.gz
bcm5719-llvm-f6e8063145fea09915d2382a817328cf0be7150d.zip
Minidump: yamlify module-related unit tests
The tests reading the untouched module list are now not using any lldb code (as module list loading lives in llvm now), so they can be removed. The "filtering" of the module list remains (and probably will remain) an lldb concept, so I keep those tests, but replace the checked-in binaries with their yaml equivalents. The binaries which are no longer referenced by any tests have been removed. llvm-svn: 358850
Diffstat (limited to 'lldb/unittests/Process')
-rw-r--r--lldb/unittests/Process/minidump/CMakeLists.txt4
-rw-r--r--lldb/unittests/Process/minidump/Inputs/module-list-not-padded.dmpbin296 -> 0 bytes
-rw-r--r--lldb/unittests/Process/minidump/Inputs/module-list-padded.dmpbin300 -> 0 bytes
-rw-r--r--lldb/unittests/Process/minidump/Inputs/modules-dup-min-addr.dmpbin420 -> 0 bytes
-rw-r--r--lldb/unittests/Process/minidump/Inputs/modules-order.dmpbin420 -> 0 bytes
-rw-r--r--lldb/unittests/Process/minidump/MinidumpParserTest.cpp190
6 files changed, 60 insertions, 134 deletions
diff --git a/lldb/unittests/Process/minidump/CMakeLists.txt b/lldb/unittests/Process/minidump/CMakeLists.txt
index 9cbd7a9d9f3..06ddbd0b650 100644
--- a/lldb/unittests/Process/minidump/CMakeLists.txt
+++ b/lldb/unittests/Process/minidump/CMakeLists.txt
@@ -23,10 +23,6 @@ set(test_inputs
linux-x86_64_not_crashed.dmp
memory-list-not-padded.dmp
memory-list-padded.dmp
- module-list-not-padded.dmp
- module-list-padded.dmp
- modules-dup-min-addr.dmp
- modules-order.dmp
regions-linux-map.dmp
regions-memlist.dmp
regions-memlist64.dmp
diff --git a/lldb/unittests/Process/minidump/Inputs/module-list-not-padded.dmp b/lldb/unittests/Process/minidump/Inputs/module-list-not-padded.dmp
deleted file mode 100644
index b37e251ce21..00000000000
--- a/lldb/unittests/Process/minidump/Inputs/module-list-not-padded.dmp
+++ /dev/null
Binary files differ
diff --git a/lldb/unittests/Process/minidump/Inputs/module-list-padded.dmp b/lldb/unittests/Process/minidump/Inputs/module-list-padded.dmp
deleted file mode 100644
index 431c7c025b2..00000000000
--- a/lldb/unittests/Process/minidump/Inputs/module-list-padded.dmp
+++ /dev/null
Binary files differ
diff --git a/lldb/unittests/Process/minidump/Inputs/modules-dup-min-addr.dmp b/lldb/unittests/Process/minidump/Inputs/modules-dup-min-addr.dmp
deleted file mode 100644
index a7a1c4afe85..00000000000
--- a/lldb/unittests/Process/minidump/Inputs/modules-dup-min-addr.dmp
+++ /dev/null
Binary files differ
diff --git a/lldb/unittests/Process/minidump/Inputs/modules-order.dmp b/lldb/unittests/Process/minidump/Inputs/modules-order.dmp
deleted file mode 100644
index cab926b2129..00000000000
--- a/lldb/unittests/Process/minidump/Inputs/modules-order.dmp
+++ /dev/null
Binary files differ
diff --git a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp
index f6c85f96467..cee1000b34a 100644
--- a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp
+++ b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp
@@ -126,30 +126,6 @@ TEST_F(MinidumpParserTest, GetThreadListPadded) {
EXPECT_EQ(0x55667788UL, thread_list[1].thread_id);
}
-TEST_F(MinidumpParserTest, GetModuleListNotPadded) {
- // Verify that we can load a module list that doesn't have 4 bytes of padding
- // after the module count.
- SetUpData("module-list-not-padded.dmp");
- auto module_list = parser->GetModuleList();
- ASSERT_EQ(2UL, module_list.size());
- EXPECT_EQ(0x1000UL, module_list[0].BaseOfImage);
- EXPECT_EQ(0x2000UL, module_list[0].SizeOfImage);
- EXPECT_EQ(0x5000UL, module_list[1].BaseOfImage);
- EXPECT_EQ(0x3000UL, module_list[1].SizeOfImage);
-}
-
-TEST_F(MinidumpParserTest, GetModuleListPadded) {
- // Verify that we can load a module list that has 4 bytes of padding
- // after the module count as found in breakpad minidump files.
- SetUpData("module-list-padded.dmp");
- auto module_list = parser->GetModuleList();
- ASSERT_EQ(2UL, module_list.size());
- EXPECT_EQ(0x1000UL, module_list[0].BaseOfImage);
- EXPECT_EQ(0x2000UL, module_list[0].SizeOfImage);
- EXPECT_EQ(0x5000UL, module_list[1].BaseOfImage);
- EXPECT_EQ(0x3000UL, module_list[1].SizeOfImage);
-}
-
TEST_F(MinidumpParserTest, GetMemoryListNotPadded) {
// Verify that we can load a memory list that doesn't have 4 bytes of padding
// after the memory range count.
@@ -218,47 +194,31 @@ TEST_F(MinidumpParserTest, GetPid) {
ASSERT_EQ(16001UL, pid.getValue());
}
-TEST_F(MinidumpParserTest, GetModuleList) {
- SetUpData("linux-x86_64.dmp");
- llvm::ArrayRef<minidump::Module> modules = parser->GetModuleList();
- ASSERT_EQ(8UL, modules.size());
- const auto &getName = [&](size_t i) {
- return parser->GetMinidumpFile().getString(modules[i].ModuleNameRVA);
- };
-
- EXPECT_THAT_EXPECTED(
- getName(0),
- llvm::HasValue(
- "/usr/local/google/home/dvlahovski/projects/test_breakpad/a.out"));
- EXPECT_THAT_EXPECTED(getName(1),
- llvm::HasValue("/lib/x86_64-linux-gnu/libm-2.19.so"));
- EXPECT_THAT_EXPECTED(getName(2),
- llvm::HasValue("/lib/x86_64-linux-gnu/libc-2.19.so"));
- EXPECT_THAT_EXPECTED(getName(3),
- llvm::HasValue("/lib/x86_64-linux-gnu/libgcc_s.so.1"));
- EXPECT_THAT_EXPECTED(
- getName(4),
- llvm::HasValue("/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19"));
- EXPECT_THAT_EXPECTED(
- getName(5), llvm::HasValue("/lib/x86_64-linux-gnu/libpthread-2.19.so"));
- EXPECT_THAT_EXPECTED(getName(6),
- llvm::HasValue("/lib/x86_64-linux-gnu/ld-2.19.so"));
- EXPECT_THAT_EXPECTED(getName(7), llvm::HasValue("linux-gate.so"));
-}
-
TEST_F(MinidumpParserTest, GetFilteredModuleList) {
- SetUpData("linux-x86_64_not_crashed.dmp");
+ ASSERT_THAT_ERROR(SetUpFromYaml(R"(
+--- !minidump
+Streams:
+ - Type: ModuleList
+ Modules:
+ - Base of Image: 0x0000000000400000
+ Size of Image: 0x00001000
+ Module Name: '/tmp/test/linux-x86_64_not_crashed'
+ CodeView Record: 4C4570426CCF3F60FFA7CC4B86AE8FF44DB2576A68983611
+ - Base of Image: 0x0000000000600000
+ Size of Image: 0x00002000
+ Module Name: '/tmp/test/linux-x86_64_not_crashed'
+ CodeView Record: 4C4570426CCF3F60FFA7CC4B86AE8FF44DB2576A68983611
+...
+)"),
+ llvm::Succeeded());
llvm::ArrayRef<minidump::Module> modules = parser->GetModuleList();
std::vector<const minidump::Module *> filtered_modules =
parser->GetFilteredModuleList();
- EXPECT_EQ(10UL, modules.size());
- EXPECT_EQ(9UL, filtered_modules.size());
- std::vector<std::string> names;
- for (const minidump::Module *m : filtered_modules)
- names.push_back(
- cantFail(parser->GetMinidumpFile().getString(m->ModuleNameRVA)));
-
- EXPECT_EQ(1u, llvm::count(names, "/tmp/test/linux-x86_64_not_crashed"));
+ EXPECT_EQ(2u, modules.size());
+ ASSERT_EQ(1u, filtered_modules.size());
+ const minidump::Module &M = *filtered_modules[0];
+ EXPECT_THAT_EXPECTED(parser->GetMinidumpFile().getString(M.ModuleNameRVA),
+ llvm::HasValue("/tmp/test/linux-x86_64_not_crashed"));
}
TEST_F(MinidumpParserTest, GetExceptionStream) {
@@ -494,56 +454,6 @@ TEST_F(MinidumpParserTest, GetPidWow64) {
ASSERT_EQ(7836UL, pid.getValue());
}
-TEST_F(MinidumpParserTest, GetModuleListWow64) {
- SetUpData("fizzbuzz_wow64.dmp");
- llvm::ArrayRef<minidump::Module> modules = parser->GetModuleList();
- ASSERT_EQ(16UL, modules.size());
- const auto &getName = [&](size_t i) {
- return parser->GetMinidumpFile().getString(modules[i].ModuleNameRVA);
- };
-
- EXPECT_THAT_EXPECTED(
- getName(0),
- llvm::HasValue(
- R"(D:\src\llvm\llvm\tools\lldb\packages\Python\lldbsuite\test\functionalities\postmortem\wow64_minidump\fizzbuzz.exe)"));
- EXPECT_THAT_EXPECTED(getName(1), llvm::HasValue(
- R"(C:\Windows\System32\ntdll.dll)"));
- EXPECT_THAT_EXPECTED(getName(2), llvm::HasValue(
- R"(C:\Windows\System32\wow64.dll)"));
- EXPECT_THAT_EXPECTED(getName(3), llvm::HasValue(
- R"(C:\Windows\System32\wow64win.dll)"));
- EXPECT_THAT_EXPECTED(getName(4), llvm::HasValue(
- R"(C:\Windows\System32\wow64cpu.dll)"));
- EXPECT_THAT_EXPECTED(
- getName(5),
- llvm::HasValue(
- R"(D:\src\llvm\llvm\tools\lldb\packages\Python\lldbsuite\test\functionalities\postmortem\wow64_minidump\fizzbuzz.exe)"));
- EXPECT_THAT_EXPECTED(getName(6), llvm::HasValue(
- R"(C:\Windows\SysWOW64\ntdll.dll)"));
- EXPECT_THAT_EXPECTED(getName(7), llvm::HasValue(
- R"(C:\Windows\SysWOW64\kernel32.dll)"));
- EXPECT_THAT_EXPECTED(getName(8),
- llvm::HasValue(
- R"(C:\Windows\SysWOW64\KERNELBASE.dll)"));
- EXPECT_THAT_EXPECTED(getName(9), llvm::HasValue(
- R"(C:\Windows\SysWOW64\advapi32.dll)"));
- EXPECT_THAT_EXPECTED(getName(10), llvm::HasValue(
- R"(C:\Windows\SysWOW64\msvcrt.dll)"));
- EXPECT_THAT_EXPECTED(getName(11), llvm::HasValue(
- R"(C:\Windows\SysWOW64\sechost.dll)"));
- EXPECT_THAT_EXPECTED(getName(12), llvm::HasValue(
- R"(C:\Windows\SysWOW64\rpcrt4.dll)"));
- EXPECT_THAT_EXPECTED(getName(13), llvm::HasValue(
- R"(C:\Windows\SysWOW64\sspicli.dll)"));
- EXPECT_THAT_EXPECTED(getName(14),
- llvm::HasValue(
- R"(C:\Windows\SysWOW64\CRYPTBASE.dll)"));
- EXPECT_THAT_EXPECTED(
- getName(15),
- llvm::HasValue(
- R"(C:\Windows\System32\api-ms-win-core-synch-l1-2-0.DLL)"));
-}
-
// Register tests
#define REG_VAL32(x) *(reinterpret_cast<uint32_t *>(x))
#define REG_VAL64(x) *(reinterpret_cast<uint64_t *>(x))
@@ -647,33 +557,53 @@ TEST_F(MinidumpParserTest, GetThreadContext_x86_32_wow64) {
}
TEST_F(MinidumpParserTest, MinidumpDuplicateModuleMinAddress) {
- SetUpData("modules-dup-min-addr.dmp");
- // Test that if we have two modules in the module list:
- // /tmp/a with range [0x2000-0x3000)
- // /tmp/a with range [0x1000-0x2000)
- // That we end up with one module in the filtered list with the
- // range [0x1000-0x2000). MinidumpParser::GetFilteredModuleList() is
- // trying to ensure that if we have the same module mentioned more than
- // one time, we pick the one with the lowest BaseOfImage.
+ ASSERT_THAT_ERROR(SetUpFromYaml(R"(
+--- !minidump
+Streams:
+ - Type: ModuleList
+ Modules:
+ - Base of Image: 0x0000000000002000
+ Size of Image: 0x00001000
+ Module Name: '/tmp/a'
+ CodeView Record: ''
+ - Base of Image: 0x0000000000001000
+ Size of Image: 0x00001000
+ Module Name: '/tmp/a'
+ CodeView Record: ''
+...
+)"),
+ llvm::Succeeded());
+ // If we have a module mentioned twice in the module list, the filtered
+ // module list should contain the instance with the lowest BaseOfImage.
std::vector<const minidump::Module *> filtered_modules =
parser->GetFilteredModuleList();
- EXPECT_EQ(1u, filtered_modules.size());
+ ASSERT_EQ(1u, filtered_modules.size());
EXPECT_EQ(0x0000000000001000u, filtered_modules[0]->BaseOfImage);
}
TEST_F(MinidumpParserTest, MinidumpModuleOrder) {
- SetUpData("modules-order.dmp");
- // Test that if we have two modules in the module list:
- // /tmp/a with range [0x2000-0x3000)
- // /tmp/b with range [0x1000-0x2000)
- // That we end up with two modules in the filtered list with the same ranges
- // and in the same order. Previous versions of the
- // MinidumpParser::GetFilteredModuleList() function would sort all images
- // by address and modify the order of the modules.
+ ASSERT_THAT_ERROR(SetUpFromYaml(R"(
+--- !minidump
+Streams:
+ - Type: ModuleList
+ Modules:
+ - Base of Image: 0x0000000000002000
+ Size of Image: 0x00001000
+ Module Name: '/tmp/a'
+ CodeView Record: ''
+ - Base of Image: 0x0000000000001000
+ Size of Image: 0x00001000
+ Module Name: '/tmp/b'
+ CodeView Record: ''
+...
+)"),
+ llvm::Succeeded());
+ // Test module filtering does not affect the overall module order. Previous
+ // versions of the MinidumpParser::GetFilteredModuleList() function would sort
+ // all images by address and modify the order of the modules.
std::vector<const minidump::Module *> filtered_modules =
parser->GetFilteredModuleList();
- llvm::Optional<std::string> name;
- EXPECT_EQ(2u, filtered_modules.size());
+ ASSERT_EQ(2u, filtered_modules.size());
EXPECT_EQ(0x0000000000002000u, filtered_modules[0]->BaseOfImage);
EXPECT_THAT_EXPECTED(
parser->GetMinidumpFile().getString(filtered_modules[0]->ModuleNameRVA),
OpenPOWER on IntegriCloud