[Lldb-commits] [lldb] [LLDB] Make 'process load' take remote os path delimiter into account (PR #98690)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Jul 12 13:21:37 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Vladislav Dzhidzhoev (dzhidzhoev)
<details>
<summary>Changes</summary>
Currently, if we execute 'process load' with remote debugging, it uses the host's path delimiter to look up files on a target machine. If we run remote debugging of Linux target on Windows and execute process load C:\foo\a.so, lldb-server tries to load \foo\a.so instead of /foo/a.so.
It affects several API tests.
This commit fixes that error. Also, it contains minor fixes for TestLoadUnload.py for testing on Windows host and Linux target.
---
Full diff: https://github.com/llvm/llvm-project/pull/98690.diff
2 Files Affected:
- (modified) lldb/source/Commands/CommandObjectProcess.cpp (+2-1)
- (modified) lldb/test/API/functionalities/load_unload/TestLoadUnload.py (+4-3)
``````````diff
diff --git a/lldb/source/Commands/CommandObjectProcess.cpp b/lldb/source/Commands/CommandObjectProcess.cpp
index 3587a8f529e4a..bdcd58c0da785 100644
--- a/lldb/source/Commands/CommandObjectProcess.cpp
+++ b/lldb/source/Commands/CommandObjectProcess.cpp
@@ -950,11 +950,12 @@ class CommandObjectProcessLoad : public CommandObjectParsed {
ExecutionContext *execution_context) override {
Status error;
const int short_option = m_getopt_table[option_idx].val;
+ ArchSpec arch = execution_context->GetProcessPtr()->GetSystemArchitecture();
switch (short_option) {
case 'i':
do_install = true;
if (!option_arg.empty())
- install_path.SetFile(option_arg, FileSpec::Style::native);
+ install_path.SetFile(option_arg, arch.GetTriple());
break;
default:
llvm_unreachable("Unimplemented option");
diff --git a/lldb/test/API/functionalities/load_unload/TestLoadUnload.py b/lldb/test/API/functionalities/load_unload/TestLoadUnload.py
index e52fb8c87377f..cc4060d48cc86 100644
--- a/lldb/test/API/functionalities/load_unload/TestLoadUnload.py
+++ b/lldb/test/API/functionalities/load_unload/TestLoadUnload.py
@@ -62,7 +62,7 @@ def copy_shlibs_to_remote(self, hidden_dir=False):
for f in shlibs:
err = lldb.remote_platform.Put(
lldb.SBFileSpec(self.getBuildArtifact(f)),
- lldb.SBFileSpec(os.path.join(wd, f)),
+ lldb.SBFileSpec(lldbutil.join_remote_paths(wd, f)),
)
if err.Fail():
raise RuntimeError(
@@ -71,7 +71,7 @@ def copy_shlibs_to_remote(self, hidden_dir=False):
if hidden_dir:
shlib = "libloadunload_d." + ext
hidden_dir = os.path.join(wd, "hidden")
- hidden_file = os.path.join(hidden_dir, shlib)
+ hidden_file = lldbutil.join_remote_paths(hidden_dir, shlib)
err = lldb.remote_platform.MakeDirectory(hidden_dir)
if err.Fail():
raise RuntimeError(
@@ -405,8 +405,9 @@ def run_step_over_load(self):
# We can't find a breakpoint location for d_init before launching because
# executable dependencies are resolved relative to the debuggers PWD. Bug?
+ # The remote lldb server resolves the executable dependencies correctly.
@expectedFailureAll(
- oslist=["freebsd", "linux", "netbsd"], triple=no_match("aarch64-.*-android")
+ oslist=["freebsd", "linux", "netbsd"], triple=no_match("aarch64-.*-android"), remote=False
)
@expectedFailureAll(oslist=["windows"], archs=["aarch64"])
def test_static_init_during_load(self):
``````````
</details>
https://github.com/llvm/llvm-project/pull/98690
More information about the lldb-commits
mailing list