Register handlers for SIGBUS, SIGFPE, and SIGABRT. All of these
signals are setup as fatal signals that will cause GDB to terminate.
However, by passing these signals through the handle_fatal_signal
function, a user can arrange to see a backtrace when GDB
terminates (see maint set backtrace-on-fatal-signal).
In normal use of GDB there should be no user visible changes after
this commit. Only if GDB terminates with one of the above signals
will GDB change slightly, potentially printing a backtrace before
aborting.
I've added new tests for SIGFPE, SIGBUS, and SIGABRT.
with the reception of the signal.
For SIGSEGV the handle_sig* function does all the work for handling this
- signal. */
+ signal.
+
+ For SIGFPE, SIGBUS, and SIGABRT, these signals will all cause GDB to
+ terminate immediately. */
void
gdb_init_signals (void)
{
create_async_signal_handler (async_sigtstp_handler, NULL, "sigtstp");
#endif
+#ifdef SIGFPE
+ signal (SIGFPE, handle_fatal_signal);
+#endif
+
+#ifdef SIGBUS
+ signal (SIGBUS, handle_fatal_signal);
+#endif
+
+#ifdef SIGABRT
+ signal (SIGABRT, handle_fatal_signal);
+#endif
+
install_handle_sigsegv ();
}
}
# Now the actual test loop.
-foreach test_data {{SEGV "Segmentation fault"}} {
+foreach test_data {{SEGV "Segmentation fault"} \
+ {FPE "Floating point exception"} \
+ {BUS "Bus error"} \
+ {ABRT "Aborted"}} {
set sig [lindex ${test_data} 0]
set msg [lindex ${test_data} 1]
with_test_prefix ${sig} {