Dump maps inline in disassembled code.

In pursuit of Bug: 7250540, dump mapping and GC map tables inline such
as:

0x607333a8: f8dfe11c    ldr.w   lr, [pc, #284]  ; 0x6076416d
0x607333ac: 1c05        mov     r5, r0
0x607333ae: f8df0144    ldr.w   r0, [pc, #324]  ; 0x6003ba08
0x607333b2: 9a0b        ldr     r2, [sp, #44]
0x607333b4: f04f0b2f    orr     r11, pc, ThumbExpand(47)
0x607333b8: 1c29        mov     r1, r5
0x607333ba: 465b        mov     r3, r11
0x607333bc: 2900        cmp     r1, #0
0x607333be: f0008070    beq.w   +224 (0x607334a2)
0x607333c2: 47f0        blx     lr
suspend point dex PC: 44
GC map objects:  v2 (r7), v3 (r5), v6 ([sp + #84]), v7 (r6)
...

As GC map and mapping tables are inline, don't dump them.
Also dump dex instructions before code.

Change-Id: I9f0c04182a4cda6844027eae22e8151f2827dc99
diff --git a/src/disassembler_arm.cc b/src/disassembler_arm.cc
index dfaacf2..d047f0e 100644
--- a/src/disassembler_arm.cc
+++ b/src/disassembler_arm.cc
@@ -28,6 +28,17 @@
 DisassemblerArm::DisassemblerArm() {
 }
 
+size_t DisassemblerArm::Dump(std::ostream& os, const uint8_t* begin) {
+  if ((reinterpret_cast<intptr_t>(begin) & 1) == 0) {
+    DumpArm(os, begin);
+    return 4;
+  } else {
+    // remove thumb specifier bits
+    begin = reinterpret_cast<const uint8_t*>(reinterpret_cast<uintptr_t>(begin) & ~1);
+    return DumpThumb16(os, begin);
+  }
+}
+
 void DisassemblerArm::Dump(std::ostream& os, const uint8_t* begin, const uint8_t* end) {
   if ((reinterpret_cast<intptr_t>(begin) & 1) == 0) {
     for (const uint8_t* cur = begin; cur < end; cur += 4) {