From cac395eae4d97d9f59c5e588e4e662f2ae6cdfeb Mon Sep 17 00:00:00 2001 From: Taimoor Mirza Date: Fri, 16 May 2014 11:39:05 +0500 Subject: [PATCH] Fix prologue analysis for ldr.w and ldrd instruction Prologue analysis for ldr.w and ldrd instruction obtains offset from first two bytes that contains opcode of instruction. It should obtain offset from next two bytes that actually contain operands. * arm-tdep.c (thumb_analyze_prologue): Fix offset calculation for ldr.w and ldrd instructions. Signed-off-by: Taimoor Mirza --- gdb/ChangeLog | 5 +++++ gdb/arm-tdep.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f32d1f7dc50..8d90992470c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2014-05-16 Taimoor Mirza + + * arm-tdep.c (thumb_analyze_prologue): Fix offset calculation for + ldr.w and ldrd instructions. + 2014-05-15 Doug Evans * dwarf2read.c (read_structure_type): Delete outdated comments. diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index e3b1c3d58c7..7271777ca0e 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -1071,7 +1071,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, unsigned int constant; CORE_ADDR loc; - offset = bits (insn, 0, 11); + offset = bits (inst2, 0, 11); if (insn & 0x0080) loc = start + 4 + offset; else @@ -1087,7 +1087,7 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, unsigned int constant; CORE_ADDR loc; - offset = bits (insn, 0, 7) << 2; + offset = bits (inst2, 0, 7) << 2; if (insn & 0x0080) loc = start + 4 + offset; else -- 2.30.2