diff -ur gdb.orig/gdb/config/i386/tm-linux.h gdb/gdb/config/i386/tm-linux.h
--- gdb.orig/gdb/config/i386/tm-linux.h	Thu Jul  6 17:30:35 2000
+++ gdb/gdb/config/i386/tm-linux.h	Wed Mar 21 12:44:09 2001
@@ -75,6 +75,12 @@
 #define sigtramp_saved_pc i386_linux_sigtramp_saved_pc
 extern CORE_ADDR i386_linux_sigtramp_saved_pc (struct frame_info *);
 
+/* IMMUNIX helper defines to recognize a StackGuard frame */
+#define CANARY_WORD   0xaff0d                                                 
+                                                                              
+#define is_frame_stack_guard_enabled(FRAME)           \
+  ((read_memory_integer((FRAME)->frame + 4, 4) == CANARY_WORD) ? 1 : 0)
+
 /* Signal trampolines don't have a meaningful frame.  As in tm-i386.h,
    the frame pointer value we use is actually the frame pointer of the
    calling frame--that is, the frame which was in progress when the
@@ -117,7 +123,9 @@
    ? sigtramp_saved_pc (FRAME)					\
    : (FRAMELESS_SIGNAL (FRAME)					\
       ? read_memory_integer (i386_linux_sigtramp_saved_sp ((FRAME)->next), 4) \
-      : read_memory_integer ((FRAME)->frame + 4, 4)))
+      : (is_frame_stack_guard_enabled(FRAME) \
+         ? read_memory_integer ((FRAME)->frame + 8, 4)   \
+	 : read_memory_integer ((FRAME)->frame + 4, 4))))
 
 extern CORE_ADDR i386_linux_sigtramp_saved_sp (struct frame_info *);
 
