From patchwork Mon Feb 26 21:03:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 26091 Received: (qmail 79039 invoked by alias); 26 Feb 2018 21:04:24 -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 77690 invoked by uid 89); 26 Feb 2018 21:04:13 -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=r2, 0 X-HELO: mail-qt0-f195.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=BTN6rCfFWj0B5lk3A0HUW7Wol1AerOCIQypjTi1gqaA=; b=rITk9NJmzSNd8cYwwh05ZeHTojwco7Uhv6qVX0Jx0mJ2/TJ3Pvm2CoAg2IywbG+ZWz zZejzgeTpOuqXAc2ilid3if1KzAyHsPvkUWKSd4PF2X896MYimmj9Lrw6V9yiZWS+49A lUPLsCyuXXmNyfXbaj9oZqyj4NJdBIei8m/8HmnK/Yh/TsxRpB5roevIJ2MUcD9QRLWI 3JG9Yb3vTpT+ahsIXVY8/17d5dybhCOAHPysVUM3pulqdH5oz2XMz+KwI8+QHjI+Dqul 6Gci4GvCBLYoHNJfmDUgPDw3SZLgWel/RBWHk8t4oiq/UfbEho18vvPD5D6VawbqKusx paTA== X-Gm-Message-State: APf1xPDbfQkwa6nX/oLK3uElfhN6t4bSFUPvpXjKfhl1VuEBy6/bUc9S J69j4IRX4QuCAmaFSrnlc9Lw3j4yW94= X-Google-Smtp-Source: AG47ELv3RtqrVc3PXYObR5NzmhGkUEB5F/aPj1Ezp7sxzE4r18RbxSsGwAQ3dVBRHHO5hEsPcyVYqQ== X-Received: by 10.200.43.21 with SMTP id 21mr18869332qtu.98.1519679049686; Mon, 26 Feb 2018 13:04:09 -0800 (PST) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH v2 17/21] nptl: nios2: Fix Race conditions in pthread cancellation (BZ#12683) Date: Mon, 26 Feb 2018 18:03:32 -0300 Message-Id: <1519679016-12241-18-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 nios2 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 NIOS2. With GCC 6.2.1 syscall_cancel.c generates the following code: --- 00000000 <__GI___syscall_cancel_arch>: 0: defffe04 addi sp,sp,-8 4: dd800015 stw r22,0(sp) 8: 002ce03a nextpc r22 c: 02000034 movhi r8,0 10: 42000004 addi r8,r8,0 14: dfc00115 stw ra,4(sp) 18: b22d883a add r22,r22,r8 0000001c <__syscall_cancel_arch_start>: 1c: 20c00017 ldw r3,0(r4) 20: 18c0010c andi r3,r3,4 24: 18000f1e bne r3,zero,64 <__syscall_cancel_arch_end+0x18> 28: 3015883a mov r10,r6 2c: 2805883a mov r2,r5 30: da400517 ldw r9,20(sp) 34: 380b883a mov r5,r7 38: da000417 ldw r8,16(sp) 3c: d9c00317 ldw r7,12(sp) 40: d9800217 ldw r6,8(sp) 44: 5009883a mov r4,r10 48: 003b683a trap 0 0000004c <__syscall_cancel_arch_end>: 4c: 38000126 beq r7,zero,54 <__syscall_cancel_arch_end+0x8> 50: 0085c83a sub r2,zero,r2 54: dfc00117 ldw ra,4(sp) 58: dd800017 ldw r22,0(sp) 5c: dec00204 addi sp,sp,8 60: f800283a ret 64: b0800017 ldw r2,0(r22) 68: 103ee83a callr r2 --- Checked against a build and make check run-built-tests=no for nios2-linux-gnu. [BZ #12683] * sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h (ucontext_get_pc): New function. --- ChangeLog | 4 ++++ sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h b/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h index 57b9b50..7ae735f 100644 --- a/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h +++ b/sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h @@ -16,6 +16,11 @@ License along with the GNU C Library; if not, see . */ +#ifndef _SIGCONTEXTINFO_H +#define _SIGCONTEXTINFO_H + +#include + #include #include "kernel-features.h" @@ -33,3 +38,14 @@ (act)->sa_flags |= SA_SIGINFO; \ (sigaction) (sig, act, oact); \ }) + +static inline uintptr_t +ucontext_get_pc (const ucontext_t *uc) +{ + /* rt_restore_ucontext (arch/nios/kernel/signal.c) sets this position + to 'ea' register which is stated as exception return address (pc) + at arch/nios2/include/asm/ptrace.h. */ + return uc->uc_mcontext.regs[27]; +} + +#endif /* _SIGCONTEXTINFO_H */