From patchwork Fri May 23 15:17:17 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Will Newton X-Patchwork-Id: 1102 Return-Path: X-Original-To: siddhesh@wilcox.dreamhost.com Delivered-To: siddhesh@wilcox.dreamhost.com Received: from homiemail-mx21.g.dreamhost.com (mx2.sub5.homie.mail.dreamhost.com [208.113.200.128]) by wilcox.dreamhost.com (Postfix) with ESMTP id B44DB360073 for ; Fri, 23 May 2014 08:54:25 -0700 (PDT) Received: by homiemail-mx21.g.dreamhost.com (Postfix, from userid 14307373) id 5232119FF398; Fri, 23 May 2014 08:17:33 -0700 (PDT) X-Original-To: glibc@patchwork.siddhesh.in Delivered-To: x14307373@homiemail-mx21.g.dreamhost.com Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by homiemail-mx21.g.dreamhost.com (Postfix) with ESMTPS id E43061C0BB01 for ; Fri, 23 May 2014 08:17:32 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id; q=dns; s= default; b=MD5MJiZPLZSdtgtocngST5qacrE1QSdDdhCINM7kYzHEJ53/W3GJU VY4BoZe6FpAIr+AFs7uf2kuZH8qd+OUuGhUl+s39dIJGPvYU3Qm6Z/lRv1ar9bZV bmrbXjI+OZb7shYz5RM5xowqArHtmY3+VREnACtyCDqACHpsbLKxaM= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id; s=default; bh=o4yYHAsVbQLdEgp0QLKG7w1CdZc=; b=ju1DxjgMQsMFMeUHCFzzqEsdoIf/ Wmgmr5GIYaXDfh2AfyFMO63cRLTJqnCPjLr930YRpj8D3MKhjSc3qn0EZ96vgXnA t2ywneAfJURnGhln6Ng687sDkuPxCybrFvejwWoL1DzJFt99C2HS+e1LJukZ10Vh D96TiQ6m5NTVd7s= Received: (qmail 14712 invoked by alias); 23 May 2014 15:17:30 -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 14697 invoked by uid 89); 23 May 2014 15:17:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wg0-f41.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=NQ2kqyBD5iwEndM/wSjM4Ka5WTkFG4wWbGi8Lig8rKc=; b=exOM2esRV/d3KzbFsG7QYydiqWzOekATa0GMhO3nUuK4w2hPtIxOUZic5AdriMXCSx BJPsF+VR+mxnczEYYojTQbxQvxWRbif3va2OTDTaEjfNF7H1zmfNJsTsZcRM7FFefk/B ukQVxL/SFadkpl7LEUHV9V9NZ2W5ZcqcjwmWGFb/LrdBqaUG29N1UxtehFrwQXwE4s6q LSqVHc6gy4v1F6z1YI+Uteom1OZSEYFMCAIncgjGnAfVTk9zx+/nHE0vy0HKl39M6F8V Znyym8VLUaGYv25lLxVvutcaMvDv5WPh4UGKx04mM88d2uoq75xvt3vQQlpUzuz5ynBl bRiQ== X-Gm-Message-State: ALoCoQncYnYNnw0LDm2/4/ru24XPiA3aORlrncn0o30+gz0H4O++WqAwJDUGGBopUAE1Dad1S9Yx X-Received: by 10.194.80.7 with SMTP id n7mr5018073wjx.8.1400858245167; Fri, 23 May 2014 08:17:25 -0700 (PDT) From: Will Newton To: libc-alpha@sourceware.org Subject: [PATCH] ARM: Fix handling of concurrent TLS descriptor resolution Date: Fri, 23 May 2014 16:17:17 +0100 Message-Id: <1400858237-4516-1-git-send-email-will.newton@linaro.org> X-DH-Original-To: glibc@patchwork.siddhesh.in The current code for handling concurrent resolution says that the ABI for _dl_tlsdesc_resolve_hold is the same as that of _dl_tlsdesc_lazy_resolver. However _dl_tlsdesc_resolve_hold is called from the trampoline directly rather than the lazy resolver stub so, for example, r2 has not been pushed so does not needed to be restored. This fixes an intermittent failure in nptl/tst-tls3 when building glibc for arm-linux-gnueabihf with -mtls-dialect=gnu2. ChangeLog: 2014-05-23 Will Newton * sysdeps/arm/dl-tlsdesc.S (_dl_tlsdesc_resolve_hold): Save and restore r2 rather than just restoring. --- sysdeps/arm/dl-tlsdesc.S | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/sysdeps/arm/dl-tlsdesc.S b/sysdeps/arm/dl-tlsdesc.S index 1644a32..e87e7fb 100644 --- a/sysdeps/arm/dl-tlsdesc.S +++ b/sysdeps/arm/dl-tlsdesc.S @@ -186,7 +186,9 @@ _dl_tlsdesc_lazy_resolver: .size _dl_tlsdesc_lazy_resolver, .-_dl_tlsdesc_lazy_resolver /* Holder for lazy tls descriptors being resolve in another thread. - Same ABI as the lazy resolver itself. */ + + Our calling convention is to clobber r0, r1 and the processor + flags. All others that are modified must be saved */ .hidden _dl_tlsdesc_resolve_hold .global _dl_tlsdesc_resolve_hold .type _dl_tlsdesc_resolve_hold,#function @@ -194,29 +196,20 @@ _dl_tlsdesc_lazy_resolver: eabi_fnstart .align 2 _dl_tlsdesc_resolve_hold: - /* Tell the unwinder that r2 has already been pushed. */ - eabi_save ({r2}) - cfi_adjust_cfa_offset (4) + eabi_save ({r2,r3,ip,lr}) + push {r2, r3, ip, lr} + cfi_adjust_cfa_offset (16) cfi_rel_offset (r2, 0) - eabi_save ({r0,r1,r3,ip,lr}) - push {r0, r1, r3, ip, lr} - cfi_adjust_cfa_offset (20) - cfi_rel_offset (r0, 0) - cfi_rel_offset (r1, 4) - cfi_rel_offset (r3, 8) - cfi_rel_offset (ip, 12) - cfi_rel_offset (lr, 16) - adr r2, _dl_tlsdesc_resolve_hold + cfi_rel_offset (r3, 4) + cfi_rel_offset (ip, 8) + cfi_rel_offset (lr, 12) + adr r1, _dl_tlsdesc_resolve_hold bl _dl_tlsdesc_resolve_hold_fixup - pop {r0, r1, r3, ip, lr} - cfi_adjust_cfa_offset (-20) + pop {r2, r3, ip, lr} + cfi_adjust_cfa_offset (-16) cfi_restore (lr) cfi_restore (ip) cfi_restore (r3) - cfi_restore (r1) - cfi_restore (r0) - pop {r2} - cfi_adjust_cfa_offset (-4) cfi_restore (r2) sfi_breg r0, \ ldr r1, [\B, #4]