diff options
author | Nelson Billing <nbilling@google.com> | 2019-06-12 14:19:57 -0700 |
---|---|---|
committer | Nelson Billing <nbilling@google.com> | 2019-06-12 21:20:27 +0000 |
commit | 87bc4022100020b2d01e5e8a97e3766db6a4ce5b (patch) | |
tree | edec3ba67f0c431c88e33a0e899c17feb2d04b91 /src/tools/windows/dump_syms/dump_syms_unittest.cc | |
parent | Port new symbol upload API to Windows symupload tool. (diff) | |
download | breakpad-87bc4022100020b2d01e5e8a97e3766db6a4ce5b.tar.xz |
Enable PE-only metadata dumping for 64bit (aka. PE32+ format) PEs files.
- Implement in common_windows_lib-- added class "PESourceLineWriter".
- Add command-line switch to tell dump_syms to use PESourceLineWriter.
Symbol data created this way will contain information to correlate the
module with ones found in minidumps, along with frame info that allows
much higher quality stack-walking in those minidumps.
- Significant refactor of PDBSourceLineWriter-- all code concerned with
extracting metadata from PE files has been moved into utility
functions. This is to allow sharing of this functionality with newly-
added PESourceLineWriter.
- Added a unit test to dump_syms for the PE-only scenario.
Change-Id: If0855f05d424d32d23f484995be5f34232179a37
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/1525325
Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
Diffstat (limited to 'src/tools/windows/dump_syms/dump_syms_unittest.cc')
-rw-r--r-- | src/tools/windows/dump_syms/dump_syms_unittest.cc | 67 |
1 files changed, 53 insertions, 14 deletions
diff --git a/src/tools/windows/dump_syms/dump_syms_unittest.cc b/src/tools/windows/dump_syms/dump_syms_unittest.cc index 5ed512e6..766e5c09 100644 --- a/src/tools/windows/dump_syms/dump_syms_unittest.cc +++ b/src/tools/windows/dump_syms/dump_syms_unittest.cc @@ -55,11 +55,15 @@ const wchar_t* kRootNames[] = { // without source data.
L"omap_stretched",
// A PDB file with OMAP data for an image that has been basic block reordered.
- L"omap_reorder_bbs",
+ L"omap_reorder_bbs",
// A 64bit PDB file with no OMAP data.
L"dump_syms_regtest64",
};
+const wchar_t* kPEOnlyRootNames[] = {
+ L"pe_only_symbol_test",
+};
+
void TrimLastComponent(const std::wstring& path,
std::wstring* trimmed,
std::wstring* component) {
@@ -177,29 +181,64 @@ class DumpSymsRegressionTest : public testing::TestWithParam<const wchar_t *> { std::wstring testdata_dir;
};
+class DumpSymsPEOnlyRegressionTest : public testing::TestWithParam<const wchar_t *> {
+public:
+ virtual void SetUp() {
+ std::wstring self_dir;
+ ASSERT_TRUE(GetSelfDirectory(&self_dir));
+ dump_syms_exe = self_dir + L"\\dump_syms.exe";
+
+ TrimLastComponent(self_dir, &testdata_dir, NULL);
+ testdata_dir += L"\\testdata";
+ }
+
+ std::wstring dump_syms_exe;
+ std::wstring testdata_dir;
+};
+
} //namespace
TEST_P(DumpSymsRegressionTest, EnsureDumpedSymbolsMatch) {
- const wchar_t* root_name = GetParam();
- std::wstring root_path = testdata_dir + L"\\" + root_name;
+ const wchar_t* root_name = GetParam();
+ std::wstring root_path = testdata_dir + L"\\" + root_name;
- std::wstring sym_path = root_path + L".sym";
- std::string expected_symbols;
- ASSERT_NO_FATAL_FAILURE(GetFileContents(sym_path, &expected_symbols));
+ std::wstring sym_path = root_path + L".sym";
+ std::string expected_symbols;
+ ASSERT_NO_FATAL_FAILURE(GetFileContents(sym_path, &expected_symbols));
- std::wstring pdb_path = root_path + L".pdb";
- std::wstring command_line = L"\"" + dump_syms_exe + L"\" \"" +
- pdb_path + L"\"";
- std::string symbols;
- ASSERT_NO_FATAL_FAILURE(RunCommand(command_line, &symbols));
+ std::wstring pdb_path = root_path + L".pdb";
+ std::wstring command_line = L"\"" + dump_syms_exe + L"\" \"" +
+ pdb_path + L"\"";
+ std::string symbols;
+ ASSERT_NO_FATAL_FAILURE(RunCommand(command_line, &symbols));
- EXPECT_EQ(expected_symbols, symbols);
+ EXPECT_EQ(expected_symbols, symbols);
}
INSTANTIATE_TEST_CASE_P(DumpSyms, DumpSymsRegressionTest,
- testing::ValuesIn(kRootNames));
+ testing::ValuesIn(kRootNames));
+
+TEST_P(DumpSymsPEOnlyRegressionTest, EnsurePEOnlyDumpedSymbolsMatch) {
+ const wchar_t* root_name = GetParam();
+ std::wstring root_path = testdata_dir + L"\\" + root_name;
+
+ std::wstring sym_path = root_path + L".sym";
+ std::string expected_symbols;
+ ASSERT_NO_FATAL_FAILURE(GetFileContents(sym_path, &expected_symbols));
+
+ std::wstring dll_path = root_path + L".dll";
+ std::wstring command_line = L"\"" + dump_syms_exe + L"\" --pe \"" +
+ dll_path + L"\"";
+ std::string symbols;
+ ASSERT_NO_FATAL_FAILURE(RunCommand(command_line, &symbols));
+
+ EXPECT_EQ(expected_symbols, symbols);
+}
+
+INSTANTIATE_TEST_CASE_P(PEOnlyDumpSyms, DumpSymsPEOnlyRegressionTest,
+ testing::ValuesIn(kPEOnlyRootNames));
} // namespace dump_syms
} // namespace windows
-} // namespace tools +} // namespace tools
|