diff options
author | Vinicius Tinti <viniciustinti@gmail.com> | 2020-10-16 15:35:19 +0100 |
---|---|---|
committer | Renato Golin <rengolin@systemcall.eu> | 2020-10-16 17:50:42 +0100 |
commit | e95f9a23fad52ffa3a5b6466c7dcdf910d099956 (patch) | |
tree | 36f0aee9f0648d96f9f77fbc18f2372b03b736d0 /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 3d4bba302d2460b9ac6463ef920c301f1f40fb41 (diff) | |
download | llvm-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.cpp | 15 |
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; |