Author: Vladislav Dzhidzhoev Date: 2024-07-16T15:21:06+02:00 New Revision: 139df36d89bd731b5180be3cac2b58d4b2082368
URL: https://github.com/llvm/llvm-project/commit/139df36d89bd731b5180be3cac2b58d4b2082368 DIFF: https://github.com/llvm/llvm-project/commit/139df36d89bd731b5180be3cac2b58d4b2082368.diff LOG: [LLDB] Make 'process load' take remote os path delimiter into account (#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 on the remote. 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. Added: Modified: lldb/source/Commands/CommandObjectProcess.cpp lldb/test/API/functionalities/load_unload/TestLoadUnload.py Removed: ################################################################################ diff --git a/lldb/source/Commands/CommandObjectProcess.cpp b/lldb/source/Commands/CommandObjectProcess.cpp index 3587a8f529e4a..8685d5761557b 100644 --- a/lldb/source/Commands/CommandObjectProcess.cpp +++ b/lldb/source/Commands/CommandObjectProcess.cpp @@ -950,11 +950,13 @@ 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..cfbfaff10de3c 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,10 @@ 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"], + 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