Patch from David Mosberger.
[deliverable/binutils-gdb.git] / gdb / i386-tdep.c
index 9b4cf0286b058023a174a1b8ed51dc4b10af84d4..d85073b4ef1c2f9a067fc3da4054bc8a982d2aa7 100644 (file)
@@ -499,7 +499,8 @@ i386_get_frame_setup (CORE_ADDR pc)
 int
 i386_frameless_signal_p (struct frame_info *frame)
 {
-  return (frame->next && get_frame_type (frame->next) == SIGTRAMP_FRAME
+  return (get_next_frame (frame)
+         && get_frame_type (get_next_frame (frame)) == SIGTRAMP_FRAME
          && (frameless_look_for_prologue (frame)
              || get_frame_pc (frame) == get_pc_function_start (get_frame_pc (frame))));
 }
@@ -512,14 +513,14 @@ static CORE_ADDR
 i386_frame_chain (struct frame_info *frame)
 {
   if (pc_in_dummy_frame (get_frame_pc (frame)))
-    return frame->frame;
+    return get_frame_base (frame);
 
   if (get_frame_type (frame) == SIGTRAMP_FRAME
       || i386_frameless_signal_p (frame))
-    return frame->frame;
+    return get_frame_base (frame);
 
   if (! inside_entry_file (get_frame_pc (frame)))
-    return read_memory_unsigned_integer (frame->frame, 4);
+    return read_memory_unsigned_integer (get_frame_base (frame), 4);
 
   return 0;
 }
@@ -581,11 +582,11 @@ i386_frame_saved_pc (struct frame_info *frame)
 
   if (i386_frameless_signal_p (frame))
     {
-      CORE_ADDR sp = i386_sigtramp_saved_sp (frame->next);
+      CORE_ADDR sp = i386_sigtramp_saved_sp (get_next_frame (frame));
       return read_memory_unsigned_integer (sp, 4);
     }
 
-  return read_memory_unsigned_integer (frame->frame + 4, 4);
+  return read_memory_unsigned_integer (get_frame_base (frame) + 4, 4);
 }
 
 /* Immediately after a function call, return the saved pc.  */
@@ -719,7 +720,7 @@ i386_frame_init_saved_regs (struct frame_info *fip)
 
   if (locals >= 0)
     {
-      addr = fip->frame - 4 - locals;
+      addr = get_frame_base (fip) - 4 - locals;
       for (i = 0; i < 8; i++)
        {
          op = codestream_get ();
@@ -735,8 +736,8 @@ i386_frame_init_saved_regs (struct frame_info *fip)
        }
     }
 
-  get_frame_saved_regs (fip)[PC_REGNUM] = fip->frame + 4;
-  get_frame_saved_regs (fip)[FP_REGNUM] = fip->frame;
+  get_frame_saved_regs (fip)[PC_REGNUM] = get_frame_base (fip) + 4;
+  get_frame_saved_regs (fip)[FP_REGNUM] = get_frame_base (fip);
 }
 
 /* Return PC of first real instruction.  */
@@ -891,15 +892,16 @@ i386_pop_frame (void)
 /* Figure out where the longjmp will land.  Slurp the args out of the
    stack.  We expect the first arg to be a pointer to the jmp_buf
    structure from which we extract the address that we will land at.
-   This address is copied into PC.  This routine returns true on
+   This address is copied into PC.  This routine returns non-zero on
    success.  */
 
 static int
 i386_get_longjmp_target (CORE_ADDR *pc)
 {
-  char buf[4];
+  char buf[8];
   CORE_ADDR sp, jb_addr;
   int jb_pc_offset = gdbarch_tdep (current_gdbarch)->jb_pc_offset;
+  int len = TARGET_PTR_BIT / TARGET_CHAR_BIT;
 
   /* If JB_PC_OFFSET is -1, we have no way to find out where the
      longjmp will land.  */
@@ -907,14 +909,14 @@ i386_get_longjmp_target (CORE_ADDR *pc)
     return 0;
 
   sp = read_register (SP_REGNUM);
-  if (target_read_memory (sp + 4, buf, 4))
+  if (target_read_memory (sp + len, buf, len))
     return 0;
 
-  jb_addr = extract_address (buf, 4);
-  if (target_read_memory (jb_addr + jb_pc_offset, buf, 4))
+  jb_addr = extract_address (buf, len);
+  if (target_read_memory (jb_addr + jb_pc_offset, buf, len))
     return 0;
 
-  *pc = extract_address (buf, 4);
+  *pc = extract_address (buf, len);
   return 1;
 }
 \f
@@ -1369,8 +1371,8 @@ i386_svr4_sigcontext_addr (struct frame_info *frame)
 
   gdb_assert (sigcontext_offset != -1);
 
-  if (frame->next)
-    return frame->next->frame + sigcontext_offset;
+  if (get_next_frame (frame))
+    return get_frame_base (get_next_frame (frame)) + sigcontext_offset;
   return read_register (SP_REGNUM) + sigcontext_offset;
 }
 \f
This page took 0.025314 seconds and 4 git commands to generate.