* config/m88k/{tm-delta88.h,tm-delta88v4.h}, m88k-tdep.c:
authorJim Kingdon <jkingdon@engr.sgi.com>
Tue, 1 Feb 1994 22:17:29 +0000 (22:17 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Tue, 1 Feb 1994 22:17:29 +0000 (22:17 +0000)
Define IN_SIGTRAMP and backtrace correctly through signal handlers.

gdb/ChangeLog
gdb/config/m88k/tm-delta88.h
gdb/config/m88k/tm-delta88v4.h
gdb/m88k-tdep.c

index 6206f63ecf601034c207c795b586847841a6c353..25f69adaeceb16f73d5ff8f9843285134655e5d6 100644 (file)
@@ -1,3 +1,8 @@
+Tue Feb  1 17:13:32 1994  Kevin Buettner (kev@cujo.geg.mot.com)
+
+       * config/m88k/{tm-delta88.h,tm-delta88v4.h}, m88k-tdep.c:
+       Define IN_SIGTRAMP and backtrace correctly through signal handlers.
+
 Tue Feb  1 22:13:25 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
        * procfs.c (wait_fd):  Handle EINTR error return from PIOCWSTOP ioctl
index 7ca46ddb665d573472bb972eb5002dfb817397cb..f0c4d299ba83eee0964b6779e765c77efcd07af2 100644 (file)
@@ -20,3 +20,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "m88k/tm-m88k.h"
 
 #define DELTA88
+
+#define IN_SIGTRAMP(pc, name) ((name) && STREQ ("_sigcode", (name)))
+#define SIGTRAMP_FRAME_FIXUP(frame) (frame) += 0x20
+#define SIGTRAMP_SP_FIXUP(sp) (sp) = read_memory_integer((sp), 4)
index 129b84272f260b48372be2c0198308915995761b..78c9e2ddf34e8bf5285ac64e0d39c57c85dafcaa 100644 (file)
@@ -24,3 +24,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 /* If we don't define this, backtraces go on forever.  */
 #define FRAME_CHAIN_VALID_ALTERNATE 1
+
+#define IN_SIGTRAMP(pc, name) ((name) && (STREQ ("signalhandler", (name)) \
+                                          || STREQ("sigacthandler", (name))))
+#define SIGTRAMP_SP_FIXUP(sp) (sp) = read_memory_integer((sp)+0xcd8, 4)
index a932e4c6aeb39afa0e3f40c4c7b46acdc065faf9..189db6ffef91984ca8bc606a320d101391b14cb0 100644 (file)
@@ -480,7 +480,15 @@ frame_find_saved_regs (fi, fsr)
       limit = (sal.end && sal.end < fi->pc) ? sal.end: fi->pc;
 
       /* This will fill in fields in *fi as well as in cache_fsr.  */
+#ifdef SIGTRAMP_FRAME_FIXUP
+      if (fi->signal_handler_caller)
+       SIGTRAMP_FRAME_FIXUP(fi->frame);
+#endif
       examine_prologue (ip, limit, fi->frame, cache_fsr, fi);
+#ifdef SIGTRAMP_SP_FIXUP
+      if (fi->signal_handler_caller && fi->fsr->regs[SP_REGNUM])
+       SIGTRAMP_SP_FIXUP(fi->fsr->regs[SP_REGNUM]);
+#endif
     }
 
   if (fsr)