From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32681 invoked by alias); 23 May 2012 07:13:46 -0000 Received: (qmail 32660 invoked by uid 22791); 23 May 2012 07:13:43 -0000 X-SWARE-Spam-Status: No, hits=-6.6 required=5.0 tests=AWL,BAYES_00,FRT_OFFER2,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W X-Spam-Check-By: sourceware.org Received: from cantor2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 23 May 2012 07:13:28 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id 4A11C979ED; Wed, 23 May 2012 09:13:27 +0200 (CEST) Message-ID: <4FBC8DCB.6020006@suse.com> Date: Wed, 23 May 2012 07:13:00 -0000 From: Andreas Jaeger User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120421 Thunderbird/12.0 MIME-Version: 1.0 To: Richard Earnshaw Cc: Michael Hope , "cross-distro@lists.linaro.org" , Carlos O'Donell , GCC Patches , "libc-ports@sourceware.org" , Richard Guenther Subject: Re: [PATCH v2] ARM: Use different linker path for hardfloat ABI References: <4F9576DE.9070608@arm.com> <4F9EAE9D.3040509@arm.com> <4F9FA448.6090509@arm.com> In-Reply-To: <4F9FA448.6090509@arm.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit 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: 2012-05/txt/msg00133.txt.bz2 On 05/01/2012 10:52 AM, Richard Earnshaw wrote: > On 30/04/12 22:47, Michael Hope wrote: >> On 1 May 2012 03:24, Richard Earnshaw wrote: >>> On 27/04/12 00:27, Michael Hope wrote: >>>> On 27 April 2012 08:20, Carlos O'Donell wrote: >>>>> On Mon, Apr 23, 2012 at 5:36 PM, Michael Hope wrote: >>>>>> 2012-04-24 Michael Hope >>>>>> Richard Earnshaw >>>>>> >>>>>> * config/arm/linux-eabi.h (GLIBC_DYNAMIC_LINKER_SOFT_FLOAT): Define. >>>>>> (GLIBC_DYNAMIC_LINKER_HARD_FLOAT): Define. >>>>>> (GLIBC_DYNAMIC_LINKER_DEFAULT): Define. >>>>>> (GLIBC_DYNAMIC_LINKER): Redefine to use the hard float path. >>>>>> >>>>>> diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h >>>>>> index 80bd825..2ace6f0 100644 >>>>>> --- a/gcc/config/arm/linux-eabi.h >>>>>> +++ b/gcc/config/arm/linux-eabi.h >>>>>> @@ -62,7 +62,17 @@ >>>>>> /* Use ld-linux.so.3 so that it will be possible to run "classic" >>>>>> GNU/Linux binaries on an EABI system. */ >>>>>> #undef GLIBC_DYNAMIC_LINKER >>>>>> -#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.3" >>>>>> +#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "/lib/ld-linux.so.3" >>>>>> +#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT "/lib/ld-linux-armhf.so.3" >>>>>> +#if TARGET_DEFAULT_FLOAT_ABI == ARM_FLOAT_ABI_HARD >>>>>> +#define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_HARD_FLOAT >>>>>> +#else >>>>>> +#define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT >>>>>> +#endif >>>>>> +#define GLIBC_DYNAMIC_LINKER \ >>>>>> + "%{mfloat-abi=hard:" GLIBC_DYNAMIC_LINKER_HARD_FLOAT "} \ >>>>>> + %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \ >>>>>> + %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}" >>>>>> >>>>>> /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to >>>>>> use the GNU/Linux version, not the generic BPABI version. */ >>>>> >>>>> This patch is broken. Please fix this. >>>>> >>>>> You can't use a named enumeration in cpp equality. >>>>> >>>>> The type ARM_FLOAT_ABI_HARD is a named enumeration and evaluates to 0 >>>>> as an unknown identifier. >>>>> >>>>> Therefore "#if TARGET_DEFAULT_FLOAT_ABI == ARM_FLOAT_ABI_HARD" >>>>> evaluates to "#if 0 == 0" and is always true. >>>>> >>>>> Watch out that "#define ARM_FLOAT_ABI_HARD ARM_FLOAT_ABI_HARD" for >>>>> such enums is not conforming C99/C11. >>>>> >>>>> I suggest you define the types as macros and then set the named enum >>>>> to those values, then use the macros in the header equality checks. >>>>> >>>>> e.g. >>>>> #define VAL1 0 then enum FOO { RVAL1 = VAL1, ... } >>>>> >>>>> Look at arm.h for the enum definition. >>>> >>>> I've looked further into this and I think the original pre-#if version >>>> is correct. >>>> >>>> The float ABI comes from these places: >>>> * The -mfloat-abi= command line argument, else >>>> * The --with-float= configure time argument, else >>>> * TARGET_DEFAULT_FLOAT_ABI from linux-eabi.h >>>> >>>> In the first case the ABI is explicit. In the second >>>> OPTION_DEFAULT_SPECS turns the configure time argument into an explict >>>> -mfloat-abi=. >>>> >>>> The patch below covers all cases, keeps the logic in the spec file, >>>> and adds a comment linking the two #defines. >>>> >>>> Tested by building with no configure flags, --wtih-float=softfp, >>>> --with-float=hard, and then running with all combinations of >>>> {,-mfloat-abi=softfp,-mfloat-abi=hard} {,-mglibc,-muclibc,-mbionic}. >>>> >>>> OK? >>>> >>>> -- Michael >>>> >>>> 2012-04-27 Michael Hope >>>> >>>> * config/arm/linux-eabi.h (GLIBC_DYNAMIC_LINKER): Pick the loader >>>> using a spec rule. >>>> >>> >>> Michael, >>> >>> can you try this patch please. It should make it possible to then >>> create linux-eabihf.h containing just >>> >>> #undef TARGET_DEFAULT_FLOAT_ABI >>> #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD >>> #undef GLIBC_DYNAMIC_LINKER_DEFAULT >>> #define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_HARD_FLOAT >>> >>> Which is not quite as simple as leaving out the second re-define, but >>> pretty close. >> >> Hi Richard. Your patch tests just fine. I like it. You could change >> the spec rule to the newer if-elseif-else form but that's a nit. >> >> -- Michael >> > > Great, thanks! I've committed it as is. I suggest to add this also to the gcc 4.7 branch. Richard (Earnshaw), could you do take care of this, please? Thanks, Andreas -- Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg) GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126