NOTICE_SIGNAL_HANDLING_CHANGE macro added to the target vector as
authorK. Richard Pixley <rich@cygnus>
Tue, 6 Oct 1992 22:54:57 +0000 (22:54 +0000)
committerK. Richard Pixley <rich@cygnus>
Tue, 6 Oct 1992 22:54:57 +0000 (22:54 +0000)
to_notice_signals.

* inferior.h (proc_signal_handling_change): prototype removed.
* infrun.c (NOTICE_SIGNAL_HANDLING_CHANGE): default removed.
(handle_command): now calls target_notice_signals.
* procfs.c (proc_signal_handling_change): renamed to
  procfs_notice_signals.  Now static.  Add prototype.  All callers
  changed.
* target.h (struct target_ops): new field, to_notice_signals.
(target_notice_signals): new macro to cover new field.
* target.c (cleanup_target): default to_notice_signals to ignore.
* corelow.c (core_ops),
exec.c (exec_ops),
inftarg.c (child_ops),
procfs.c (procfs_ops),
remote-adapt.c (adapt-ops),
remote-eb.c (eb_ops),
remote-es1800.c (es1800_ops, es1800_child_ops),
remote-hms.c (hms_ops),
remote-mm.c (mm_ops),
remote-nindy.c (nindy_ops),
remote-st2000.c (st2000_ops),
remote-udi.c (udi_ops),
remote-vx.c (vx_ops, vx_run_ops),
remote.c (remote_ops),
target.c (dummy_target),
xcoffexec.c (exec_ops): added static initializer for
to_notice_signals.
* xm-irix4.h, xm-sysv4.h (NOTICE_SIGNAL_HANDLING_CHANGE): removed.

16 files changed:
gdb/ChangeLog
gdb/corelow.c
gdb/infrun.c
gdb/procfs.c
gdb/remote-adapt.c
gdb/remote-eb.c
gdb/remote-es1800.c
gdb/remote-hms.c
gdb/remote-mm.c
gdb/remote-nindy.c
gdb/remote-st2000.c
gdb/remote-udi.c
gdb/remote-vx.c
gdb/xcoffexec.c
gdb/xm-irix4.h
gdb/xm-sysv4.h

index 78659af55e841a16cd683fd31624253f186aa348..e6c0ab451c125d45b95bbc28fe91dda004891824 100644 (file)
@@ -1,3 +1,36 @@
+Tue Oct  6 14:47:11 1992  K. Richard Pixley  (rich@sendai.cygnus.com)
+
+       NOTICE_SIGNAL_HANDLING_CHANGE macro added to the target vector as
+       to_notice_signals.
+
+       * inferior.h (proc_signal_handling_change): prototype removed.
+       * infrun.c (NOTICE_SIGNAL_HANDLING_CHANGE): default removed.
+       (handle_command): now calls target_notice_signals.
+       * procfs.c (proc_signal_handling_change): renamed to
+         procfs_notice_signals.  Now static.  Add prototype.  All callers
+         changed.
+       * target.h (struct target_ops): new field, to_notice_signals.
+       (target_notice_signals): new macro to cover new field.
+       * target.c (cleanup_target): default to_notice_signals to ignore.
+       * corelow.c (core_ops),
+       exec.c (exec_ops),
+       inftarg.c (child_ops),
+       procfs.c (procfs_ops),
+       remote-adapt.c (adapt-ops),
+       remote-eb.c (eb_ops),
+       remote-es1800.c (es1800_ops, es1800_child_ops),
+       remote-hms.c (hms_ops),
+       remote-mm.c (mm_ops),
+       remote-nindy.c (nindy_ops),
+       remote-st2000.c (st2000_ops),
+       remote-udi.c (udi_ops),
+       remote-vx.c (vx_ops, vx_run_ops),
+       remote.c (remote_ops),
+       target.c (dummy_target),
+       xcoffexec.c (exec_ops): added static initializer for
+       to_notice_signals.
+       * xm-irix4.h, xm-sysv4.h (NOTICE_SIGNAL_HANDLING_CHANGE): removed.
+
 Tue Oct  6 12:13:08 1992  John Gilmore  (gnu@cygnus.com)
 
        * main.c (define_command):  Add forgotten initializer.
