2003-09-29 Jerome Guitton <guitton@act-europe.fr>
authorJerome Guitton <guitton@adacore.com>
Mon, 29 Sep 2003 13:27:39 +0000 (13:27 +0000)
committerJerome Guitton <guitton@adacore.com>
Mon, 29 Sep 2003 13:27:39 +0000 (13:27 +0000)
* arm-tdep.c (arm_make_prologue_cache): Use trad_frame_addr_p to
test if the register has been saved on the stack.
(arm_scan_prologue_cache): When analysing the instruction
"str lr, [sp, #-4]", save the address where lr has been stored.

gdb/ChangeLog
gdb/arm-tdep.c

index e20eab28c10002324dbbb49689458768b0ae70b0..2a6205c821f3d9558899a8e1b42ee8b5ad020e71 100644 (file)
@@ -1,3 +1,10 @@
+2003-09-29  Jerome Guitton  <guitton@act-europe.fr>
+
+       * arm-tdep.c (arm_make_prologue_cache): Use trad_frame_addr_p to
+       test if the register has been saved on the stack.
+       (arm_scan_prologue_cache): When analysing the instruction
+       "str lr, [sp, #-4]", save the address where lr has been stored.
+
 2003-09-28  Andrew Cagney  <cagney@redhat.com>
 
        * frame.c (frame_read_unsigned_register): Delete function.
index 85e8258e6dd5f2ee0351e0f94855feb68cc0e77f..102c4bada18d080bc7925bd3ff6e3f1cb87e5865 100644 (file)
@@ -845,7 +845,8 @@ arm_scan_prologue (struct frame_info *next_frame, struct arm_prologue_cache *cac
        }
       else if (insn == 0xe52de004)     /* str lr, [sp, #-4]! */
        {
-         /* Function is frameless: extra_info defaults OK?  */
+         sp_offset -= 4;
+         cache->saved_regs[ARM_LR_REGNUM].addr = sp_offset;
          continue;
        }
       else if ((insn & 0xffff0000) == 0xe92d0000)
@@ -967,7 +968,7 @@ arm_make_prologue_cache (struct frame_info *next_frame)
   /* Calculate actual addresses of saved registers using offsets
      determined by arm_scan_prologue.  */
   for (reg = 0; reg < NUM_REGS; reg++)
-    if (cache->saved_regs[reg].addr != 0)
+    if (trad_frame_addr_p (cache->saved_regs, reg))
       cache->saved_regs[reg].addr += cache->prev_sp;
 
   return cache;