summaryrefslogtreecommitdiffstats
path: root/src/disassembler_arm.cc
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2012-04-09 22:51:43 -0700
committerIan Rogers <irogers@google.com>2012-04-09 22:51:43 -0700
commit5b9b1bc168e1198e287cf013254c89389efca70d (patch)
treeb14c088555ea020e4af8645b4a862f164a88f9d8 /src/disassembler_arm.cc
parentd3fb569391be72184248a78bd1d920ecf5bc3b55 (diff)
downloadart-5b9b1bc168e1198e287cf013254c89389efca70d.zip
art-5b9b1bc168e1198e287cf013254c89389efca70d.tar.gz
art-5b9b1bc168e1198e287cf013254c89389efca70d.tar.bz2
Disassemble PC relative literals.
Change-Id: I9b60e0efc9e311c085abb60dc867407ee17dc61b
Diffstat (limited to 'src/disassembler_arm.cc')
-rw-r--r--src/disassembler_arm.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/disassembler_arm.cc b/src/disassembler_arm.cc
index cb5bd48..57fcec3 100644
--- a/src/disassembler_arm.cc
+++ b/src/disassembler_arm.cc
@@ -696,6 +696,10 @@ size_t DisassemblerArm::DumpThumb32(std::ostream& os, const uint8_t* instr_ptr)
if (Rn.r == 9) {
args << " ; ";
Thread::DumpThreadOffset(args, imm12, 4);
+ } else if (Rn.r == 15) {
+ intptr_t lit_adr = reinterpret_cast<intptr_t>(instr_ptr);
+ lit_adr = RoundDown(lit_adr, 4) + 4 + imm12;
+ args << " ; " << reinterpret_cast<void*>(*reinterpret_cast<int32_t*>(lit_adr));
}
} else if (op4 == 0) {
// LDR.W Rt, [Rn, Rm{, LSL #imm2}] - 111 11 00 00 101 nnnn tttt 000000iimmmm