summaryrefslogtreecommitdiff
path: root/disassembler/disassembler.h
diff options
context:
space:
mode:
authorAart Bik <ajcbik@google.com>2016-05-11 10:30:47 -0700
committerAart Bik <ajcbik@google.com>2016-05-12 10:01:08 -0700
commitd3059e77818a058513ed92557160bdb6d5102b67 (patch)
treecff82528de3dd71104d9b3fa4e1a57f2c9fc81dc /disassembler/disassembler.h
parentb0fca360a081eff1a44c6f055c628e2dba44c003 (diff)
Fix oatdump crash on arm64/arm code.
Also adds 16 bit literal information. Rationale: When "run-away" instructions are disassembled, the literal addresses may go out of range, causing oatdump to crash. This CL guards memory access against the full memory range allocated to assembly instructions and data (it is possible but not really necessary to refine this a bit). Out of range arguments are now displayed as (?) to denote the issue, which is a lot nicer than crashing. BUG=28670871 Change-Id: I51e9b6a6a99162546fe31059f14278e8980451c2
Diffstat (limited to 'disassembler/disassembler.h')
-rw-r--r--disassembler/disassembler.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/disassembler/disassembler.h b/disassembler/disassembler.h
index b99e5c2df4..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: