diff options
author | 2016-09-06 13:01:03 +0100 | |
---|---|---|
committer | 2016-09-16 16:39:23 +0100 | |
commit | 29b0cdeb5ef85fcf1ff33ecf09a10803b4b23441 (patch) | |
tree | d8cbdbff1fb4c09c23166fef92fe0483b74ec7b8 /disassembler/disassembler_arm.h | |
parent | 31eb450500ae9d46e1cb253defd35c8d06539d4a (diff) |
ARM: VIXL32: Implement a disassembler.
Test: m test-art-host
Test: m test-art-target
Test: manual comparison with the previous oatdump output
Change-Id: I21ae26406200e455b8b036f53d585ea0b1bd11be
Diffstat (limited to 'disassembler/disassembler_arm.h')
-rw-r--r-- | disassembler/disassembler_arm.h | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/disassembler/disassembler_arm.h b/disassembler/disassembler_arm.h index f870e8ef86..237b577bc2 100644 --- a/disassembler/disassembler_arm.h +++ b/disassembler/disassembler_arm.h @@ -17,32 +17,33 @@ #ifndef ART_DISASSEMBLER_DISASSEMBLER_ARM_H_ #define ART_DISASSEMBLER_DISASSEMBLER_ARM_H_ -#include <vector> +#include <memory> +#include <sstream> +#include "base/macros.h" #include "disassembler.h" namespace art { namespace arm { class DisassemblerArm FINAL : public Disassembler { + class CustomDisassembler; + public: - explicit DisassemblerArm(DisassemblerOptions* options) : Disassembler(options) {} + explicit DisassemblerArm(DisassemblerOptions* options); size_t Dump(std::ostream& os, const uint8_t* begin) OVERRIDE; void Dump(std::ostream& os, const uint8_t* begin, const uint8_t* end) OVERRIDE; private: - void DumpArm(std::ostream& os, const uint8_t* instr); - - // Returns the size of the instruction just decoded - size_t DumpThumb16(std::ostream& os, const uint8_t* instr); - size_t DumpThumb32(std::ostream& os, const uint8_t* instr_ptr); - - void DumpBranchTarget(std::ostream& os, const uint8_t* instr_ptr, int32_t imm32); - void DumpCond(std::ostream& os, uint32_t cond); - void DumpMemoryDomain(std::ostream& os, uint32_t domain); - - std::vector<const char*> it_conditions_; + uintptr_t GetPc(uintptr_t instr_ptr) const { + return GetDisassemblerOptions()->absolute_addresses_ + ? instr_ptr + : instr_ptr - reinterpret_cast<uintptr_t>(GetDisassemblerOptions()->base_address_); + } + + std::ostringstream output_; + std::unique_ptr<CustomDisassembler> disasm_; DISALLOW_COPY_AND_ASSIGN(DisassemblerArm); }; |