[Lldb-commits] [lldb] [LLDB] Make 'process load' take remote os path delimiter into account (PR #98690)

Vladislav Dzhidzhoev via lldb-commits lldb-commits at lists.llvm.org
Mon Jul 15 09:47:22 PDT 2024


https://github.com/dzhidzhoev updated https://github.com/llvm/llvm-project/pull/98690

>From 377f4ad5c61846adc7048f31d4b092c3e2a7d905 Mon Sep 17 00:00:00 2001
From: Vladislav Dzhidzhoev <vdzhidzhoev at 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             | 4 +++-
 .../API/functionalities/load_unload/TestLoadUnload.py     | 8 +++++---
 2 files changed, 8 insertions(+), 4 deletions(-)

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):



More information about the lldb-commits mailing list