From patchwork Mon Feb 26 21:03:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 26082 Received: (qmail 75828 invoked by alias); 26 Feb 2018 21:04:00 -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 75698 invoked by uid 89); 26 Feb 2018 21:03:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.0 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= X-HELO: mail-qt0-f193.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=rIKASI/xqygYPeVZN0MZuyA4i3E0zGIlkJOiUFa81Ow=; b=hDPEPeWiE+v06NYlGxKZg4I7YskWycJlEFNa0HWJo9gw2gYidC+k5BlkuI5PDd9aht x3L0prs1LsRJ9NISM2sDsw5G+Kk/dEmtSL2cWH/Dnvmqi6Uiiviw/0bOvh+a+Ni9TegG 27uuY4Ngpxuy7zbpUvgoRHNAEAxHDvlh28rwy9Wu17uJgBPPul+N9+UHTLKX5FFeXf5v z8KtODl2cqiMiCReVBVWXzpwG3IEArk1KiABNO6jUWxv4dcSWcNNdbc/7aXlKDCi24Ij zREiUilsrya2NQPfjkF5Tw23bFybkK1P2p2igVgjHQT5LKEivvxyHXej2DnjCtVFYNku rb9w== X-Gm-Message-State: APf1xPD9Ou0z0SVLtJnDfihJraqkxp2ADy/ZYgOqxrQ7Ghn3yBXrtw5Z NNofxb38czz/3MBxdt+5CsF63yQSQ2k= X-Google-Smtp-Source: AG47ELuEJbm96PVTIDV6HcV3d5H2jpriCK7zmAmEvEi+f5too6sHvroPc7yWQDeX/8FfqApTcMFb5g== X-Received: by 10.200.24.46 with SMTP id q43mr20235726qtj.309.1519679036167; Mon, 26 Feb 2018 13:03:56 -0800 (PST) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH v2 08/21] nptl: aarch64: Fix Race conditions in pthread cancellation (BZ#12683) Date: Mon, 26 Feb 2018 18:03:23 -0300 Message-Id: <1519679016-12241-9-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 aarch64 modifications required for the BZ#12683. It basically adds the required ucontext_get_pc function. The built cancelable syscall wrapper for aarch64 using GCC 7.2.1 and default configuration flags shows an expected optimized version: --- __GI___syscall_cancel_arch: .LFB38: .cfi_startproc .global __syscall_cancel_arch_start .type __syscall_cancel_arch_start,@function __syscall_cancel_arch_start: ldr w9, [x0] tbnz x9, 2, .L7 mov x8, x1 mov x0, x2 mov x1, x3 mov x2, x4 mov x3, x5 mov x4, x6 mov x5, x7 svc 0 // syscall nr .global __syscall_cancel_arch_end .type __syscall_cancel_arch_end,@function __syscall_cancel_arch_end: ret --- A similar code is obtained with GCC 5.3.1, so I see to need to provide an arch-specific syscall_cancel.S for aarch64. Checked on aarch64-linux-gnu. [BZ #12683] * sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Redefine to call __syscall_cancel function for cancellable syscalls. (__pthread_get_ip): Add implementation. * sysdeps/unix/sysv/linux/aarch64/sysdep.h (SYSCALL_CANCEL_ERROR): Add definition. (SYSCALL_CANCEL_ERRNO): Likewise. --- ChangeLog | 4 ++++ sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h index 04596ef..d9822dc 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h +++ b/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h @@ -16,6 +16,9 @@ License along with the GNU C Library; if not, see . */ +#ifndef _SIGCONTEXTINFO_H +#define _SIGCONTEXTINFO_H + #include #include @@ -33,3 +36,11 @@ (act)->sa_flags |= SA_SIGINFO; \ (sigaction) (sig, act, oact); \ }) + +static inline uintptr_t +ucontext_get_pc (const ucontext_t *uc) +{ + return uc->uc_mcontext.pc; +} + +#endif