A dirty (but useful) hack to decode thread offsets in disassembly.
Plus more readable x86 formatting.
Also fix a bug decoding LDR (immediate, Thumb) encoding T1.
Change-Id: I95c79d3fb4d912d1ef386b5843abd37d3652a476
diff --git a/src/disassembler_arm.cc b/src/disassembler_arm.cc
index 5211146..a243ecf 100644
--- a/src/disassembler_arm.cc
+++ b/src/disassembler_arm.cc
@@ -20,6 +20,7 @@
#include "logging.h"
#include "stringprintf.h"
+#include "thread.h"
namespace art {
namespace arm {
@@ -661,6 +662,10 @@
uint32_t imm12 = instr & 0xFFF;
opcode << "ldr.w";
args << Rt << ", [" << Rn << ", #" << imm12 << "]";
+ if (Rn.r == 9) {
+ args << " ; ";
+ Thread::DumpThreadOffset(args, imm12, 4);
+ }
} else if (op4 == 0) {
// LDR.W Rt, [Rn, Rm{, LSL #imm2}] - 111 11 00 00 101 nnnn tttt 000000iimmmm
uint32_t imm2 = (instr >> 4) & 0xF;
@@ -875,11 +880,11 @@
//uint16_t opB = (instr >> 9) & 7;
switch (opA) {
case 0x6: {
- // STR Rt, Rn, #imm - 01100 iiiii nnn ttt
- // LDR Rt, Rn, #imm - 01101 iiiii nnn ttt
+ // STR Rt, [Rn, #imm] - 01100 iiiii nnn ttt
+ // LDR Rt, [Rn, #imm] - 01101 iiiii nnn ttt
uint16_t imm5 = (instr >> 6) & 0x1F;
ThumbRegister Rn(instr, 3);
- ThumbRegister Rt(instr, 7);
+ ThumbRegister Rt(instr, 0);
opcode << ((instr & 0x800) == 0 ? "str" : "ldr");
args << Rt << ", [" << Rn << ", #" << (imm5 << 2) << "]";
break;