diff options
-rw-r--r-- | lldb/source/Target/Platform.cpp | 16 | ||||
-rw-r--r-- | lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py | 26 |
2 files changed, 38 insertions, 4 deletions
diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp index 16787141bee0..34ed7872c720 100644 --- a/lldb/source/Target/Platform.cpp +++ b/lldb/source/Target/Platform.cpp @@ -1564,21 +1564,29 @@ Status Platform::GetRemoteSharedModule(const ModuleSpec &module_spec, if (error.Success() && module_sp) break; } - if (module_sp) + if (module_sp) { + resolved_module_spec = arch_module_spec; got_module_spec = true; + } } if (!got_module_spec) { // Get module information from a target. - if (!GetModuleSpec(module_spec.GetFileSpec(), module_spec.GetArchitecture(), - resolved_module_spec)) { + if (GetModuleSpec(module_spec.GetFileSpec(), module_spec.GetArchitecture(), + resolved_module_spec)) { if (!module_spec.GetUUID().IsValid() || module_spec.GetUUID() == resolved_module_spec.GetUUID()) { - return module_resolver(module_spec); + got_module_spec = true; } } } + if (!got_module_spec) { + // Fall back to the given module resolver, which may have its own + // search logic. + return module_resolver(module_spec); + } + // If we are looking for a specific UUID, make sure resolved_module_spec has // the same one before we search. if (module_spec.GetUUID().IsValid()) { diff --git a/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py b/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py index 012f9b67d9e3..9d2daec67698 100644 --- a/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py +++ b/lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py @@ -455,3 +455,29 @@ class MiniDumpNewTestCase(TestBase): check_region(17, 0x40169000, 0x4016b000, True, True, False, True, d) check_region(18, 0x4016b000, 0x40176000, True, True, False, True, n) check_region(-1, 0x40176000, max_int, False, False, False, False, n) + + @skipIfLLVMTargetMissing("X86") + def test_minidump_sysroot(self): + """Test that lldb can find a module referenced in an i386 linux minidump using the sysroot.""" + + # Copy linux-x86_64 executable to tmp_sysroot/temp/test/ (since it was compiled as + # /tmp/test/linux-x86_64) + tmp_sysroot = os.path.join( + self.getBuildDir(), "lldb_i386_mock_sysroot") + executable = os.path.join( + tmp_sysroot, "tmp", "test", "linux-x86_64") + exe_dir = os.path.dirname(executable) + lldbutil.mkdir_p(exe_dir) + shutil.copyfile("linux-x86_64", executable) + + # Set sysroot and load core + self.runCmd("platform select remote-linux --sysroot '%s'" % + tmp_sysroot) + self.process_from_yaml("linux-x86_64.yaml") + self.check_state() + + # Check that we loaded the module from the sysroot + self.assertEqual(self.target.GetNumModules(), 1) + module = self.target.GetModuleAtIndex(0) + spec = module.GetFileSpec() + self.assertEqual(spec.GetDirectory(), exe_dir) |