summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorColin LeMahieu <colinl@codeaurora.org>2015-07-23 20:58:49 +0000
committerColin LeMahieu <colinl@codeaurora.org>2015-07-23 20:58:49 +0000
commitf34933e425a9b04e837766b47719892d4352f4be (patch)
treea67c1b8ef01ec0d1935c330e8041fe169361821f /llvm
parent878c144f8a32336daa2c0124017ec707924cfcc0 (diff)
downloadbcm5719-llvm-f34933e425a9b04e837766b47719892d4352f4be.tar.gz
bcm5719-llvm-f34933e425a9b04e837766b47719892d4352f4be.zip
[llvm-objdump] Add -D and --disassemble-all flags that attempt disassembly on all sections instead of just text sections.
llvm-svn: 243041
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/tools/llvm-objdump/disassemble-data.test6
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp13
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.h3
3 files changed, 19 insertions, 3 deletions
diff --git a/llvm/test/tools/llvm-objdump/disassemble-data.test b/llvm/test/tools/llvm-objdump/disassemble-data.test
new file mode 100644
index 00000000000..97f11c12f53
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/disassemble-data.test
@@ -0,0 +1,6 @@
+// This test checks that -D disassembles from a data section
+// RUN: llvm-mc -filetype=obj -o - %s | llvm-objdump -D - | FileCheck %s
+
+// CHECK: Disassembly of section .data:
+.data
+.word 0x0 \ No newline at end of file
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 275eb9c6a45..91626c15d87 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -70,7 +70,14 @@ llvm::Disassemble("disassemble",
cl::desc("Display assembler mnemonics for the machine instructions"));
static cl::alias
Disassembled("d", cl::desc("Alias for --disassemble"),
- cl::aliasopt(Disassemble));
+ cl::aliasopt(Disassemble));
+
+cl::opt<bool>
+llvm::DisassembleAll("disassemble-all",
+ cl::desc("Display assembler mnemonics for the machine instructions"));
+static cl::alias
+DisassembleAlld("D", cl::desc("Alias for --disassemble-all"),
+ cl::aliasopt(DisassembleAll));
cl::opt<bool>
llvm::Relocations("r", cl::desc("Display the relocation entries in the file"));
@@ -837,7 +844,7 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
}
for (const SectionRef &Section : Obj->sections()) {
- if (!Section.isText() || Section.isVirtual())
+ if (!DisassembleAll && (!Section.isText() || Section.isVirtual()))
continue;
uint64_t SectionAddr = Section.getAddress();
@@ -1514,6 +1521,8 @@ int main(int argc, char **argv) {
if (InputFilenames.size() == 0)
InputFilenames.push_back("a.out");
+ if (DisassembleAll)
+ Disassemble = true;
if (!Disassemble
&& !Relocations
&& !SectionHeaders
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h
index eb10d8344f7..0fa2d29f547 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.h
+++ b/llvm/tools/llvm-objdump/llvm-objdump.h
@@ -26,7 +26,8 @@ extern cl::opt<std::string> ArchName;
extern cl::opt<std::string> MCPU;
extern cl::list<std::string> MAttrs;
extern cl::list<std::string> DumpSections;
-extern cl::opt<bool> Disassemble;
+extern cl::opt<bool> Disassemble;
+extern cl::opt<bool> DisassembleAll;
extern cl::opt<bool> NoShowRawInsn;
extern cl::opt<bool> PrivateHeaders;
extern cl::opt<bool> ExportsTrie;
OpenPOWER on IntegriCloud