From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26763 invoked by alias); 1 Mar 2013 17:36:16 -0000 Received: (qmail 26396 invoked by uid 22791); 1 Mar 2013 17:36:06 -0000 X-SWARE-Spam-Status: No, hits=-5.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_BL X-Spam-Check-By: sourceware.org Received: from mail-da0-f48.google.com (HELO mail-da0-f48.google.com) (209.85.210.48) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 01 Mar 2013 17:35:51 +0000 Received: by mail-da0-f48.google.com with SMTP id w4so1483054dam.21 for ; Fri, 01 Mar 2013 09:35:50 -0800 (PST) X-Received: by 10.66.76.37 with SMTP id h5mr20169063paw.33.1362159350875; Fri, 01 Mar 2013 09:35:50 -0800 (PST) Received: from fremont.twiddle.net (50-194-63-110-static.hfc.comcastbusiness.net. [50.194.63.110]) by mx.google.com with ESMTPS id kl4sm12679430pbc.31.2013.03.01.09.35.48 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 01 Mar 2013 09:35:50 -0800 (PST) From: Richard Henderson To: libc-ports@sourceware.org Cc: joseph@codesourcery.com Subject: [PATCH v2 09/14] arm: Tidy architecture selection Date: Fri, 01 Mar 2013 17:36:00 -0000 Message-Id: <1362159320-5934-10-git-send-email-rth@twiddle.net> In-Reply-To: <1362159320-5934-1-git-send-email-rth@twiddle.net> References: <1362159320-5934-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-03/txt/msg00002.txt.bz2 --- * sysdeps/arm/sysdep.h (__ARM_ARCH): New macro. (ARCH_HAS_BX, ARCH_HAS_BLX, ARCH_HAS_T2): New macros. (BX): Select on ARCH_HAS_BX instead of __USE_BX__. (BLX): Select on ARCH_HAS_BLX instead of __ARM_ARCH_4T__. * ports/sysdeps/arm/dl-machine.h (BX): Select on ARCH_HAS_BX instead of __USE_BX__. --- ports/sysdeps/arm/dl-machine.h | 2 +- ports/sysdeps/arm/sysdep.h | 41 ++++++++++++++++++++++++++++++++++------- 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/ports/sysdeps/arm/dl-machine.h b/ports/sysdeps/arm/dl-machine.h index 30ad46c..5a424f8 100644 --- a/ports/sysdeps/arm/dl-machine.h +++ b/ports/sysdeps/arm/dl-machine.h @@ -136,7 +136,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) return lazy; } -#if defined(__USE_BX__) +#if defined(ARCH_HAS_BX) #define BX(x) "bx\t" #x #else #define BX(x) "mov\tpc, " #x diff --git a/ports/sysdeps/arm/sysdep.h b/ports/sysdeps/arm/sysdep.h index 84313fe..c09e680 100644 --- a/ports/sysdeps/arm/sysdep.h +++ b/ports/sysdeps/arm/sysdep.h @@ -19,9 +19,36 @@ #include #include -#if (!defined (__ARM_ARCH_2__) && !defined (__ARM_ARCH_3__) \ - && !defined (__ARM_ARCH_3M__) && !defined (__ARM_ARCH_4__)) -# define __USE_BX__ +/* The __ARM_ARCH define is provided by gcc 4.8. Construct it otherwise. */ +#ifndef __ARM_ARCH +# ifdef __ARM_ARCH_2__ +# define __ARM_ARCH 2 +# elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) +# define __ARM_ARCH 3 +# elif defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) +# define __ARM_ARCH 4 +# elif defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) \ + defined(__ARM_ARCH_5TEJ__) +# define __ARM_ARCH 5 +# elif defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6ZK__) \ + defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) +# define __ARM_ARCH 6 +# elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) \ + defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) +# define __ARM_ARCH 7 +# else +# error unknown arm architecture +# endif +#endif + +#if __ARM_ARCH > 4 || defined(__ARM_ARCH_4T__) +# define ARCH_HAS_BX +#endif +#if __ARM_ARCH > 4 +# define ARCH_HAS_BLX +#endif +#if __ARM_ARCH > 6 || defined(__ARM_ARCH_6T2__) +# define ARCH_HAS_T2 #endif #ifdef __ASSEMBLER__ @@ -33,13 +60,13 @@ #define PLTJMP(_x) _x##(PLT) -#ifdef __USE_BX__ +#ifdef ARCH_HAS_BX # define BX(R) bx R # define BXC(C, R) bx##C R -# ifdef __ARM_ARCH_4T__ -# define BLX(R) mov lr, pc; bx R -# else +# ifdef ARCH_HAS_BLX # define BLX(R) blx R +# else +# define BLX(R) mov lr, pc; bx R # endif #else # define BX(R) mov pc, R -- 1.8.1.2