aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
authorIgor Kudrin <ikudrin@accesssoftek.com>2019-02-26 12:15:14 +0000
committerIgor Kudrin <ikudrin@accesssoftek.com>2019-02-26 12:15:14 +0000
commit2d3faad706c81814abc5e4080df38c4bccde1d48 (patch)
tree9a11b749881378558b3eabd238ac516e787b8b01 /llvm/tools/llvm-objdump/llvm-objdump.cpp
parente42be1eae230d0ff3f650fcea7826da4842e7371 (diff)
downloadllvm-2d3faad706c81814abc5e4080df38c4bccde1d48.zip
llvm-2d3faad706c81814abc5e4080df38c4bccde1d48.tar.gz
llvm-2d3faad706c81814abc5e4080df38c4bccde1d48.tar.bz2
[llvm-objdump] Implement -Mreg-names-raw/-std options.
The --disassembler-options, or -M, are used to customize the disassembler and affect its output. The two implemented options allow selecting register names on ARM: * With -Mreg-names-raw, the disassembler uses rNN for all registers. * With -Mreg-names-std it prints sp, lr and pc for r13, r14 and r15, which is the default behavior of llvm-objdump. Differential Revision: https://reviews.llvm.org/D57680 llvm-svn: 354870
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index e9d1545..914789f 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -293,6 +293,15 @@ cl::alias DisassembleZeroesShort("z",
cl::NotHidden, cl::Grouping,
cl::aliasopt(DisassembleZeroes));
+static cl::list<std::string>
+ DisassemblerOptions("disassembler-options",
+ cl::desc("Pass target specific disassembler options"),
+ cl::value_desc("options"), cl::CommaSeparated);
+static cl::alias
+ DisassemblerOptionsShort("M", cl::desc("Alias for --disassembler-options"),
+ cl::NotHidden, cl::Prefix, cl::CommaSeparated,
+ cl::aliasopt(DisassemblerOptions));
+
static StringRef ToolName;
typedef std::vector<std::tuple<uint64_t, StringRef, uint8_t>> SectionSymbolsTy;
@@ -1473,6 +1482,10 @@ static void disassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
PrettyPrinter &PIP = selectPrettyPrinter(Triple(TripleName));
SourcePrinter SP(Obj, TheTarget->getName());
+ for (StringRef Opt : DisassemblerOptions)
+ if (!IP->applyTargetSpecificCLOption(Opt))
+ error("Unrecognized disassembler option: " + Opt);
+
disassembleObject(TheTarget, Obj, Ctx, DisAsm.get(), MIA.get(), IP.get(),
STI.get(), PIP, SP, InlineRelocs);
}