[PATCH] D85024: [llvm-objdump] Implement --prefix option

Vinicius Tinti via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 31 18:55:06 PDT 2020


tinti updated this revision to Diff 282363.
tinti added a comment.

Expected to fix failed test case on Windows.

Use `source-interleave-x86_64.test` as base implementation for the test case.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85024/new/

https://reviews.llvm.org/D85024

Files:
  llvm/test/tools/llvm-objdump/X86/source-interleave-absolute-paths-with-prefix.test
  llvm/tools/llvm-objdump/llvm-objdump.cpp
  llvm/tools/llvm-objdump/llvm-objdump.h


Index: llvm/tools/llvm-objdump/llvm-objdump.h
===================================================================
--- llvm/tools/llvm-objdump/llvm-objdump.h
+++ llvm/tools/llvm-objdump/llvm-objdump.h
@@ -48,6 +48,7 @@
 extern cl::opt<bool> SymbolTable;
 extern cl::opt<std::string> TripleName;
 extern cl::opt<bool> UnwindInfo;
+extern cl::opt<std::string> Prefix;
 
 extern StringSet<> FoundSectionSet;
 
Index: llvm/tools/llvm-objdump/llvm-objdump.cpp
===================================================================
--- llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -348,6 +348,10 @@
          cl::cat(ObjdumpCat));
 static cl::alias WideShort("w", cl::Grouping, cl::aliasopt(Wide));
 
+cl::opt<std::string>
+    objdump::Prefix("prefix", cl::desc("Add PREFIX to absolute paths for -S"),
+                    cl::cat(ObjdumpCat));
+
 enum DebugVarsFormat {
   DVDisabled,
   DVUnicode,
@@ -1026,6 +1030,18 @@
     }
   }
 
+  // GNU's objdump compatible `--prefix`
+  if (!Prefix.empty()) {
+    if (llvm::sys::path::is_absolute(LineInfo.FileName)) {
+      llvm::SmallString<128> FilePath(
+          llvm::sys::path::root_path(LineInfo.FileName));
+      llvm::sys::path::append(
+          FilePath, Prefix, llvm::sys::path::relative_path(LineInfo.FileName));
+
+      LineInfo.FileName = std::string(FilePath);
+    }
+  }
+
   if (PrintLines)
     printLines(OS, LineInfo, Delimiter, LVP);
   if (PrintSource)
Index: llvm/test/tools/llvm-objdump/X86/source-interleave-absolute-paths-with-prefix.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objdump/X86/source-interleave-absolute-paths-with-prefix.test
@@ -0,0 +1,13 @@
+# RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g" %p/Inputs/source-interleave.ll > %t.ll
+# RUN: llc -o %t.o -filetype=obj -mtriple=x86_64-pc-linux %t.ll
+; RUN: llvm-objdump --source %t.o 2>&1 | FileCheck %s
+
+; CHECK: 0000000000000000 <foo>:
+; CHECK-NEXT: ; int foo() {
+; CHECK-NEXT:       0: 55                            pushq   %rbp
+
+; RUN: llvm-objdump --prefix myprefix --source %t.o 2>&1 | FileCheck %s --check-prefix CHECK-PREFIX
+
+; CHECK-PREFIX: 0000000000000000 <foo>:
+; CHECK-PREFIX-NEXT: warning: '{{.*}}.o': failed to find source /myprefix{{.*}}/source-interleave-x86_64.c
+; CHECK-PREFIX-NEXT:       0: 55                            pushq   %rbp


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85024.282363.patch
Type: text/x-patch
Size: 2403 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200801/07a9cbb4/attachment.bin>


More information about the llvm-commits mailing list