aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lldb/source/Target/Platform.cpp16
-rw-r--r--lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpNew.py26
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)