aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
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;