Fix stack unwinding through _sigtramp on Irix. These patches are from
authorPeter Schauer <Peter.Schauer@mytum.de>
Sat, 22 May 1993 10:34:47 +0000 (10:34 +0000)
committerPeter Schauer <Peter.Schauer@mytum.de>
Sat, 22 May 1993 10:34:47 +0000 (10:34 +0000)
Paul Flinders <ptf@delcam.co.uk>.
* mipsread.c (fixup_sigtramp): Find _sigtramp on Irix even when the
executable uses sigvec.
* mips-tdep.c (read_next_frame_reg): Allow tm-file to override
sigcontext offsets.
* config/mips/tm-irix3.h: Add sigcontext offsets for Irix.

gdb/ChangeLog
gdb/mipsread.c

index d6efc0d..029582b 100644 (file)
@@ -1,3 +1,13 @@
+Sat May 22 03:33:07 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       Fix stack unwinding through _sigtramp on Irix. These patches are from
+       Paul Flinders <ptf@delcam.co.uk>.
+       * mipsread.c (fixup_sigtramp): Find _sigtramp on Irix even when the
+       executable uses sigvec.
+       * mips-tdep.c (read_next_frame_reg): Allow tm-file to override
+       sigcontext offsets.
+       * config/mips/tm-irix3.h: Add sigcontext offsets for Irix.
+
 Sat May 22 00:39:01 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
        * infrun.c (wait_for_inferior): Clear stop_signal if it should not
index 039f3a4..294f923 100644 (file)
@@ -3153,19 +3153,20 @@ fixup_sigtramp ()
 
   sigtramp_address = -1;
 
-  /* We know it is sold as sigvec */
+  /* We have to handle the following cases here:
+     a) The Mips library has a sigtramp label within sigvec.
+     b) Irix has a _sigtramp which we want to use, but it also has sigvec.  */
   s = lookup_symbol ("sigvec", 0, VAR_NAMESPACE, 0, NULL);
-
-  /* Most programs do not play with signals */
-  if (s == 0)
-    s = lookup_symbol ("_sigtramp", 0, VAR_NAMESPACE, 0, NULL);
-  else
+  if (s != 0)
     {
       b0 = SYMBOL_BLOCK_VALUE (s);
-
-      /* A label of sigvec, to be more precise */
       s = lookup_symbol ("sigtramp", b0, VAR_NAMESPACE, 0, NULL);
     }
+  if (s == 0)
+    {
+      /* No sigvec or no sigtramp inside sigvec, try _sigtramp.  */
+      s = lookup_symbol ("_sigtramp", 0, VAR_NAMESPACE, 0, NULL);
+    }
 
   /* But maybe this program uses its own version of sigvec */
   if (s == 0)