Skip to content

Commit

Permalink
[LLDB] Make 'process load' take remote os path delimiter into account
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
dzhidzhoev committed Jul 12, 2024
1 parent 73dad7a commit aee177b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
4 changes: 3 additions & 1 deletion lldb/source/Commands/CommandObjectProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
9 changes: 6 additions & 3 deletions lldb/test/API/functionalities/load_unload/TestLoadUnload.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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(
Expand Down Expand Up @@ -405,8 +405,11 @@ 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):
Expand Down

0 comments on commit aee177b

Please sign in to comment.