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
…#98690)

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 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.

Test Plan: 

Reviewers: 

Subscribers: 

Tasks: 

Tags: 


Differential Revision: https://phabricator.intern.facebook.com/D60251565
  • Loading branch information
dzhidzhoev authored and yuxuanchen1997 committed Jul 25, 2024
1 parent d5905bc commit 59d8371
Show file tree
Hide file tree
Showing 2 changed files with 8 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
8 changes: 5 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,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):
Expand Down

0 comments on commit 59d8371

Please sign in to comment.