aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorVinicius Tinti <viniciustinti@gmail.com>2020-10-16 15:35:19 +0100
committerRenato Golin <rengolin@systemcall.eu>2020-10-16 17:50:42 +0100
commite95f9a23fad52ffa3a5b6466c7dcdf910d099956 (patch)
tree36f0aee9f0648d96f9f77fbc18f2372b03b736d0 /llvm/tools/llvm-objdump/llvm-objdump.cpp
parent3d4bba302d2460b9ac6463ef920c301f1f40fb41 (diff)
downloadllvm-e95f9a23fad52ffa3a5b6466c7dcdf910d099956.zip
llvm-e95f9a23fad52ffa3a5b6466c7dcdf910d099956.tar.gz
llvm-e95f9a23fad52ffa3a5b6466c7dcdf910d099956.tar.bz2
[llvm-objdump] Implement --prefix option
The prefix given to --prefix will be added to GNU absolute paths when used with --source option (source interleaved with the disassembly). This matches GNU's objdump behavior. GNU and C++17 rules for absolute paths are different. Differential Revision: https://reviews.llvm.org/D85024 Fixes PR46368. Differential Revision: https://reviews.llvm.org/D85024
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index d57ea8e..bc13b26 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -353,6 +353,10 @@ static cl::opt<bool>
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"),
+ cl::cat(ObjdumpCat));
+
enum DebugVarsFormat {
DVDisabled,
DVUnicode,
@@ -1031,6 +1035,13 @@ void SourcePrinter::printSourceLine(formatted_raw_ostream &OS,
}
}
+ if (!Prefix.empty() && sys::path::is_absolute_gnu(LineInfo.FileName)) {
+ SmallString<128> FilePath;
+ sys::path::append(FilePath, Prefix, LineInfo.FileName);
+
+ LineInfo.FileName = std::string(FilePath);
+ }
+
if (PrintLines)
printLines(OS, LineInfo, Delimiter, LVP);
if (PrintSource)
@@ -2961,6 +2972,10 @@ int main(int argc, char **argv) {
if (InputFilenames.empty())
InputFilenames.push_back("a.out");
+ // Removes trailing separators from prefix.
+ while (!Prefix.empty() && sys::path::is_separator(Prefix.back()))
+ Prefix.pop_back();
+
if (AllHeaders)
ArchiveHeaders = FileHeaders = PrivateHeaders = Relocations =
SectionHeaders = SymbolTable = true;