summaryrefslogtreecommitdiff
path: root/disassembler/disassembler.cc
diff options
context:
space:
mode:
author Brian Carlstrom <bdc@google.com> 2014-09-16 21:01:02 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2014-09-16 21:01:02 +0000
commit100d341c52e312a7bef8d9b641b090f71993ee64 (patch)
treead8ad17714cdfab9deb60e9a3986990f81050b39 /disassembler/disassembler.cc
parent0b4f345ddf2919d496eb632bc4d5e7d7926a441a (diff)
parent2cbaccb67e22c0b313a9785bfc65bcb4b25d0676 (diff)
Merge "Avoid printing absolute addresses in oatdump"
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