[Lldb-commits] [PATCH] D65611: [Driver] Expand the target in the driver.

Jonas Devlieghere via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 1 15:19:15 PDT 2019

JDevlieghere created this revision.
JDevlieghere added reviewers: davide, labath, jingham, clayborg, mgorny.
JDevlieghere added a project: LLDB.
Herald added a subscriber: teemperor.

When invoking lldb on the command line with a binary, lldb will construct a command stream to create the target.

  $ lldb ./foo
  (lldb) target create "./foo"
  Current executable set to './foo' (x86_64).

This poses a problem for reproducers when the path to the binary is a relative path. When the reproducer is replayed form a different location, the path gets resolved to a different absolute path, unknown to the VFS.

This patch changes the behavior of the driver to resolve the target's path before constructing the `target create` command.




Index: lldb/tools/driver/Driver.cpp
--- lldb/tools/driver/Driver.cpp
+++ lldb/tools/driver/Driver.cpp
@@ -533,14 +533,22 @@
   if (!m_option_data.m_repl) {
     const size_t num_args = m_option_data.m_args.size();
     if (num_args > 0) {
+      char target_path[128];
       char arch_name[64];
+      // Resolve target.
+      SBFileSpec target(m_option_data.m_args[0].c_str());
+      target.ResolveExecutableLocation();
+      target.GetPath(target_path, sizeof(target_path));
       if (lldb::SBDebugger::GetDefaultArchitecture(arch_name,
-                                                   sizeof(arch_name)))
+                                                   sizeof(arch_name))) {
         commands_stream.Printf("target create --arch=%s %s", arch_name,
-                               EscapeString(m_option_data.m_args[0]).c_str());
-      else
+                               EscapeString(target_path).c_str());
+      } else {
         commands_stream.Printf("target create %s",
-                               EscapeString(m_option_data.m_args[0]).c_str());
+                               EscapeString(target_path).c_str());
+      }
       if (!m_option_data.m_core_file.empty()) {
         commands_stream.Printf(" --core %s",
Index: lldb/packages/Python/lldbsuite/test/lang/objc/objc-dynamic-value/TestObjCDynamicValue.py
--- lldb/packages/Python/lldbsuite/test/lang/objc/objc-dynamic-value/TestObjCDynamicValue.py
+++ lldb/packages/Python/lldbsuite/test/lang/objc/objc-dynamic-value/TestObjCDynamicValue.py
@@ -35,7 +35,6 @@
-    @expectedFailureDarwin("llvm.org/pr20271 rdar://18684107")
     def test_get_objc_dynamic_vals(self):
         """Test fetching ObjC dynamic values."""
         if self.getArchitecture() == 'i386':
Index: lldb/lit/Driver/TestTarget.test
--- /dev/null
+++ lldb/lit/Driver/TestTarget.test
@@ -0,0 +1,7 @@
+# Make sure lldb resolves the target path.
+# RUN: mkdir -p %t/foo
+# RUN: cd %t/foo
+# RUN: %clang %p/Inputs/hello.c -g -o a.out
+# RUN: %lldb -b a.out | FileCheck %s
+# CHECK: target create "{{.*}}foo{{[/\\\\]+}}a.out"

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65611.212911.patch
Type: text/x-patch
Size: 2347 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20190801/acd039d5/attachment.bin>

More information about the lldb-commits mailing list