* arm-tdep.c (thumb_skip_prologue): Take function end addr argument
authorJonathan Larmour <jifl@eCosCentric.com>
Fri, 24 Mar 2000 21:33:35 +0000 (21:33 +0000)
committerJonathan Larmour <jifl@eCosCentric.com>
Fri, 24 Mar 2000 21:33:35 +0000 (21:33 +0000)
        so that we can stop searching for the prologue past the function end
        (arm_skip_prologue): Call thumb_skip_prologue with function end addr

gdb/ChangeLog
gdb/arm-tdep.c

index 41b7a768500344b25fac04d96b0de67d72eac21d..2e8b4cac808f8bce62c6c8e38a5d30a47827934d 100644 (file)
@@ -1,3 +1,9 @@
+2000-03-24  Jonathan Larmour  <jlarmour@redhat.co.uk>
+
+       * arm-tdep.c (thumb_skip_prologue): Take function end addr argument
+       so that we can stop searching for the prologue past the function end
+       (arm_skip_prologue): Call thumb_skip_prologue with function end addr
+
 2000-03-24  Kevin Buettner  <kevinb@redhat.com>
 
        * linux-thread.c, lin-thread.c (save_inferior_pid,
index eaaa19cedfcc2af587de673b02abfcd2f23eb392..7112c4caf71d00a877013222a6ec8241e4b72674 100644 (file)
@@ -328,7 +328,7 @@ arm_frameless_function_invocation (struct frame_info *fi)
    */
 
 static CORE_ADDR
-thumb_skip_prologue (CORE_ADDR pc)
+thumb_skip_prologue (CORE_ADDR pc, CORE_ADDR func_end)
 {
   CORE_ADDR current_pc;
   int findmask = 0;    /* findmask:
@@ -337,7 +337,7 @@ thumb_skip_prologue (CORE_ADDR pc)
                           bit 2 - sub sp, #simm  OR  add sp, #simm  (adjusting of sp)
                        */
 
-  for (current_pc = pc; current_pc < pc + 40; current_pc += 2)
+  for (current_pc = pc; current_pc + 2 < func_end && current_pc < pc + 40; current_pc += 2)
     {
       unsigned short insn = read_memory_unsigned_integer (current_pc, 2);
 
@@ -399,7 +399,7 @@ arm_skip_prologue (CORE_ADDR pc)
 
   /* Check if this is Thumb code.  */
   if (arm_pc_is_thumb (pc))
-    return thumb_skip_prologue (pc);
+    return thumb_skip_prologue (pc, func_end);
 
   /* Can't find the prologue end in the symbol table, try it the hard way
      by disassembling the instructions. */