From patchwork Tue Mar 16 20:05:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 42657 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E4AF8384800D; Tue, 16 Mar 2021 20:05:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E4AF8384800D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1615925159; bh=5azMCOgHRUvIeYJ0g337zj6OsdlsI0ikwkCMS7URNAM=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=vPvKzeS4Be8+RnuJzBwFJ6FKi7sTSD3uPE3IRv/oBvLxbuuYQN7/6wyP7ZruK1Lc8 62KPebCMf0Mr9rFErZGa5yfNu83n7OH049dOzIUbdf9lpSACIubQZWEbn8e4UTTMtV k1/Xj4BHy15s16EBYeRMFDL3E5LDKhJqG4HB4pbM= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qk1-x736.google.com (mail-qk1-x736.google.com [IPv6:2607:f8b0:4864:20::736]) by sourceware.org (Postfix) with ESMTPS id 36F36384A4BF for ; Tue, 16 Mar 2021 20:05:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 36F36384A4BF Received: by mail-qk1-x736.google.com with SMTP id 130so36595383qkh.11 for ; Tue, 16 Mar 2021 13:05:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5azMCOgHRUvIeYJ0g337zj6OsdlsI0ikwkCMS7URNAM=; b=n3vqfS2kQny1gmiqxZl6FpnPc8YDH/DMpjlLoSIB1hu3rgofLq3qDH3xPFiIR+ph53 1waRWE5qnJw6/QQQ96YP9Ock/sAHLP71kZDjP/HSMLKOCcoONTo3K25N37WE5lK81Lvz lSEk5hckBb6NkXXwt9FLLUjaZbTXeBOtrkNClp6Ik9m8/hnImRoxkFp3uxPUyas1we+1 hdh69Y+JH1gC6hgqBVly0VTtBC/aOajxfpS+/aILNN+oQfe72gzRY3xy5Jy21tzwdhAY mz+VUNuyrQpZ2owLJIels5Ez6LQbYgdt72SGXVHfw36LuUFkS3nGo+aIOixwvrhzpDO7 qz8w== X-Gm-Message-State: AOAM5316cLp66ktoNFrLLyNpaI8YoAT60FsAl1LREy/wXumalKRg1eez qOeT/64HeZ7KOzdO4+1KShEsprYE1ARDwO/z X-Google-Smtp-Source: ABdhPJzidy4LJzmIz2JfZa07fUvcPLmEZvtOnG9vIgLGOTy81eA/iX/e6g2MR7I9n5aQnkzBZoyz1Q== X-Received: by 2002:a37:a785:: with SMTP id q127mr767238qke.425.1615925150431; Tue, 16 Mar 2021 13:05:50 -0700 (PDT) Received: from localhost.localdomain ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id d16sm15558128qka.43.2021.03.16.13.05.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Mar 2021 13:05:50 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH 28/30] signal: Add __libc_sigaction Date: Tue, 16 Mar 2021 17:05:08 -0300 Message-Id: <20210316200510.2135405-29-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210316200510.2135405-1-adhemerval.zanella@linaro.org> References: <20210316200510.2135405-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, 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: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" The generic implementation basically handle the system agnostic logic (filtering out the invalid signals) while the __libc_sigaction is the function with implements the system and architecture bits. Checked on x86_64-linux-gnu and i686-linux-gnu. --- nptl/Makefile | 1 + signal/Makefile | 2 +- signal/libc_sigaction.c | 32 +++++++++++++++++++ signal/sigaction.c | 7 ++-- .../hurd/{sigaction.c => libc_sigaction.c} | 12 +++---- .../aarch64/{sigaction.c => libc_sigaction.c} | 2 +- .../arc/{sigaction.c => libc_sigaction.c} | 2 +- .../arm/{sigaction.c => libc_sigaction.c} | 2 +- .../i386/{sigaction.c => libc_sigaction.c} | 2 +- .../linux/{sigaction.c => libc_sigaction.c} | 2 -- .../sparc32/{sigaction.c => libc_sigaction.c} | 2 +- .../sparc64/{sigaction.c => libc_sigaction.c} | 2 +- .../x86_64/{sigaction.c => libc_sigaction.c} | 2 +- 13 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 signal/libc_sigaction.c rename sysdeps/mach/hurd/{sigaction.c => libc_sigaction.c} (89%) rename sysdeps/unix/sysv/linux/aarch64/{sigaction.c => libc_sigaction.c} (95%) rename sysdeps/unix/sysv/linux/arc/{sigaction.c => libc_sigaction.c} (95%) rename sysdeps/unix/sysv/linux/arm/{sigaction.c => libc_sigaction.c} (96%) rename sysdeps/unix/sysv/linux/i386/{sigaction.c => libc_sigaction.c} (97%) rename sysdeps/unix/sysv/linux/{sigaction.c => libc_sigaction.c} (98%) rename sysdeps/unix/sysv/linux/sparc/sparc32/{sigaction.c => libc_sigaction.c} (96%) rename sysdeps/unix/sysv/linux/sparc/sparc64/{sigaction.c => libc_sigaction.c} (95%) rename sysdeps/unix/sysv/linux/x86_64/{sigaction.c => libc_sigaction.c} (99%) diff --git a/nptl/Makefile b/nptl/Makefile index bf5ca2e6d2..42d602a870 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -213,6 +213,7 @@ libpthread-routines = \ sem_unlink \ sem_wait \ sigaction \ + libc_sigaction \ tpp \ unwind \ unwind-forcedunwind \ diff --git a/signal/Makefile b/signal/Makefile index 3d8cab1f50..99889a53a4 100644 --- a/signal/Makefile +++ b/signal/Makefile @@ -35,7 +35,7 @@ headers := signal.h sys/signal.h \ bits/sigstksz.h routines := signal raise killpg \ - sigaction sigprocmask kill \ + sigaction libc_sigaction sigprocmask kill \ sigpending sigsuspend sigwait \ sigblock sigsetmask sigpause sigvec \ sigstack sigaltstack sigintr \ diff --git a/signal/libc_sigaction.c b/signal/libc_sigaction.c new file mode 100644 index 0000000000..c25913b9bd --- /dev/null +++ b/signal/libc_sigaction.c @@ -0,0 +1,32 @@ +/* Internal sigaction definitions. + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include + +/* If ACT is not NULL, change the action for SIG to *ACT. + If OACT is not NULL, put the old action for SIG in *OACT. */ +int +__libc_sigaction (int sig, const struct sigaction *act, + struct sigaction *oact) +{ + __set_errno (ENOSYS); + return -1; +} +stub_warning (libc_sigaction) +libc_hidden_def (__libc_sigaction) diff --git a/signal/sigaction.c b/signal/sigaction.c index 3bfc17945c..8d9f755ccc 100644 --- a/signal/sigaction.c +++ b/signal/sigaction.c @@ -17,7 +17,7 @@ #include #include - +#include /* If ACT is not NULL, change the action for SIG to *ACT. If OACT is not NULL, put the old action for SIG in *OACT. */ @@ -30,10 +30,7 @@ __sigaction (int sig, const struct sigaction *act, struct sigaction *oact) return -1; } - __set_errno (ENOSYS); - return -1; + return __libc_sigaction (sig, act, oact); } libc_hidden_def (__sigaction) -stub_warning (sigaction) - weak_alias (__sigaction, sigaction) diff --git a/sysdeps/mach/hurd/sigaction.c b/sysdeps/mach/hurd/libc_sigaction.c similarity index 89% rename from sysdeps/mach/hurd/sigaction.c rename to sysdeps/mach/hurd/libc_sigaction.c index ab91e122b9..29547e2d6a 100644 --- a/sysdeps/mach/hurd/sigaction.c +++ b/sysdeps/mach/hurd/libc_sigaction.c @@ -24,16 +24,15 @@ /* If ACT is not NULL, change the action for SIG to *ACT. If OACT is not NULL, put the old action for SIG in *OACT. */ int -__sigaction (int sig, const struct sigaction *act, struct sigaction *oact) +__libc_sigaction (int sig, const struct sigaction *act, + struct sigaction *oact) { struct hurd_sigstate *ss; struct sigaction a, old; sigset_t pending; - if (sig <= 0 || sig >= NSIG - || (act != NULL && act->sa_handler != SIG_DFL - && ((__sigmask (sig) & _SIG_CANT_MASK) - || act->sa_handler == SIG_ERR))) + if (act != NULL && act->sa_handler != SIG_DFL + && ((__sigmask (sig) & _SIG_CANT_MASK) || act->sa_handler == SIG_ERR)) { errno = EINVAL; return -1; @@ -87,5 +86,4 @@ __sigaction (int sig, const struct sigaction *act, struct sigaction *oact) return 0; } -libc_hidden_def (__sigaction) -weak_alias (__sigaction, sigaction) +libc_hidden_def (__libc_sigaction) diff --git a/sysdeps/unix/sysv/linux/aarch64/sigaction.c b/sysdeps/unix/sysv/linux/aarch64/libc_sigaction.c similarity index 95% rename from sysdeps/unix/sysv/linux/aarch64/sigaction.c rename to sysdeps/unix/sysv/linux/aarch64/libc_sigaction.c index 6f44866ce1..a2a2a17fe9 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sigaction.c +++ b/sysdeps/unix/sysv/linux/aarch64/libc_sigaction.c @@ -27,4 +27,4 @@ #define RESET_SA_RESTORER(act, kact) \ (act)->sa_restorer = (kact)->sa_restorer; -#include +#include diff --git a/sysdeps/unix/sysv/linux/arc/sigaction.c b/sysdeps/unix/sysv/linux/arc/libc_sigaction.c similarity index 95% rename from sysdeps/unix/sysv/linux/arc/sigaction.c rename to sysdeps/unix/sysv/linux/arc/libc_sigaction.c index 2807f74b1b..26da42f04f 100644 --- a/sysdeps/unix/sysv/linux/arc/sigaction.c +++ b/sysdeps/unix/sysv/linux/arc/libc_sigaction.c @@ -28,4 +28,4 @@ extern void __default_rt_sa_restorer (void); #define RESET_SA_RESTORER(act, kact) -#include +#include diff --git a/sysdeps/unix/sysv/linux/arm/sigaction.c b/sysdeps/unix/sysv/linux/arm/libc_sigaction.c similarity index 96% rename from sysdeps/unix/sysv/linux/arm/sigaction.c rename to sysdeps/unix/sysv/linux/arm/libc_sigaction.c index 76a9abebf3..de061312d5 100644 --- a/sysdeps/unix/sysv/linux/arm/sigaction.c +++ b/sysdeps/unix/sysv/linux/arm/libc_sigaction.c @@ -36,4 +36,4 @@ extern void __default_rt_sa_restorer (void); #define RESET_SA_RESTORER(act, kact) \ (act)->sa_restorer = (kact)->sa_restorer; -#include +#include diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/libc_sigaction.c similarity index 97% rename from sysdeps/unix/sysv/linux/i386/sigaction.c rename to sysdeps/unix/sysv/linux/i386/libc_sigaction.c index 46aeca252d..1d6457612a 100644 --- a/sysdeps/unix/sysv/linux/i386/sigaction.c +++ b/sysdeps/unix/sysv/linux/i386/libc_sigaction.c @@ -39,7 +39,7 @@ extern void restore (void) asm ("__restore") attribute_hidden; #define RESET_SA_RESTORER(act, kact) \ (act)->sa_restorer = (kact)->sa_restorer -#include +#include /* NOTE: Please think twice before making any changes to the bits of code below. GDB needs some intimate knowledge about it to diff --git a/sysdeps/unix/sysv/linux/sigaction.c b/sysdeps/unix/sysv/linux/libc_sigaction.c similarity index 98% rename from sysdeps/unix/sysv/linux/sigaction.c rename to sysdeps/unix/sysv/linux/libc_sigaction.c index 38088f9a85..21fe657d1f 100644 --- a/sysdeps/unix/sysv/linux/sigaction.c +++ b/sysdeps/unix/sysv/linux/libc_sigaction.c @@ -70,5 +70,3 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) return result; } libc_hidden_def (__libc_sigaction) - -#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sparc32/libc_sigaction.c similarity index 96% rename from sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c rename to sysdeps/unix/sysv/linux/sparc/sparc32/libc_sigaction.c index f1e07fbb7c..09a052fc05 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc_sigaction.c @@ -34,4 +34,4 @@ void __sigreturn_stub (void); : 0, \ (sigsetsize) -#include +#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sparc64/libc_sigaction.c similarity index 95% rename from sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c rename to sysdeps/unix/sysv/linux/sparc/sparc64/libc_sigaction.c index 2e7f940a4e..6cfcf0a4cb 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc_sigaction.c @@ -29,4 +29,4 @@ void __rt_sigreturn_stub (void); (((unsigned long) &__rt_sigreturn_stub) - 8), \ (sigsetsize) -#include +#include diff --git a/sysdeps/unix/sysv/linux/x86_64/sigaction.c b/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c similarity index 99% rename from sysdeps/unix/sysv/linux/x86_64/sigaction.c rename to sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c index b295037db7..21367e97c1 100644 --- a/sysdeps/unix/sysv/linux/x86_64/sigaction.c +++ b/sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c @@ -30,7 +30,7 @@ extern void restore_rt (void) asm ("__restore_rt") attribute_hidden; #include -#include +#include /* NOTE: Please think twice before making any changes to the bits of code below. GDB needs some intimate knowledge about it to