2000-03-08 Mark Kettenis <kettenis@gnu.org>
authorMark Kettenis <kettenis@gnu.org>
Wed, 8 Mar 2000 22:34:19 +0000 (22:34 +0000)
committerMark Kettenis <kettenis@gnu.org>
Wed, 8 Mar 2000 22:34:19 +0000 (22:34 +0000)
* i386-tdep.c (i386_linux_saved_pc_after_call): New function.
* config/i386/tm-linux.h (SAVED_PC_AFTER_CALL): Define to call
i386_linux_saved_pc_after_call.

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

index 75e29b18351c104dede34f37af3845fbb6906fac..71b307de1bdac3a3f652e0fc14a82f2b50e1b14b 100644 (file)
@@ -1,3 +1,9 @@
+2000-03-08  Mark Kettenis  <kettenis@gnu.org>
+
+       * i386-tdep.c (i386_linux_saved_pc_after_call): New function.
+       * config/i386/tm-linux.h (SAVED_PC_AFTER_CALL): Define to call
+       i386_linux_saved_pc_after_call.
+
 2000-03-06  Jim Blandy  <jimb@redhat.com>
 
        From Tom Tromey <tromey@cygnus.com> and Keith Seitz <?>:
index 391d5c08aad7d869cad0b5afb23a82afbc6135d4..3c557f04fc60fbe554bbed7e18af715573a8ce9c 100644 (file)
@@ -154,6 +154,10 @@ extern CORE_ADDR i386_linux_sigtramp_saved_pc (struct frame_info *);
 
 extern CORE_ADDR i386_linux_sigtramp_saved_sp (struct frame_info *);
 
+#undef SAVED_PC_AFTER_CALL
+#define SAVED_PC_AFTER_CALL(frame) i386_linux_saved_pc_after_call (frame)
+extern CORE_ADDR i386_linux_saved_pc_after_call (struct frame_info *);
+
 /* When we call a function in a shared library, and the PLT sends us
    into the dynamic linker to find the function's real address, we
    need to skip over the dynamic linker call.  This function decides
index 10011f671b617e561ac4b78b75ef25b4b443694c..e940e2ff3c25d7d39ac7df60eebf531d72961951 100644 (file)
@@ -1024,6 +1024,17 @@ i386_linux_sigtramp_saved_sp (struct frame_info *frame)
   return read_memory_integer (addr + LINUX_SIGCONTEXT_SP_OFFSET, 4);
 }
 
+/* Immediately after a function call, return the saved pc.  */
+
+CORE_ADDR
+i386_linux_saved_pc_after_call (struct frame_info *frame)
+{
+  if (frame->signal_handler_caller)
+    return i386_linux_sigtramp_saved_pc (frame);
+
+  return read_memory_integer (read_register (SP_REGNUM), 4);
+}
+
 #endif /* I386_LINUX_SIGTRAMP */
 
 #ifdef STATIC_TRANSFORM_NAME