// TODO(VIXL): Make VIXL compile cleanly with -Wshadow, -Wdeprecated-declarations. #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #include"aarch64/decoder-aarch64.h" #include"aarch64/disasm-aarch64.h" #pragma GCC diagnostic pop
namespace art { namespace arm64 {
class CustomDisassembler final : public vixl::aarch64::Disassembler { public: explicit CustomDisassembler(DisassemblerOptions* options)
: vixl::aarch64::Disassembler(),
read_literals_(options->can_read_literals_),
base_address_(options->base_address_),
end_address_(options->end_address_),
options_(options) { if (!options->absolute_addresses_) {
MapCodeAddress(0, reinterpret_cast<const vixl::aarch64::Instruction*>(options->base_address_));
}
}
// Use register aliases in the disassembly. void AppendRegisterNameToOutput(const vixl::aarch64::Instruction* instr, const vixl::aarch64::CPURegister& reg) override;
// Overriding to print the address with trailing zeroes e.g. 0x00004074 instead of 0x4074. void AppendCodeRelativeAddressToOutput(const vixl::aarch64::Instruction* instr, constvoid* addr) override;
// Intercepts the instruction flow captured by the parent method, // to specially instrument for particular instruction types. void Visit(vixl::aarch64::Metadata* metadata, const vixl::aarch64::Instruction* instr) override;
private: // Improve the disassembly of literal load instructions. void VisitLoadLiteralInstr(const vixl::aarch64::Instruction* instr);
// Improve the disassembly of thread offset. void VisitLoadStoreUnsignedOffsetInstr(const vixl::aarch64::Instruction* instr);
// Improve the disassembly of branch to thunk jumping to pointer from thread entrypoint. void VisitUnconditionalBranchInstr(const vixl::aarch64::Instruction* instr);
// 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) constbool read_literals_;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.