From d19f7eee06b7e80d58529a61372f5765a7c2367d Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Mon, 21 Mar 2011 17:28:04 +0000 Subject: * arm-tdep.c (arm_analyze_prologue): Do not abort parsing when encountering a load via a non-SP register. --- gdb/ChangeLog | 5 +++++ gdb/arm-tdep.c | 26 +++++++++----------------- 2 files changed, 14 insertions(+), 17 deletions(-) (limited to 'gdb') diff --git a/gdb/ChangeLog b/gdb/ChangeLog index efc3aa2..98b39a1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2011-03-21 Ulrich Weigand + + * arm-tdep.c (arm_analyze_prologue): Do not abort parsing when + encountering a load via a non-SP register. + 2011-03-21 Ulrich Weigand * tramp-frame.c (tramp_frame_prepend_unwinder): Set stop_reason diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 754c431..480015d 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -1856,23 +1856,15 @@ arm_analyze_prologue (struct gdbarch *gdbarch, else if (arm_instruction_changes_pc (insn)) /* Don't scan past anything that might change control flow. */ break; - else if ((insn & 0xfe500000) == 0xe8100000) /* ldm */ - { - /* Ignore block loads from the stack, potentially copying - parameters from memory. */ - if (pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM)) - continue; - else - break; - } - else if ((insn & 0xfc500000) == 0xe4100000) - { - /* Similarly ignore single loads from the stack. */ - if (pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM)) - continue; - else - break; - } + else if ((insn & 0xfe500000) == 0xe8100000 /* ldm */ + && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM)) + /* Ignore block loads from the stack, potentially copying + parameters from memory. */ + continue; + else if ((insn & 0xfc500000) == 0xe4100000 + && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM)) + /* Similarly ignore single loads from the stack. */ + continue; else if ((insn & 0xffff0ff0) == 0xe1a00000) /* MOV Rd, Rm. Skip register copies, i.e. saves to another register instead of the stack. */ -- cgit v1.1