From patchwork Mon Feb 26 21:03:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 26095 Received: (qmail 79821 invoked by alias); 26 Feb 2018 21:04:29 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 78439 invoked by uid 89); 26 Feb 2018 21:04:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=ecall X-HELO: mail-qt0-f177.google.com 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; bh=pGdS7T+J55IdDF3aeWRNChY7iBlsxXKcS9ef8mp1vl0=; b=lNkuGlNSy4Nkxtk4oIP25mUVx7lNpWCOePv48xTqpUbKYRR4SLjXoyH/+4/XVu9aG8 bnpciebjzGuCr176uxoCUdHeaFBT2ll7VUHUJwBSR2Es6XVq4nt8B1J4YDI71R+IDRQB slum5lGDzfFKONCBIbHrmth6gCsojBKD3/TsVAfxJ96yZ2UgagX2ohQCeRWj/GkvCchd NQ7hquDrXOSTlMUCNI/66GCZJoN579TluljBaw7g9zCnIWSmOFd/ZoiJkspxyOaOpRcd +8sDwc/H+qgMpB9TtN6Mz/Zxc0BI3bbWfWKinHd9qH/M+bxqhEerS+ljU64dy03R4Pre PL+g== X-Gm-Message-State: APf1xPD8wA5VEt3vJGAY/35H/+bx9aBT8hW0+DJ0bnKvk4UJSqicXyja 0NHNC4ZSLd9gFCjCnZT0HF4ZILiXgfk= X-Google-Smtp-Source: AG47ELsqHFIUcozGdfkOclBwFNrzxtWXP1Ltunw6lX8UH0J1hK/vU1fZ+LgqBCqRMgBOlPvNpUR0lg== X-Received: by 10.200.34.209 with SMTP id g17mr18745953qta.93.1519679054721; Mon, 26 Feb 2018 13:04:14 -0800 (PST) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH v2 21/21] nptl: riscv: Fix Race conditions in pthread cancellation (BZ#12683) Date: Mon, 26 Feb 2018 18:03:36 -0300 Message-Id: <1519679016-12241-22-git-send-email-adhemerval.zanella@linaro.org> In-Reply-To: <1519679016-12241-1-git-send-email-adhemerval.zanella@linaro.org> References: <1519679016-12241-1-git-send-email-adhemerval.zanella@linaro.org> This patch adds the riscv modifications required for the BZ#12683. It basically adds the required ucontext_get_pc function. The default syscall_cancel.c should be as expected for RISCV. With GCC 7.3.1 syscall_cancel.c generates the following code: 0000000000000000 <__GI___syscall_cancel_arch>: 0: 8346 mv t1,a7 0000000000000002 <__syscall_cancel_arch_start>: 2: 00052883 lw a7,0(a0) 6: 0048f893 andi a7,a7,4 a: 00089c63 bnez a7,22 <.L0 > e: 88ae mv a7,a1 10: 8532 mv a0,a2 12: 85b6 mv a1,a3 14: 863a mv a2,a4 16: 86be mv a3,a5 18: 8742 mv a4,a6 1a: 879a mv a5,t1 1c: 00000073 ecall 0000000000000020 <__syscall_cancel_arch_end>: 20: 8082 ret 22: 1141 addi sp,sp,-16 24: e406 sd ra,8(sp) 26: 00000097 auipc ra,0x0 2a: 000080e7 jalr ra # 26 <.L0 > Checked with a build for riscv64-linux-gnu with run-built-tests=no. [BZ #12683] * sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h (ucontext_get_pc): New fuction. --- ChangeLog | 4 ++++ sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h b/sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h index 3ca8a80..5a68ff8 100644 --- a/sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h +++ b/sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h @@ -16,6 +16,10 @@ License along with the GNU C Library. If not, see . */ +#ifndef _SIGCONTEXTINFO_H +#define _SIGCONTEXTINFO_H + +#include #include #define SIGCONTEXT siginfo_t *_si, ucontext_t * @@ -26,3 +30,11 @@ #define CALL_SIGHANDLER(handler, signo, ctx) \ (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) + +static inline uintptr_t +ucontext_get_pc (const ucontext_t *uc) +{ + return uc->uc_mcontext.__gregs[REG_PC]; +} + +#endif /* _SIGCONTEXTINFO_H */