* i386-tdep.c (i386_frame_saved_pc): New function.
authorMark Kettenis <kettenis@gnu.org>
Wed, 9 May 2001 16:16:33 +0000 (16:16 +0000)
committerMark Kettenis <kettenis@gnu.org>
Wed, 9 May 2001 16:16:33 +0000 (16:16 +0000)
* config/i386/tm-i386.h (FRAME_SAVED_PC): Redefine in terms of
i386_frame_saved_pc.
(i386_frame_saved_pc): New prototype.

gdb/ChangeLog
gdb/config/i386/tm-i386.h
gdb/i386-tdep.c

index 2f82bb7..85276c8 100644 (file)
@@ -1,5 +1,10 @@
 2001-05-09  Mark Kettenis  <kettenis@gnu.org>
 
+       * i386-tdep.c (i386_frame_saved_pc): New function.
+       * config/i386/tm-i386.h (FRAME_SAVED_PC): Redefine in terms of
+       i386_frame_saved_pc.
+       (i386_frame_saved_pc): New prototype.
+
        * i386-tdep.c (i386_register_virtual_type): New function.
        (i386_register_convertible): New function.
        * config/i386/tm-i386.h (REGISTER_VIRTUAL_TYPE): Redefine in terms
index a59ed82..9248f18 100644 (file)
@@ -330,15 +330,10 @@ extern CORE_ADDR i386_frame_chain (struct frame_info *frame);
   i386_frameless_function_invocation (frame)
 extern int i386_frameless_function_invocation (struct frame_info *frame);
 
-/* Saved Pc.  Get it from sigcontext if within sigtramp.  */
+/* Return the saved program counter for FRAME.  */
 
-#define FRAME_SAVED_PC(FRAME) \
-  (((FRAME)->signal_handler_caller \
-    ? sigtramp_saved_pc (FRAME) \
-    : read_memory_unsigned_integer ((FRAME)->frame + 4, 4)) \
-   )
-
-extern CORE_ADDR sigtramp_saved_pc (struct frame_info *);
+#define FRAME_SAVED_PC(frame) i386_frame_saved_pc (frame)
+extern CORE_ADDR i386_frame_saved_pc (struct frame_info *frame);
 
 #define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
 
index 446b268..0e3e340 100644 (file)
@@ -378,6 +378,23 @@ i386_frameless_function_invocation (struct frame_info *frame)
   return frameless_look_for_prologue (frame);
 }
 
+/* Return the saved program counter for FRAME.  */
+
+CORE_ADDR
+i386_frame_saved_pc (struct frame_info *frame)
+{
+  /* FIXME: kettenis/2001-05-09: Conditionalizing the next bit of code
+     on SIGCONTEXT_PC_OFFSET and I386V4_SIGTRAMP_SAVED_PC should be
+     considered a temporary hack.  I plan to come up with something
+     better when we go multi-arch.  */
+#if defined (SIGCONTEXT_PC_OFFSET) || defined (I386V4_SIGTRAMP_SAVED_PC)
+  if (frame->signal_handler_caller)
+    return sigtramp_saved_pc (frame);
+#endif
+
+  return read_memory_unsigned_integer (frame->frame + 4, 4);
+}
+
 /* Immediately after a function call, return the saved pc.  */
 
 CORE_ADDR