From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id 78C613A76408 for ; Fri, 23 Apr 2021 08:38:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 78C613A76408 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=andrew.burgess@embecosm.com Received: by mail-wm1-x32e.google.com with SMTP id o9-20020a1c41090000b029012c8dac9d47so751682wma.1 for ; Fri, 23 Apr 2021 01:38:35 -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=xs9AwGzqcQJ8R/b3Y8IEEf0A/UXuZE9jHg3Ikkt+Nac=; b=auWxtUV4mkJXSt50qhMgvlW+oQnyZyKpZGCC0Bpn+jdqWXs2/5Z3L9I+u/dJFE7K8y NNHpCa7HjeXeIiIjBzDcWJgjVgoEyc6HzOtKfxdP4iKIERLHKRu8rHg6JuyPYlfD9sok somOLsUlMATHvxn1QWw9UZyJpkEb6uH2wG0OdSxdZGgj70mRauLK0Kr+HP7OtB0jyu1L zRFzJUo7dcFmCrB5W9ohS8Di9RVHKNSHWQ7jGCaqfCg3mHoyHQDofZmC9+a7rcn3vg6s 2JIrAhBvE72Q/zCxXKWNdUt/tqyF83Qz0g+f5v4xSgP/prvDEIHMCv8JeoJARIZyQlom VgRA== 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=xs9AwGzqcQJ8R/b3Y8IEEf0A/UXuZE9jHg3Ikkt+Nac=; b=HSpSa3mttxtdM9AtoyaTvPmUisB+Mh14F4Gt27upxmNxqZJyQTghEGGLI1XEf8ajoq YVAuq+dljauVabQrpcpfOxctovf4mDctvokcV7jfJwF7ARMo6VZr518oWRaVjS+orDx9 rjXXBqGxJOpOQBUzdJe6RmMBVZj7uv+rbrcxYdchW/2KFkSyK2jPXPR4VA87GycZ2hv9 tUBTTXn41jZgLm2pd7n9VXrgTS5CoiVJQ1RMYUt3ecpablRY2UyEy1sWND+oLbruN1j3 wnNGNfz4I4/A7nu2+mEPD9I0rW0nhBUAz7wrrqmi+dZCW7YzfOG2DYmaAUjhcqKbNTYP qyDw== X-Gm-Message-State: AOAM533zuL1V8y4H1wIuUuyMv3HWcV6oxIhFBO/zRdWOrIq0S4/CiBzB 2S2Arw5vuJYSMfE+J4CKzsMZpmH4k+aNzw== X-Google-Smtp-Source: ABdhPJz2rViDIHVGDn1Wvl/ERpFicgym1+htnB67Rp83+l+eznV1tdsXEEw6dn3E+FPS4lpdU2kkJg== X-Received: by 2002:a1c:f204:: with SMTP id s4mr3073186wmc.8.1619167114341; Fri, 23 Apr 2021 01:38:34 -0700 (PDT) Received: from localhost (host109-151-46-70.range109-151.btcentralplus.com. [109.151.46.70]) by smtp.gmail.com with ESMTPSA id x189sm10090419wmg.17.2021.04.23.01.38.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Apr 2021 01:38:33 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Subject: [PATCH 2/7] gdb: ensure SIGINT is set to SIG_DFL during initialisation Date: Thu, 22 Apr 2021 22:02:43 +0100 Message-Id: <69ae1b5d2b57199315d6ce66bedf07b1ae095757.1619125261.git.andrew.burgess@embecosm.com> 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=-10.9 required=5.0 tests=BAYES_00, DATE_IN_PAST_06_12, 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.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Fri, 23 Apr 2021 08:38:36 -0000 In order for our SIGINT handling to work correctly with Python we require that SIGINT be set to SIG_DFL during Python's initialisation. Currently this is the case, but, in a later commit I plan to delay the initialisation of Python until after the point where GDB's own SIGINT handler has been installed. The consequence of this is that our SIGINT handling would become broken. In this commit I propose adding an RAII class that will ensure SIGINT is set to SIG_DFL during the call to each extension languages finish_initialization method. At this point this change should have not effect. gdb/ChangeLog: * extension.c (struct scoped_default_signal): New struct. (scoped_default_sigint): New typedef. (finish_ext_lang_initialization): Make use of scoped_default_sigint. --- gdb/ChangeLog | 7 +++++++ gdb/extension.c | 28 +++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/gdb/extension.c b/gdb/extension.c index 0e0d42685fc..8f3722d3049 100644 --- a/gdb/extension.c +++ b/gdb/extension.c @@ -296,6 +296,29 @@ ext_lang_auto_load_enabled (const struct extension_language_defn *extlang) return extlang->script_ops->auto_load_enabled (extlang); } + +/* RAII class used to temporarily return SIG to its default handler. */ + +template +struct scoped_default_signal +{ + scoped_default_signal () + { m_old_sig_handler = signal (SIG, SIG_DFL); } + + ~scoped_default_signal () + { signal (SIG, m_old_sig_handler); } + + DISABLE_COPY_AND_ASSIGN (scoped_default_signal); + +private: + /* The previous signal handler that needs to be restored. */ + sighandler_t m_old_sig_handler; +}; + +/* Class to temporarily return SIGINT to its default handler. */ + +using scoped_default_sigint = scoped_default_signal; + /* Functions that iterate over all extension languages. These only iterate over external extension languages, not including GDB's own extension/scripting language, unless otherwise indicated. */ @@ -310,7 +333,10 @@ finish_ext_lang_initialization (void) { if (extlang->ops != nullptr && extlang->ops->finish_initialization != NULL) - extlang->ops->finish_initialization (extlang); + { + scoped_default_sigint set_sigint_to_default_handler; + extlang->ops->finish_initialization (extlang); + } } } -- 2.25.4