diff options
Diffstat (limited to 'disassembler/disassembler.h')
| -rw-r--r-- | disassembler/disassembler.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/disassembler/disassembler.h b/disassembler/disassembler.h index 966ee3ac89..b08031587f 100644 --- a/disassembler/disassembler.h +++ b/disassembler/disassembler.h @@ -31,16 +31,23 @@ class DisassemblerOptions { // Should the disassembler print absolute or relative addresses. const bool absolute_addresses_; - // Base addess for calculating relative code offsets when absolute_addresses_ is false. + // Base address for calculating relative code offsets when absolute_addresses_ is false. const uint8_t* const base_address_; + // End address (exclusive); + const uint8_t* const end_address_; + // If set, the disassembler is allowed to look at load targets in literal // pools. const bool can_read_literals_; - DisassemblerOptions(bool absolute_addresses, const uint8_t* base_address, + DisassemblerOptions(bool absolute_addresses, + const uint8_t* base_address, + const uint8_t* end_address, bool can_read_literals) - : absolute_addresses_(absolute_addresses), base_address_(base_address), + : absolute_addresses_(absolute_addresses), + base_address_(base_address), + end_address_(end_address), can_read_literals_(can_read_literals) {} private: @@ -63,6 +70,10 @@ class Disassembler { // Dump instructions within a range. virtual void Dump(std::ostream& os, const uint8_t* begin, const uint8_t* end) = 0; + const DisassemblerOptions* GetDisassemblerOptions() const { + return disassembler_options_; + } + protected: explicit Disassembler(DisassemblerOptions* disassembler_options) : disassembler_options_(disassembler_options) { @@ -80,6 +91,9 @@ static inline bool HasBitSet(uint32_t value, uint32_t bit) { return (value & (1 << bit)) != 0; } +extern "C" +Disassembler* create_disassembler(InstructionSet instruction_set, DisassemblerOptions* options); + } // namespace art #endif // ART_DISASSEMBLER_DISASSEMBLER_H_ |