From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by sourceware.org (Postfix) with ESMTPS id 65E8E3838005 for ; Wed, 21 Jul 2021 18:09:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 65E8E3838005 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com Received: by mail-wr1-x435.google.com with SMTP id n1so3114140wri.10 for ; Wed, 21 Jul 2021 11:09:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IZJEkftT3Px+AwdREGcoEEwKQbGCZsw0kEnSMeiguTA=; b=Z6BB2j0hyCR47xt5OKF+d5vliAedW9Rub6N4vuozRu1MHZPG49ECvwo+h7UWB3ExqX XmpU6dGk2ZDYynxv68mxL/PselaFm2GmeCDZ48uCyQA/ANdyS8CNvPRLdJz593g9Od2p lQk4VOvZMj3Kai0zZtpUEQ1Djq7fptZ8NbleOrUvO5DotVgE3ELA2rIFMtFtUdaHpnzh 7nuIR/IV3doKSYVFgjkR61cI+go3PG36QFchubEl++fb4Ld58vhZqLXHW3/jjqvhfnOx czVKag+gC5WJlghj5QGnkwOAzzwYJsUmp4FeyVXsMha07uXgx73s2AOgF0UKXEapd6QR W0pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IZJEkftT3Px+AwdREGcoEEwKQbGCZsw0kEnSMeiguTA=; b=pDi7nhrjO2qVOD/2qzqC6s1mz/Xe6TyhAWNutc+jPyxYHLzTg32IC6kWKnVX7xHAcm QocipCovY3AYoCf+LD2HwZbWqsFtdpkVcECTCBtC6FK7SIVmQ3OEUhJxWaJKm+3P3GWi 8x16FISy9CcTm1g7G/3y7A/RMcVObReIkGIusTmTqVIvk5874h2htnPbv/yvSwWitsco QcJJbxQ8rzvq02/zH/QiPTvtP+WlgBGneV85RW1CBi6U7M/eiPZVzCeJ1YE6bExzAux/ tZfgRJvl/0YLgADTrUq7J+i0fcEtkrohYqI1zneU8R9saFGSUdI+KGItK5A2b13+OuBj noEA== X-Gm-Message-State: AOAM533pscdzWNATuVxzlKTRvqxJljRYOmaQeZ1iMvvOEH3F2IXxbbTB TcR5qXh+snv+p93DNtkjadPKnMsgHz6+0A== X-Google-Smtp-Source: ABdhPJyRjzUbnFaznCkF/ADjSbuvEHDGiHEYZg9Sa4gKT9fQmzhjWWwh1TzQGbvZOmweNzhaPUssLQ== X-Received: by 2002:adf:f907:: with SMTP id b7mr44261531wrr.357.1626890943413; Wed, 21 Jul 2021 11:09:03 -0700 (PDT) Received: from localhost (host86-134-238-200.range86-134.btcentralplus.com. [86.134.238.200]) by smtp.gmail.com with ESMTPSA id n5sm20820481wrp.80.2021.07.21.11.09.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 21 Jul 2021 11:09:03 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Subject: [PATCHv2 5/6] gdb: register SIGBUS, SIGFPE, and SIGABRT handlers Date: Wed, 21 Jul 2021 19:08:52 +0100 Message-Id: X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Jul 2021 18:09:05 -0000 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. --- gdb/event-top.c | 17 ++++++++++++++++- gdb/testsuite/gdb.base/bt-on-fatal-signal.exp | 5 ++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/gdb/event-top.c b/gdb/event-top.c index b5dfd43f621..349f0f26ce4 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -1025,7 +1025,10 @@ static struct serial_event *quit_serial_event; 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) { @@ -1061,6 +1064,18 @@ 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 (); } diff --git a/gdb/testsuite/gdb.base/bt-on-fatal-signal.exp b/gdb/testsuite/gdb.base/bt-on-fatal-signal.exp index 7a9f8e45fde..8875d00fdb1 100644 --- a/gdb/testsuite/gdb.base/bt-on-fatal-signal.exp +++ b/gdb/testsuite/gdb.base/bt-on-fatal-signal.exp @@ -54,7 +54,10 @@ gdb_test_multiple "maint set backtrace-on-fatal-signal on" "" { } # 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} { -- 2.25.4