From: K. Richard Pixley Date: Tue, 6 Oct 1992 22:54:57 +0000 (+0000) Subject: NOTICE_SIGNAL_HANDLING_CHANGE macro added to the target vector as X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3950a34e45858c6f5a33e94b71832febc282eae3;p=binutils-gdb.git 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 78659af55e8..e6c0ab451c1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. diff --git a/gdb/corelow.c b/gdb/corelow.c index d9d51526488..75f64d54eaa 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -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 */ diff --git a/gdb/infrun.c b/gdb/infrun.c index 8a01acf0314..de2ad56c869 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -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 @@ -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); +} + 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); diff --git a/gdb/procfs.c b/gdb/procfs.c index 6254c9c421f..1a694e0f0d4 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -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 */ diff --git a/gdb/remote-adapt.c b/gdb/remote-adapt.c index 374c9dec49a..98182e2818e 100644 --- a/gdb/remote-adapt.c +++ b/gdb/remote-adapt.c @@ -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 */ diff --git a/gdb/remote-eb.c b/gdb/remote-eb.c index 666de4fcc76..bba59cf9057 100644 --- a/gdb/remote-eb.c +++ b/gdb/remote-eb.c @@ -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 */ diff --git a/gdb/remote-es1800.c b/gdb/remote-es1800.c index ca806b2e917..53298692eec 100644 --- a/gdb/remote-es1800.c +++ b/gdb/remote-es1800.c @@ -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 */ diff --git a/gdb/remote-hms.c b/gdb/remote-hms.c index 23afa481dab..e5f1f028c77 100644 --- a/gdb/remote-hms.c +++ b/gdb/remote-hms.c @@ -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 */ diff --git a/gdb/remote-mm.c b/gdb/remote-mm.c index f62b64d9fa5..dc751c2227d 100644 --- a/gdb/remote-mm.c +++ b/gdb/remote-mm.c @@ -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 */ diff --git a/gdb/remote-nindy.c b/gdb/remote-nindy.c index 69849fcaf24..2fc965f6501 100644 --- a/gdb/remote-nindy.c +++ b/gdb/remote-nindy.c @@ -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 */ diff --git a/gdb/remote-st2000.c b/gdb/remote-st2000.c index d7de9307765..02a5a63ef82 100644 --- a/gdb/remote-st2000.c +++ b/gdb/remote-st2000.c @@ -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, diff --git a/gdb/remote-udi.c b/gdb/remote-udi.c index a6a015c77d9..e2aee26270f 100644 --- a/gdb/remote-udi.c +++ b/gdb/remote-udi.c @@ -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 */ diff --git a/gdb/remote-vx.c b/gdb/remote-vx.c index ddb6955c7a8..74a2e9f32a9 100644 --- a/gdb/remote-vx.c +++ b/gdb/remote-vx.c @@ -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" */ diff --git a/gdb/xcoffexec.c b/gdb/xcoffexec.c index 302b53985f9..6187a59b8e4 100644 --- a/gdb/xcoffexec.c +++ b/gdb/xcoffexec.c @@ -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 */ diff --git a/gdb/xm-irix4.h b/gdb/xm-irix4.h index 1ecbd5cd6e2..21ee98f2421 100644 --- a/gdb/xm-irix4.h +++ b/gdb/xm-irix4.h @@ -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 /* si_pid & si_uid are bogus */ diff --git a/gdb/xm-sysv4.h b/gdb/xm-sysv4.h index 07cd547891a..f2697a97c6a 100644 --- a/gdb/xm-sysv4.h +++ b/gdb/xm-sysv4.h @@ -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