[Lldb-commits] [PATCH] D127436: [lldb] Resolve exe location for `target create`
Alvin Wong via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Jun 21 09:28:50 PDT 2022
alvinhochun updated this revision to Diff 438737.
alvinhochun added a comment.
Added Windows-specific test
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127436/new/
https://reviews.llvm.org/D127436
Files:
lldb/source/Commands/CommandObjectTarget.cpp
lldb/source/Target/TargetList.cpp
lldb/test/Shell/Commands/command-target-create-resolve-exe.test
Index: lldb/test/Shell/Commands/command-target-create-resolve-exe.test
===================================================================
--- /dev/null
+++ lldb/test/Shell/Commands/command-target-create-resolve-exe.test
@@ -0,0 +1,28 @@
+# REQUIRES: system-windows
+
+## This checks that when starting lldb (or using `target create`) with a
+## program name which is on $PATH, or not specify the .exe suffix of a program
+## in the working directory on Windows, lldb can still detect the target
+## architecture correctly instead of producing an error.
+
+# RUN: mkdir -p "%t.dir"
+# RUN: %clang_host -g0 -O0 %S/Inputs/main.c -o %t.dir/testmain.exe
+
+## Test with full path to exe
+# RUN: %lldb %t.dir/testmain.exe -b | FileCheck %s
+
+## Test with exe on path, with .exe suffix
+# RUN: env "PATH=%t.dir;%PATH%" %lldb testmain.exe -b | FileCheck %s
+
+## Test with exe on path, without .exe suffix
+# RUN: env "PATH=%t.dir;%PATH%" %lldb testmain -b | FileCheck %s
+
+## Test in cwd, with .exe suffix
+# RUN: cd "%t.dir" && %lldb testmain.exe -b | FileCheck %s
+
+## Test in cwd, without .exe suffix
+# RUN: cd "%t.dir" && %lldb testmain -b | FileCheck %s
+
+# CHECK-LABEL: target create
+# CHECK-NEXT: Current executable set to '{{.*[/\\]}}testmain.exe'
+# CHECK-NOT: Error
Index: lldb/source/Target/TargetList.cpp
===================================================================
--- lldb/source/Target/TargetList.cpp
+++ lldb/source/Target/TargetList.cpp
@@ -121,6 +121,14 @@
if (!user_exe_path.empty()) {
ModuleSpec module_spec(FileSpec(user_exe_path, FileSpec::Style::native));
FileSystem::Instance().Resolve(module_spec.GetFileSpec());
+
+ // Try to resolve the exe based on PATH and/or platform-specific suffixes,
+ // but only if using the host platform.
+ if (platform_sp->IsHost() &&
+ !FileSystem::Instance().Exists(module_spec.GetFileSpec()))
+ FileSystem::Instance().ResolveExecutableLocation(
+ module_spec.GetFileSpec());
+
// Resolve the executable in case we are given a path to a application
// bundle like a .app bundle on MacOSX.
Host::ResolveExecutableInBundle(module_spec.GetFileSpec());
Index: lldb/source/Commands/CommandObjectTarget.cpp
===================================================================
--- lldb/source/Commands/CommandObjectTarget.cpp
+++ lldb/source/Commands/CommandObjectTarget.cpp
@@ -299,12 +299,6 @@
const char *file_path = command.GetArgumentAtIndex(0);
LLDB_SCOPED_TIMERF("(lldb) target create '%s'", file_path);
- FileSpec file_spec;
-
- if (file_path) {
- file_spec.SetFile(file_path, FileSpec::Style::native);
- FileSystem::Instance().Resolve(file_spec);
- }
bool must_set_platform_path = false;
@@ -333,6 +327,18 @@
PlatformSP platform_sp = target_sp->GetPlatform();
+ FileSpec file_spec;
+ if (file_path) {
+ file_spec.SetFile(file_path, FileSpec::Style::native);
+ FileSystem::Instance().Resolve(file_spec);
+
+ // Try to resolve the exe based on PATH and/or platform-specific
+ // suffixes, but only if using the host platform.
+ if (platform_sp && platform_sp->IsHost() &&
+ !FileSystem::Instance().Exists(file_spec))
+ FileSystem::Instance().ResolveExecutableLocation(file_spec);
+ }
+
if (remote_file) {
if (platform_sp) {
// I have a remote file.. two possible cases
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127436.438737.patch
Type: text/x-patch
Size: 3454 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220621/c352946a/attachment.bin>
More information about the lldb-commits
mailing list