From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1837 invoked by alias); 23 Jul 2003 18:35:10 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 1395 invoked from network); 23 Jul 2003 18:34:57 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 23 Jul 2003 18:34:57 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h6NIYvH13589; Wed, 23 Jul 2003 14:34:57 -0400 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h6NIYvI09746; Wed, 23 Jul 2003 14:34:57 -0400 Received: from localhost.localdomain.redhat.com (vpn50-30.rdu.redhat.com [172.16.50.30]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h6NIYqv26390; Wed, 23 Jul 2003 14:34:54 -0400 To: Doug Evans Cc: gcc-bugs@gcc.gnu.org, binutils@sources.redhat.com Subject: Re: arm-elf snafu? can't mix default-soft-float, explicit -msoft-float References: <20030722171600.A3F84B53E@mail.sebabeach.org> From: Nick Clifton In-Reply-To: <20030722171600.A3F84B53E@mail.sebabeach.org> (Doug Evans's message of "Tue, 22 Jul 2003 10:16:00 -0700 (PDT)") User-Agent: Gnus/5.1001 (Gnus v5.10.1) Emacs/21.2 (gnu/linux) Date: Wed, 23 Jul 2003 18:35:00 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2003-07/txt/msg02732.txt.bz2 List-Id: Hi Doug, > Simple testcase: > > bash$ rm foo1.c foo2.c ; touch foo1.c foo2.c > bash$ arm-elf-gcc -c foo1.c > bash$ arm-elf-objdump -p foo1.o > foo1.o: file format elf32-littlearm > private flags = 0: [APCS-32] [FPA float format] > bash$ arm-elf-gcc -c foo2.c -msoft-float > foo1.o: file format elf32-littlearm > private flags = 200: [APCS-32] [FPA float format] [software FP] > bash$ arm-elf-gcc -nostdlib foo1.o foo2.o > [links successfully] > bash$ arm-elf-gcc -nostdlib foo2.o foo1.o > /samantha/gnu-pure/rel/lib/gcc-lib/arm-elf/3.4/../../../../arm-elf/bin/ld: ERROR: foo1.o uses hardware FP, whereas a.out uses software FP > This line in gcc/config/arm/elf.h > > #ifndef SUBTARGET_ASM_FLOAT_SPEC > #define SUBTARGET_ASM_FLOAT_SPEC "\ > %{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}" > #endif I think that this is the problem. If you apply the patch below for example, then arm-elf targets will always pass -mfpu=softfpa to GAS, unless -mhard-float is specfied, whereas the arm-linux toolchain will always pass an explicit -mfpu=fpa unless -msoft-float is specified. What do you think ? Cheers Nick gcc/ChangeLog 2003-07-23 Nick Clifton * config/arm/elf.h (SUBTARGET_ASM_FLOAT_SPEC): Pass -mfpu=softfpa to GAS by default. * config/arm/linux-elf.h (SUBTARGET_ASM_FLOAT_SPEC): Define. Pass -mfpu=fpa to GAS by default. Index: gcc/config/arm/elf.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/arm/elf.h,v retrieving revision 1.44 diff -c -3 -p -r1.44 elf.h *** gcc/config/arm/elf.h 19 Jun 2003 21:47:06 -0000 1.44 --- gcc/config/arm/elf.h 23 Jul 2003 18:32:24 -0000 *************** *** 46,52 **** #ifndef SUBTARGET_ASM_FLOAT_SPEC #define SUBTARGET_ASM_FLOAT_SPEC "\ ! %{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}" #endif #ifndef ASM_SPEC --- 46,52 ---- #ifndef SUBTARGET_ASM_FLOAT_SPEC #define SUBTARGET_ASM_FLOAT_SPEC "\ ! %{mapcs-float:-mfloat} %{!mhard-float:-mfpu=softfpa} %{mhard-float:-mfpu=fpa}" #endif #ifndef ASM_SPEC Index: gcc/config/arm/linux-elf.h =================================================================== RCS file: /cvs/gcc/gcc/gcc/config/arm/linux-elf.h,v retrieving revision 1.40 diff -c -3 -p -r1.40 linux-elf.h *** gcc/config/arm/linux-elf.h 14 Jun 2003 17:11:57 -0000 1.40 --- gcc/config/arm/linux-elf.h 23 Jul 2003 18:32:24 -0000 *************** *** 40,45 **** --- 40,49 ---- #define MULTILIB_DEFAULTS \ { "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" } + #undef SUBTARGET_ASM_FLOAT_SPEC + #define SUBTARGET_ASM_FLOAT_SPEC "\ + %{mapcs-float:-mfloat} %{!msoft-float:-mfpu=fpa} %{msoft-float:-mfpu=softfpa}" + #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" /* The GNU C++ standard library requires that these macros be defined. */