index d9d51526488c18dd5010f8300527910098544440..75f64d54eaa0c4dc879bc1c0b0f80a4412e96e05 100644 (file)
@@ -257,6 +257,7 @@ struct target_ops core_ops = {
        0, 0, 0, /* kill, load, lookup sym */
        find_default_create_inferior, 0, /* mourn_inferior */
        0, /* can_run */
+       0, /* notice_signals */
        core_stratum, 0, /* next */
        0, 1, 1, 1, 0,  /* all mem, mem, stack, regs, exec */
        0, 0,                   /* section pointers */
index 8a01acf0314bbec0247d2d4916acdfbd3e1f7a96..de2ad56c869a338fb08463ab80294aaadbd31f74 100644 (file)
@@ -109,7 +109,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "breakpoint.h"
 #include "wait.h"
 #include "gdbcore.h"
-#include "command.h"
+#include "gdbcmd.h"
 #include "target.h"
 
 #include <signal.h>
@@ -144,6 +144,9 @@ insert_step_breakpoint PARAMS ((void));
 static void
 resume_cleanups PARAMS ((int));
 
+static int
+hook_stop_stub PARAMS ((char *));
+
 /* Sigtramp is a routine that the kernel calls (which then calls the
    signal handler).  On most machines it is a library routine that
    is linked into the executable.
@@ -182,12 +185,6 @@ resume_cleanups PARAMS ((int));
 #define IN_SOLIB_TRAMPOLINE(pc,name)   0
 #endif
 
-/* Notify other parts of gdb that might care that signal handling may
-   have changed for one or more signals. */
-#ifndef NOTICE_SIGNAL_HANDLING_CHANGE
-#define NOTICE_SIGNAL_HANDLING_CHANGE  /* No actions */
-#endif
-
 #ifdef TDESC
 #include "tdesc.h"
 int safe_to_init_tdesc_context = 0;
@@ -216,10 +213,14 @@ static unsigned char *signal_program;
        (flags)[signum] = 0; \
   } while (0)
 
+
+/* Command list pointer for the "stop" placeholder.  */
+
+static struct cmd_list_element *stop_command;
+
 /* Nonzero if breakpoints are now inserted in the inferior.  */
-/* Nonstatic for initialization during xxx_create_inferior. FIXME. */
 
-/*static*/ int breakpoints_inserted;
+static int breakpoints_inserted;
 
 /* Function inferior was in as of last step command.  */
 
@@ -1196,6 +1197,9 @@ save_pc:
 void
 normal_stop ()
 {
+  char *tem;
+  struct cmd_list_element *c;
+
   /* Make sure that the current_frame's pc is correct.  This
      is a correction for setting up the frame info before doing
      DECR_PC_AFTER_BREAK */
@@ -1240,6 +1244,14 @@ Further execution is probably impossible.\n");
 
   target_terminal_ours ();
 
+  /* Look up the hook_stop and run it if it exists.  */
+
+  if (stop_command->hook)
+    {
+      catch_errors (hook_stop_stub, (char *)stop_command->hook,
+                   "Error while running hook_stop:\n");
+    }
+
   if (!target_has_stack)
     return;
 
@@ -1282,6 +1294,14 @@ Further execution is probably impossible.\n");
       select_frame (get_current_frame (), 0);
     }
 }
+
+static int
+hook_stop_stub (cmd)
+     char *cmd;
+{
+  execute_user_command ((struct cmd_list_element *)cmd, 0);
+}
+
 \f
 static void
 insert_step_breakpoint ()
@@ -1492,7 +1512,7 @@ handle_command (args, from_tty)
       argv++;
     }
 
