summaryrefslogtreecommitdiffstats
path: root/disassembler/disassembler.cc
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2014-09-14 20:34:17 -0700
committerBrian Carlstrom <bdc@google.com>2014-09-16 12:50:08 -0700
commit2cbaccb67e22c0b313a9785bfc65bcb4b25d0676 (patch)
treedaeb766e19880b651fd9c4a719c9a07dd7d4bd0e /disassembler/disassembler.cc
parentbace0378d720a1d2938ec7f6be17e2814671d20a (diff)
downloadandroid_art-2cbaccb67e22c0b313a9785bfc65bcb4b25d0676.tar.gz
android_art-2cbaccb67e22c0b313a9785bfc65bcb4b25d0676.tar.bz2
android_art-2cbaccb67e22c0b313a9785bfc65bcb4b25d0676.zip
Avoid printing absolute addresses in oatdump
- Added printing of OatClass offsets. - Added printing of OatMethod offsets. - Added bounds checks for code size size, code size, mapping table, gc map, vmap table. - Added sanity check of 100k for code size. - Added partial disassembly of questionable code. - Added --no-disassemble to disable disassembly. - Added --no-dump:vmap to disable vmap dumping. - Reordered OatMethod info to be in file order. Bug: 15567083 (cherry picked from commit 34fa79ece5b3a1940d412cd94dbdcc4225aae72f) Change-Id: I2c368f3b81af53b735149a866f3e491c9ac33fb8
Diffstat (limited to 'disassembler/disassembler.cc')
-rw-r--r--disassembler/disassembler.cc22
1 files changed, 16 insertions, 6 deletions
diff --git a/disassembler/disassembler.cc b/disassembler/disassembler.cc
index 41ee21365e..c97bf64c5d 100644
--- a/disassembler/disassembler.cc
+++ b/disassembler/disassembler.cc
@@ -19,6 +19,7 @@
#include <iostream>
#include "base/logging.h"
+#include "base/stringprintf.h"
#include "disassembler_arm.h"
#include "disassembler_arm64.h"
#include "disassembler_mips.h"
@@ -26,21 +27,30 @@
namespace art {
-Disassembler* Disassembler::Create(InstructionSet instruction_set) {
+Disassembler* Disassembler::Create(InstructionSet instruction_set, DisassemblerOptions* options) {
if (instruction_set == kArm || instruction_set == kThumb2) {
- return new arm::DisassemblerArm();
+ return new arm::DisassemblerArm(options);
} else if (instruction_set == kArm64) {
- return new arm64::DisassemblerArm64();
+ return new arm64::DisassemblerArm64(options);
} else if (instruction_set == kMips) {
- return new mips::DisassemblerMips();
+ return new mips::DisassemblerMips(options);
} else if (instruction_set == kX86) {
- return new x86::DisassemblerX86(false);
+ return new x86::DisassemblerX86(options, false);
} else if (instruction_set == kX86_64) {
- return new x86::DisassemblerX86(true);
+ return new x86::DisassemblerX86(options, true);
} else {
UNIMPLEMENTED(FATAL) << "no disassembler for " << instruction_set;
return NULL;
}
}
+std::string Disassembler::FormatInstructionPointer(const uint8_t* begin) {
+ if (disassembler_options_->absolute_addresses_) {
+ return StringPrintf("%p", begin);
+ } else {
+ size_t offset = begin - disassembler_options_->base_address_;
+ return StringPrintf("0x%08zx", offset);
+ }
+}
+
} // namespace art