From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27882 invoked by alias); 27 Feb 2013 03:17:22 -0000 Received: (qmail 27839 invoked by uid 22791); 27 Feb 2013 03:17:19 -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-pb0-f51.google.com (HELO mail-pb0-f51.google.com) (209.85.160.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 27 Feb 2013 03:17:04 +0000 Received: by mail-pb0-f51.google.com with SMTP id un15so72359pbc.38 for ; Tue, 26 Feb 2013 19:17:01 -0800 (PST) X-Received: by 10.68.197.103 with SMTP id it7mr1034775pbc.76.1361935021838; Tue, 26 Feb 2013 19:17:01 -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.00 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 26 Feb 2013 19:17:00 -0800 (PST) From: Richard Henderson To: libc-ports@sourceware.org Cc: Joseph Myers Subject: [PATCH 17/26] arm: Unless arm4t, pop return address directly into pc Date: Wed, 27 Feb 2013 03:17:00 -0000 Message-Id: <1361934986-17018-18-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/msg00086.txt.bz2 Unless we're trying old interworking, there's no point restoring to LR first. Everthing from armv5 on handles pop as an interworking jump. --- * sysdeps/arm/arm-mcount.S (_mcount): Use pop into pc unless __ARM_ARCH_4T__ and __THUMB_INTERWORK__. * sysdeps/arm/dl-tlsdesc.S (_dl_tlsdesc_undefweak): Likewise. (_dl_tlsdesc_dynamic): Likewise. --- ports/sysdeps/arm/arm-mcount.S | 6 +++--- ports/sysdeps/arm/dl-tlsdesc.S | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ports/sysdeps/arm/arm-mcount.S b/ports/sysdeps/arm/arm-mcount.S index b6e5ec7..8ad0779 100644 --- a/ports/sysdeps/arm/arm-mcount.S +++ b/ports/sysdeps/arm/arm-mcount.S @@ -82,9 +82,7 @@ ENTRY(_mcount) ldrne r0, [r0, #-4] movsne r1, lr blne __mcount_internal -#ifdef __thumb2__ - pop {r0, r1, r2, r3, fp, pc} -#else +#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) pop {r0, r1, r2, r3, fp, lr} cfi_adjust_cfa_offset (-24) cfi_restore (r0) @@ -94,6 +92,8 @@ ENTRY(_mcount) cfi_restore (fp) cfi_restore (lr) bx lr +#else + pop {r0, r1, r2, r3, fp, pc} #endif END(_mcount) diff --git a/ports/sysdeps/arm/dl-tlsdesc.S b/ports/sysdeps/arm/dl-tlsdesc.S index 417b8b3..6c47743 100644 --- a/ports/sysdeps/arm/dl-tlsdesc.S +++ b/ports/sysdeps/arm/dl-tlsdesc.S @@ -51,10 +51,14 @@ _dl_tlsdesc_undefweak: cfi_rel_offset (lr,0) bl __aeabi_read_tp rsb r0, r0, #0 +#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) pop {lr} cfi_adjust_cfa_offset (-4) cfi_restore (lr) - BX (lr) + bx lr +#else + pop {pc} +#endif cfi_endproc .fnend @@ -118,13 +122,18 @@ _dl_tlsdesc_dynamic: 1: mov r0, r1 bl __tls_get_addr rsb r0, r4, r0 -2: pop {r2,r3,r4, lr} +2: +#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) + pop {r2,r3,r4, lr} cfi_adjust_cfa_offset (-16) cfi_restore (lr) cfi_restore (r4) cfi_restore (r3) cfi_restore (r2) - BX (lr) + bx lr +#else + pop {r2,r3,r4, pc} +#endif .fnend cfi_endproc .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic -- 1.8.1.2