From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27734 invoked by alias); 27 Feb 2013 03:17:16 -0000 Received: (qmail 27639 invoked by uid 22791); 27 Feb 2013 03:17:13 -0000 X-SWARE-Spam-Status: No, hits=-5.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_SPAMHAUS_DROP,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-pa0-f48.google.com (HELO mail-pa0-f48.google.com) (209.85.220.48) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 27 Feb 2013 03:17:04 +0000 Received: by mail-pa0-f48.google.com with SMTP id hz10so136174pad.7 for ; Tue, 26 Feb 2013 19:17:03 -0800 (PST) X-Received: by 10.66.79.231 with SMTP id m7mr5165371pax.76.1361935023574; Tue, 26 Feb 2013 19:17:03 -0800 (PST) Received: from pebble.twiddle.net (50-194-63-110-static.hfc.comcastbusiness.net. [50.194.63.110]) by mx.google.com with ESMTPS id pp1sm265271pac.7.2013.02.26.19.17.01 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 26 Feb 2013 19:17:02 -0800 (PST) From: Richard Henderson To: libc-ports@sourceware.org Cc: Joseph Myers Subject: [PATCH 18/26] arm: Use GET_TLS more often Date: Wed, 27 Feb 2013 03:17:00 -0000 Message-Id: <1361934986-17018-19-git-send-email-rth@twiddle.net> In-Reply-To: <1361934986-17018-1-git-send-email-rth@twiddle.net> References: <1361934986-17018-1-git-send-email-rth@twiddle.net> X-IsSubscribed: yes Mailing-List: contact libc-ports-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: libc-ports-owner@sourceware.org X-SW-Source: 2013-02/txt/msg00091.txt.bz2 --- * sysdeps/arm/dl-tlsdesc.S (_dl_tlsdesc_undefweak): Use GET_TLS, save LR in R1, and return directly from R1. (_dl_tlsdesc_dynamic): Use GET_TLS. * sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h (SINGLE_THREAD_P): Use GET_TLS. --- ports/sysdeps/arm/dl-tlsdesc.S | 23 +++++++--------------- .../unix/sysv/linux/arm/nptl/sysdep-cancel.h | 2 +- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/ports/sysdeps/arm/dl-tlsdesc.S b/ports/sysdeps/arm/dl-tlsdesc.S index 6c47743..12214f1 100644 --- a/ports/sysdeps/arm/dl-tlsdesc.S +++ b/ports/sysdeps/arm/dl-tlsdesc.S @@ -44,22 +44,13 @@ _dl_tlsdesc_return: .fnstart .align 2 _dl_tlsdesc_undefweak: - @ Are we allowed a misaligned stack pointer calling read_tp? - .save {lr} - push {lr} - cfi_adjust_cfa_offset (4) - cfi_rel_offset (lr,0) - bl __aeabi_read_tp + @ ??? The only GET_TLS implementation in tree is Linux, + @ which is guaranteed to clobber only R0 and LR. + mov r1, lr + cfi_register (lr, r1) + GET_TLS rsb r0, r0, #0 -#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) - pop {lr} - cfi_adjust_cfa_offset (-4) - cfi_restore (lr) - bx lr -#else - pop {pc} -#endif - + BX (r1) cfi_endproc .fnend .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak @@ -104,7 +95,7 @@ _dl_tlsdesc_dynamic: cfi_rel_offset (r4,8) cfi_rel_offset (lr,12) ldr r1, [r0] /* td */ - bl __aeabi_read_tp + GET_TLS mov r4, r0 /* r4 = tp */ ldr r0, [r0] ldr r2, [r1, #8] /* gen_count */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h index f0f7043..c2ab0ce 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h +++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h @@ -220,7 +220,7 @@ extern int __local_multiple_threads attribute_hidden; push {r0, lr}; \ cfi_adjust_cfa_offset (8); \ cfi_rel_offset (lr, 4); \ - bl __aeabi_read_tp; \ + GET_TLS; \ NEGOFF_ADJ_BASE(r0, MULTIPLE_THREADS_OFFSET); \ ldr ip, NEGOFF_OFF1(r0, MULTIPLE_THREADS_OFFSET); \ pop {r0, lr}; \ -- 1.8.1.2