summaryrefslogtreecommitdiff
path: root/disassembler/disassembler_arm.h
diff options
context:
space:
mode:
author Anton Kirilov <anton.kirilov@linaro.org> 2016-09-06 13:01:03 +0100
committer Anton Kirilov <anton.kirilov@linaro.org> 2016-09-16 16:39:23 +0100
commit29b0cdeb5ef85fcf1ff33ecf09a10803b4b23441 (patch)
treed8cbdbff1fb4c09c23166fef92fe0483b74ec7b8 /disassembler/disassembler_arm.h
parent31eb450500ae9d46e1cb253defd35c8d06539d4a (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.h27
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);
};