https://github.com/dzhidzhoev created https://github.com/llvm/llvm-project/pull/98690
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. >From 98b75927878e35ca556ecbbecb1125621a63fea9 Mon Sep 17 00:00:00 2001 From: Vladislav Dzhidzhoev <vdzhidzh...@accesssoftek.com> Date: Tue, 23 Apr 2024 05:44:49 +0000 Subject: [PATCH] [LLDB] Make 'process load' take remote os path delimiter into account Currently, if we execute 'process load' with remote debugging, it uses host's path delimiter to lookup files on 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. --- lldb/source/Commands/CommandObjectProcess.cpp | 3 ++- .../test/API/functionalities/load_unload/TestLoadUnload.py | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) 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): _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits