diff options
6 files changed, 8 insertions, 121 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py index d17d4bc1106..1e4a98363e3 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py @@ -8,7 +8,6 @@ from six import iteritems import shutil import lldb -import os from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil @@ -30,10 +29,7 @@ class MiniDumpUUIDTestCase(TestBase): def verify_module(self, module, verify_path, verify_uuid): uuid = module.GetUUIDString() - fullpath = module.GetFileSpec().fullpath - msg = 'Verify path ("%s") is contained in the fullpath ("%s")' % ( - verify_path, fullpath) - self.assertTrue(verify_path in fullpath, msg) + self.assertEqual(verify_path, module.GetFileSpec().fullpath) self.assertEqual(verify_uuid, uuid) def test_zero_uuid_modules(self): @@ -136,56 +132,3 @@ class MiniDumpUUIDTestCase(TestBase): self.assertEqual(2, len(modules)) self.verify_module(modules[0], "/not/exist/a", None) self.verify_module(modules[1], "/not/exist/b", None) - - @skipIf(oslist=['windows']) - def test_partial_uuid_match(self): - """ - Breakpad has been known to create minidump files using CvRecord in each - module whose signature is set to PDB70 where the UUID only contains the - first 16 bytes of a 20 byte ELF build ID. Code was added to - ProcessMinidump.cpp to deal with this and allows partial UUID matching. - - This test verifies that if we have a minidump with a 16 byte UUID, that - we are able to associate a symbol file with a 20 byte UUID only if the - first 16 bytes match. In this case we will see the path from the file - we found in the test directory and the 20 byte UUID from the actual - file, not the 16 byte shortened UUID from the minidump. - """ - so_path = self.getBuildArtifact("libuuidmatch.so") - self.yaml2obj("libuuidmatch.yaml", so_path) - self.dbg.CreateTarget(None) - self.target = self.dbg.GetSelectedTarget() - cmd = 'settings set target.exec-search-paths "%s"' % (os.path.dirname(so_path)) - self.dbg.HandleCommand(cmd) - self.process = self.target.LoadCore("linux-arm-partial-uuids-match.dmp") - modules = self.target.modules - self.assertEqual(1, len(modules)) - self.verify_module(modules[0], - "libuuidmatch.so", - "7295E17C-6668-9E05-CBB5-DEE5003865D5-5267C116") - - @skipIf(oslist=['windows']) - def test_partial_uuid_mismatch(self): - """ - Breakpad has been known to create minidump files using CvRecord in each - module whose signature is set to PDB70 where the UUID only contains the - first 16 bytes of a 20 byte ELF build ID. Code was added to - ProcessMinidump.cpp to deal with this and allows partial UUID matching. - - This test verifies that if we have a minidump with a 16 byte UUID, that - we are not able to associate a symbol file with a 20 byte UUID only if - any of the first 16 bytes do not match. In this case we will see the UUID - from the minidump file and the path from the minidump file. - """ - so_path = self.getBuildArtifact("libuuidmismatch.so") - self.yaml2obj("libuuidmatch.yaml", so_path) - self.dbg.CreateTarget(None) - self.target = self.dbg.GetSelectedTarget() - cmd = 'settings set target.exec-search-paths "%s"' % (os.path.dirname(so_path)) - self.dbg.HandleCommand(cmd) - self.process = self.target.LoadCore("linux-arm-partial-uuids-mismatch.dmp") - modules = self.target.modules - self.assertEqual(1, len(modules)) - self.verify_module(modules[0], - "/invalid/path/on/current/system/libuuidmismatch.so", - "7295E17C-6668-9E05-CBB5-DEE5003865D5") diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/libuuidmatch.yaml b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/libuuidmatch.yaml deleted file mode 100644 index 3610694d4db..00000000000 --- a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/libuuidmatch.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- !ELF -FileHeader: - Class: ELFCLASS32 - Data: ELFDATA2LSB - Type: ET_DYN - Machine: EM_ARM - Flags: [ EF_ARM_SOFT_FLOAT, EF_ARM_EABI_VER5 ] -Sections: - - Name: .note.gnu.build-id - Type: SHT_NOTE - Flags: [ SHF_ALLOC ] - Address: 0x0000000000000114 - AddressAlign: 0x0000000000000004 - Content: 040000001400000003000000474E55007295E17C66689E05CBB5DEE5003865D55267C116 diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/libuuidmismatch.yaml b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/libuuidmismatch.yaml deleted file mode 100644 index 5fef636228e..00000000000 --- a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/libuuidmismatch.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- !ELF -FileHeader: - Class: ELFCLASS32 - Data: ELFDATA2LSB - Type: ET_DYN - Machine: EM_ARM - Flags: [ EF_ARM_SOFT_FLOAT, EF_ARM_EABI_VER5 ] -Sections: - - Name: .note.gnu.build-id - Type: SHT_NOTE - Flags: [ SHF_ALLOC ] - Address: 0x0000000000000114 - AddressAlign: 0x0000000000000004 - Content: 040000001400000003000000474E55008295E17C66689E05CBB5DEE5003865D55267C116 diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-arm-partial-uuids-match.dmp b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-arm-partial-uuids-match.dmp Binary files differdeleted file mode 100644 index 12045dacb4e..00000000000 --- a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-arm-partial-uuids-match.dmp +++ /dev/null diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-arm-partial-uuids-mismatch.dmp b/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-arm-partial-uuids-mismatch.dmp Binary files differdeleted file mode 100644 index c5c610e63b1..00000000000 --- a/lldb/packages/Python/lldbsuite/test/functionalities/postmortem/minidump-new/linux-arm-partial-uuids-mismatch.dmp +++ /dev/null diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp index 4d16f82c493..a7f35b46946 100644 --- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp +++ b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp @@ -351,8 +351,6 @@ void ProcessMinidump::ReadModuleList() { std::vector<const MinidumpModule *> filtered_modules = m_minidump_parser->GetFilteredModuleList(); - Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_MODULES)); - for (auto module : filtered_modules) { llvm::Optional<std::string> name = m_minidump_parser->GetMinidumpString(module->module_name_rva); @@ -360,6 +358,7 @@ void ProcessMinidump::ReadModuleList() { if (!name) continue; + Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_MODULES)); if (log) { log->Printf("ProcessMinidump::%s found module: name: %s %#010" PRIx64 "-%#010" PRIx64 " size: %" PRIu32, @@ -375,46 +374,14 @@ void ProcessMinidump::ReadModuleList() { m_is_wow64 = true; } - if (log) { - log->Printf("ProcessMinidump::%s load module: name: %s", __FUNCTION__, - name.getValue().c_str()); - } - const auto uuid = m_minidump_parser->GetModuleUUID(module); auto file_spec = FileSpec(name.getValue(), GetArchitecture().GetTriple()); FileSystem::Instance().Resolve(file_spec); ModuleSpec module_spec(file_spec, uuid); module_spec.GetArchitecture() = GetArchitecture(); Status error; - // Try and find a module with a full UUID that matches. This function will - // add the module to the target if it finds one. lldb::ModuleSP module_sp = GetTarget().GetSharedModule(module_spec, &error); - if (!module_sp) { - // Try and find a module without specifying the UUID and only looking for - // the file given a basename. We then will look for a partial UUID match - // if we find any matches. This function will add the module to the - // target if it finds one, so we need to remove the module from the target - // if the UUID doesn't match during our manual UUID verification. This - // allows the "target.exec-search-paths" setting to specify one or more - // directories that contain executables that can be searched for matches. - ModuleSpec basename_module_spec(module_spec); - basename_module_spec.GetUUID().Clear(); - basename_module_spec.GetFileSpec().GetDirectory().Clear(); - module_sp = GetTarget().GetSharedModule(basename_module_spec, &error); - if (module_sp) { - // We consider the module to be a match if the minidump UUID is a - // prefix of the actual UUID, or if either of the UUIDs are empty. - const auto dmp_bytes = uuid.GetBytes(); - const auto mod_bytes = module_sp->GetUUID().GetBytes(); - const bool match = dmp_bytes.empty() || mod_bytes.empty() || - mod_bytes.take_front(dmp_bytes.size()) == dmp_bytes; - if (!match) { - GetTarget().GetImages().Remove(module_sp); - module_sp.reset(); - } - } - } - if (!module_sp) { + if (!module_sp || error.Fail()) { // We failed to locate a matching local object file. Fortunately, the // minidump format encodes enough information about each module's memory // range to allow us to create placeholder modules. @@ -433,6 +400,11 @@ void ProcessMinidump::ReadModuleList() { GetTarget().GetImages().Append(module_sp); } + if (log) { + log->Printf("ProcessMinidump::%s load module: name: %s", __FUNCTION__, + name.getValue().c_str()); + } + bool load_addr_changed = false; module_sp->SetLoadAddress(GetTarget(), module->base_of_image, false, load_addr_changed); |