-  NOTICE_SIGNAL_HANDLING_CHANGE;
+  target_notice_signals();
 
   if (from_tty)
     {
@@ -1674,6 +1694,11 @@ Pass means let program see this signal; otherwise program doesn't know.\n\
 Ignore is a synonym for nopass and noignore is a synonym for pass.\n\
 Pass and Stop may be combined.");
 
+  stop_command = add_cmd ("stop", class_pseudo, NO_FUNCTION,
+          "There is no `stop' command, but you can set a hook on `stop'.\n\
+This allows you to set a list of commands to be run each time execution\n\
+of the inferior program stops.", &cmdlist);
+
   numsigs = signo_max () + 1;
   signal_stop    = (unsigned char *)    
                   xmalloc (sizeof (signal_stop[0]) * numsigs);
index 6254c9c421f8c16020ebf3c43e853bcd39aa630c..1a694e0f0d4391353bf52a14551d022fbf1ffa0f 100644 (file)
@@ -416,6 +416,9 @@ do_detach PARAMS ((int siggnal));
 static void
 procfs_create_inferior PARAMS ((char *, char *, char **));
 
+static void
+procfs_notice_signals PARAMS ((void));
+
 /* External function prototypes that can't be easily included in any
    header file because the args are typedefs in system include files. */
 
@@ -1267,7 +1270,7 @@ procfs_init_inferior (pid)
     {
       memset ((char *) &pi.prrun, 0, sizeof (pi.prrun));
       prfillset (&pi.prrun.pr_trace);
-      proc_signal_handling_change ();
+      procfs_notice_signals ();
       prfillset (&pi.prrun.pr_fault);
       prdelset (&pi.prrun.pr_fault, FLTPAGE);
       if (ioctl (pi.fd, PIOCWSTOP, &pi.prstatus) < 0)
@@ -1285,11 +1288,11 @@ procfs_init_inferior (pid)
 
 GLOBAL FUNCTION
 
-       proc_signal_handling_change
+       procfs_notice_signals
 
 SYNOPSIS
 
-       void proc_signal_handling_change (void);
+       static void procfs_notice_signals (void);
 
 DESCRIPTION
 
@@ -1306,8 +1309,8 @@ DESCRIPTION
        involved.
  */
 
-void
-proc_signal_handling_change ()
+static void
+procfs_notice_signals ()
 {
   int signo;
 
@@ -1775,7 +1778,7 @@ do_attach (pid)
   
   memset (&pi.prrun, 0, sizeof (pi.prrun));
   prfillset (&pi.prrun.pr_trace);
-  proc_signal_handling_change ();
+  procfs_notice_signals ();
   prfillset (&pi.prrun.pr_fault);
   prdelset (&pi.prrun.pr_fault, FLTPAGE);
   if (ioctl (pi.fd, PIOCSFAULT, &pi.prrun.pr_fault))
@@ -3118,6 +3121,7 @@ struct target_ops procfs_ops = {
   procfs_create_inferior,      /* to_create_inferior */
   procfs_mourn_inferior,       /* to_mourn_inferior */
   procfs_can_run,              /* to_can_run */
+  procfs_notice_signals,       /* to_notice_signals */
   process_stratum,             /* to_stratum */
   0,                           /* to_next */
   1,                           /* to_has_all_memory */
index 374c9dec49aa5616494c4fe56c9f9a8850d9360d..98182e2818e58ef7fc69fbc41f06f43a058676ca 100644 (file)
@@ -1359,6 +1359,7 @@ struct target_ops adapt_ops = {
        adapt_create_inferior,  /* create_inferior */ 
        adapt_mourn,            /* mourn_inferior FIXME */
        0, /* can_run */
+       0, /* notice_signals */
        process_stratum, 0, /* next */
        1, 1, 1, 1, 1,  /* all mem, mem, stack, regs, exec */
        0,0,            /* Section pointers */
index 666de4fcc768d48f20548486b1178af9db187c62..bba59cf9057bc63374f95cbeb096b5eb7966356c 100644 (file)
@@ -988,6 +988,7 @@ executable as it exists on the remote computer.  For example,\n\
        eb_create_inferior,
        eb_mourn_inferior,
        0,      /* can_run */
+       0, /* notice_signals */
        process_stratum, 0, /* next */
        1, 1, 1, 1, 1,  /* all mem, mem, stack, regs, exec */
        0, 0,                   /* Section pointers */
index ca806b2e917d07305f19fb9830a5a5d36741285f..53298692eecc4e769b4b3c4bdc23494f4694b768 100644 (file)
@@ -2188,6 +2188,7 @@ Specify the serial device it is connected to (e.g. /dev/ttya).",
   es1800_create_inferior,      /* to_create_inferior */
   NULL,                                /* to_mourn_inferior */
   0,                           /* to_can_run */
+  0,                           /* notice_signals */
   core_stratum,                        /* to_stratum */
   0,                           /* to_next */
   0,                           /* to_has_all_memory */
@@ -2234,6 +2235,7 @@ Specify the serial device it is connected to (e.g. /dev/ttya).",
   es1800_create_inferior,      /* to_create_inferior */
   es1800_mourn_inferior,       /* to_mourn_inferior */
   0,                           /* to_can_run */
+  0,                           /* notice_signals */
   process_stratum,             /* to_stratum */
   0,                           /* to_next */
   1,                           /* to_has_all_memory */
index 23afa481dab38d75a6d2b7c4a7af9ecd9950e4c7..e5f1f028c779c09fd6bd7bab66c1c3ae8bb7d059 100644 (file)
@@ -1329,6 +1329,7 @@ by a serial line.",
        hms_create_inferior,    /* create_inferior */ 
        hms_mourn,              /* mourn_inferior FIXME */
        0,                      /* can_run */
+       0,                      /* notice_signals */
        process_stratum, 0, /* next */
        1, 1, 1, 1, 1,  /* all mem, mem, stack, regs, exec */
        0,0,            /* Section pointers */
index f62b64d9fa57bd40223e8617e3bc6fdd32168939..dc751c2227d4f85ff922c803b89580dd7ca9afdb 100644 (file)
@@ -1607,6 +1607,7 @@ struct target_ops mm_ops = {
         mm_create_inferior,  /* create_inferior */
         mm_mourn,            /* mourn_inferior FIXME */
        0,                      /* can_run */
+       0, /* notice_signals */
         process_stratum, 0, /* next */
         1, 1, 1, 1, 1,  /* all mem, mem, stack, regs, exec */
        0,0,            /* sections, sections_end */
index 69849fcaf24efab24aea1de8e6f8c17941cc8886..2fc965f6501ed6fdd99a6ab14b9f4ff1081f3823 100644 (file)
@@ -942,6 +942,7 @@ specified when you started GDB.",
        nindy_create_inferior,
        nindy_mourn_inferior,
        0,              /* can_run */
+       0, /* notice_signals */
        process_stratum, 0, /* next */
        1, 1, 1, 1, 1,  /* all mem, mem, stack, regs, exec */
        0, 0,                   /* Section pointers */
index d7de9307765f8f4727272c75dc0703b0b0ff17bf..02a5a63ef8201f93c75e891f3d83f2599f369a62 100644 (file)
@@ -796,6 +796,7 @@ the speed to connect at in bits per second.",
   st2000_create_inferior,
   st2000_mourn_inferior,
   0,                           /* can_run */
+  0,                           /* notice_signals */
   process_stratum,
   0,                           /* next */
   1,
index a6a015c77d9d7890a411ccf5908c81cde4dda2f0..e2aee26270fe3012507b57e4a1f371bf87732a02 100644 (file)
@@ -1341,6 +1341,7 @@ static struct target_ops udi_ops = {
         udi_create_inferior,
         udi_mourn,             /* mourn_inferior FIXME */
        0,                      /* can_run */
+       0,                      /* notice_signals */
         process_stratum,
        0,                      /* next */
         1,                     /* has_all_memory */
index ddb6955c7a8d0f3f956108923aad7c732c32a74d..74a2e9f32a9864b9623b2616bffc935ad53a6408 100644 (file)
@@ -1320,6 +1320,7 @@ Specify the name of the machine to connect to.",
        vx_lookup_symbol,
        vx_create_inferior, 0,  /* mourn_inferior */
        0, /* can_run */
+       0, /* notice_signals */
        core_stratum, 0, /* next */
        1, 1, 0, 0, 0,  /* all mem, mem, stack, regs, exec */
        0, 0,                   /* Section pointers */
@@ -1343,6 +1344,7 @@ struct target_ops vx_run_ops = {
        vx_lookup_symbol,
        0, vx_mourn_inferior,
        0,  /* can_run */
+       0, /* notice_signals */
        process_stratum, 0, /* next */
        0, 1, 1, 1, 1,  /* all mem, mem, stack, regs, exec */
                        /* all_mem is off to avoid spurious msg in "i files" */
index 302b53985f9328dcd2d4706a99473a318755da96..6187a59b8e4ac1157b85c233108029189f399c23 100644 (file)
@@ -999,6 +999,7 @@ Specify the filename of the executable file.",
        find_default_create_inferior,
        0, /* mourn_inferior */
        0, /* can_run */
+       0, /* notice_signals */
        file_stratum, 0, /* next */
        0, 1, 0, 0, 0,  /* all mem, mem, stack, regs, exec */
        0, 0,                   /* section pointers */
index 1ecbd5cd6e2fd6a1ffee4f0a0485f75caf08ade5..21ee98f24212d52bb17541e980050f11081f2e7c 100644 (file)
@@ -48,15 +48,4 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  */
 #define PSIGNAL_IN_SIGNAL_H
 
-/* If gdb's signal handling changes (due to a "handle" command), then
-   this macro expands to an action to perform to notify other parts of
-   gdb that might care, that signal handling has changed.  For hosts using
-   the /proc interface, gdb has more control over which signals cause the
-   inferior to stop and which do not.  In some cases, it is desirable to
-   have signals delivered directly to the inferior without involving the
-   debugger at all. */
-#ifdef USE_PROC_FS
-#define NOTICE_SIGNAL_HANDLING_CHANGE proc_signal_handling_change()
-#endif
-
 #define BROKEN_SIGINFO_H       /* <sys/siginfo.h> si_pid & si_uid are bogus */
index 07cd547891abb88e9da240f6973f05b3edf3036c..f2697a97c6a2315caa1a17b0dc7cea1336b974a5 100644 (file)
@@ -59,18 +59,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #define NEED_POSIX_SETPGID
 
-/* If gdb's signal handling changes (due to a "handle" command), then
-   this macro expands to an action to perform to notify other parts of
-   gdb that might care, that signal handling has changed.  For hosts using
-   the /proc interface, gdb has more control over which signals cause the
-   inferior to stop and which do not.  In some cases, it is desirable to
-   have signals delivered directly to the inferior without involving the
-   debugger at all. */
-
-#ifdef USE_PROC_FS
-#define NOTICE_SIGNAL_HANDLING_CHANGE proc_signal_handling_change()
-#endif
-
 /* We have to include these files now, so that GDB will not make
    competing definitions in defs.h.  */
 #include <limits.h>