instructions. Use the PC+4 if the base of the TBB or TBH is the
PC register.
+2010-03-31 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm-tdep.c (thumb_get_next_pc_raw): Correctly detect TBH
+ instructions. Use the PC+4 if the base of the TBB or TBH is the
+ PC register.
+
2010-03-31 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix crash on reading wrong function declaration DWARF.
2010-03-31 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix crash on reading wrong function declaration DWARF.
2010-03-31 Pierre Muller <muller@ics.u-strasbg.fr>
2010-03-31 Pierre Muller <muller@ics.u-strasbg.fr>
- * src/gdb/remote.c (end_thread): ARI fix: Use xstrdup instead of strdup.
+ * src/gdb/remote.c (end_thread): ARI fix: Use xstrdup instead of
+ strdup.
2010-03-30 Keith Seitz <keiths@redhat.com>
2010-03-30 Keith Seitz <keiths@redhat.com>
else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
{
/* TBB. */
else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
{
/* TBB. */
- CORE_ADDR table, offset, length;
+ CORE_ADDR tbl_reg, table, offset, length;
+
+ tbl_reg = bits (inst1, 0, 3);
+ if (tbl_reg == 0x0f)
+ table = pc + 4; /* Regcache copy of PC isn't right yet. */
+ else
+ table = get_frame_register_unsigned (frame, tbl_reg);
- table = get_frame_register_unsigned (frame, bits (inst1, 0, 3));
offset = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
length = 2 * get_frame_memory_unsigned (frame, table + offset, 1);
nextpc = pc_val + length;
}
offset = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
length = 2 * get_frame_memory_unsigned (frame, table + offset, 1);
nextpc = pc_val + length;
}
- else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
+ else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf010)
- CORE_ADDR table, offset, length;
+ CORE_ADDR tbl_reg, table, offset, length;
+
+ tbl_reg = bits (inst1, 0, 3);
+ if (tbl_reg == 0x0f)
+ table = pc + 4; /* Regcache copy of PC isn't right yet. */
+ else
+ table = get_frame_register_unsigned (frame, tbl_reg);
- table = get_frame_register_unsigned (frame, bits (inst1, 0, 3));
offset = 2 * get_frame_register_unsigned (frame, bits (inst2, 0, 3));
length = 2 * get_frame_memory_unsigned (frame, table + offset, 2);
nextpc = pc_val + length;
offset = 2 * get_frame_register_unsigned (frame, bits (inst2, 0, 3));
length = 2 * get_frame_memory_unsigned (frame, table + offset, 2);
nextpc = pc_val + length;