forked from OSchip/llvm-project
[lldb] Prefer executable files from sysroot over files from local filesystem
Summary: In D49685 sysroot behaviour was partially fixed. But files from local filesystem with same path still has priority over files from sysroot. This patch fixes it by removing fallback to local filesystem from RemoteAwarePlatform::GetModuleSpec(). It is not actually required because higher level code do such fallback itself. See, for example, resolver in Platform::GetSharedModule(). Reviewers: labath, clayborg, EugeneBi Reviewed By: labath Subscribers: lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D77529
This commit is contained in:
parent
fc64539749
commit
6afa5c407c
|
@ -21,7 +21,7 @@ bool RemoteAwarePlatform::GetModuleSpec(const FileSpec &module_file_spec,
|
|||
return m_remote_platform_sp->GetModuleSpec(module_file_spec, arch,
|
||||
module_spec);
|
||||
|
||||
return Platform::GetModuleSpec(module_file_spec, arch, module_spec);
|
||||
return false;
|
||||
}
|
||||
|
||||
Status RemoteAwarePlatform::RunShellCommand(
|
||||
|
|
|
@ -209,6 +209,44 @@ class LinuxCoreTestCase(TestBase):
|
|||
|
||||
self.dbg.DeleteTarget(target)
|
||||
|
||||
@skipIf(triple='^mips')
|
||||
@skipIfLLVMTargetMissing("X86")
|
||||
@skipIfWindows
|
||||
def test_x86_64_sysroot(self):
|
||||
"""Test that sysroot has more priority then local filesystem."""
|
||||
|
||||
# Copy wrong executable to the location outside of sysroot
|
||||
exe_outside = os.path.join(self.getBuildDir(), "bin", "a.out")
|
||||
lldbutil.mkdir_p(os.path.dirname(exe_outside))
|
||||
shutil.copyfile("altmain.out", exe_outside)
|
||||
|
||||
# Copy correct executable to the location inside sysroot
|
||||
tmp_sysroot = os.path.join(self.getBuildDir(), "mock_sysroot")
|
||||
exe_inside = os.path.join(tmp_sysroot, os.path.relpath(exe_outside, "/"))
|
||||
lldbutil.mkdir_p(os.path.dirname(exe_inside))
|
||||
shutil.copyfile("linux-x86_64.out", exe_inside)
|
||||
|
||||
# Prepare patched core file
|
||||
core_file = os.path.join(self.getBuildDir(), "patched.core")
|
||||
with open("linux-x86_64.core", "rb") as f:
|
||||
core = f.read()
|
||||
core = replace_path(core, "/test" * 817 + "/a.out", exe_outside)
|
||||
with open(core_file, "wb") as f:
|
||||
f.write(core)
|
||||
|
||||
# Set sysroot and load core
|
||||
self.runCmd("platform select remote-linux --sysroot '%s'" % tmp_sysroot)
|
||||
target = self.dbg.CreateTarget(None)
|
||||
self.assertTrue(target, VALID_TARGET)
|
||||
process = target.LoadCore(core_file)
|
||||
|
||||
# Check that we found executable from the sysroot
|
||||
mod_path = str(target.GetModuleAtIndex(0).GetFileSpec())
|
||||
self.assertEqual(mod_path, exe_inside)
|
||||
self.check_all(process, self._x86_64_pid, self._x86_64_regions, "a.out")
|
||||
|
||||
self.dbg.DeleteTarget(target)
|
||||
|
||||
@skipIf(triple='^mips')
|
||||
@skipIfLLVMTargetMissing("ARM")
|
||||
def test_arm_core(self):
|
||||
|
@ -369,3 +407,9 @@ class LinuxCoreTestCase(TestBase):
|
|||
self.check_all(process, pid, region_count, thread_name)
|
||||
|
||||
self.dbg.DeleteTarget(target)
|
||||
|
||||
def replace_path(binary, replace_from, replace_to):
|
||||
src = replace_from.encode()
|
||||
dst = replace_to.encode()
|
||||
dst += b"\0" * (len(src) - len(dst))
|
||||
return binary.replace(src, dst)
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue