diff options
author | Ian Rogers <irogers@google.com> | 2014-11-19 21:09:12 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-11-19 21:09:15 +0000 |
commit | 834896de1c955c04d781d2bf8c53573f94ce8c3e (patch) | |
tree | 7152aa7bebe9a82f7b35b3f233aacaf6e3e72ea7 /disassembler/disassembler_arm64.h | |
parent | 7b5f98e0c17785ec64eb291856cd08dcd3d19ce1 (diff) | |
parent | a37d925d405be9f589ac282869a997e73414d859 (diff) |
Merge "Improvements to the ARM64 disassembler."
Diffstat (limited to 'disassembler/disassembler_arm64.h')
-rw-r--r-- | disassembler/disassembler_arm64.h | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/disassembler/disassembler_arm64.h b/disassembler/disassembler_arm64.h index e56fe4f08a..a370b8ded9 100644 --- a/disassembler/disassembler_arm64.h +++ b/disassembler/disassembler_arm64.h @@ -28,9 +28,35 @@ namespace art { namespace arm64 { +class CustomDisassembler FINAL : public vixl::Disassembler { + public: + explicit CustomDisassembler(bool read_literals) : + vixl::Disassembler(), read_literals_(read_literals) {} + + // Use register aliases in the disassembly. + virtual void AppendRegisterNameToOutput(const vixl::Instruction* instr, + const vixl::CPURegister& reg) OVERRIDE; + + // Improve the disassembly of literal load instructions. + virtual void VisitLoadLiteral(const vixl::Instruction* instr) OVERRIDE; + + private: + // Indicate if the disassembler should read data loaded from literal pools. + // This should only be enabled if reading the target of literal loads is safe. + // Here are possible outputs when the option is on or off: + // read_literals_ | disassembly + // true | 0x72681558: 1c000acb ldr s11, pc+344 (addr 0x726816b0) + // false | 0x72681558: 1c000acb ldr s11, pc+344 (addr 0x726816b0) (3.40282e+38) + const bool read_literals_; +}; + class DisassemblerArm64 FINAL : public Disassembler { public: - explicit DisassemblerArm64(DisassemblerOptions* options) : Disassembler(options) { + // TODO: Update this code once VIXL provides the ability to map code addresses + // to disassemble as a different address (the way FormatInstructionPointer() + // does). + explicit DisassemblerArm64(DisassemblerOptions* options) : + Disassembler(options), disasm(options->can_read_literals_) { decoder.AppendVisitor(&disasm); } @@ -39,7 +65,7 @@ class DisassemblerArm64 FINAL : public Disassembler { private: vixl::Decoder decoder; - vixl::Disassembler disasm; + CustomDisassembler disasm; DISALLOW_COPY_AND_ASSIGN(DisassemblerArm64); }; |