* arm-tdep.c (arm_analyze_prologue): Do not abort parsing when
authorUlrich Weigand <uweigand@de.ibm.com>
Mon, 21 Mar 2011 17:28:04 +0000 (17:28 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Mon, 21 Mar 2011 17:28:04 +0000 (17:28 +0000)
encountering a load via a non-SP register.

gdb/ChangeLog
gdb/arm-tdep.c

index efc3aa23f0c6bf3ba3552ab2ec37f82724b8b8fd..98b39a15121b26be874c85eb3461b715a3bf8163 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-21  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+       * arm-tdep.c (arm_analyze_prologue): Do not abort parsing when
+       encountering a load via a non-SP register.
+
 2011-03-21  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * tramp-frame.c (tramp_frame_prepend_unwinder): Set stop_reason
index 754c431fabd61e8f688e8edd997b2f853753f0d7..480015d01c6ec8f98809fc95c80f40ce5084b772 100644 (file)
@@ -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.  */