The GCC manual (ARM Options) states that -mhard-float is "equivalent to
-mfloat-abi=hard".  However that does seem to be the case when it comes to
linking:

$ arm-elf-gcc -mfloat-abi=hard -print-file-name=libc.a
/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib/fpu/libc.a

$ arm-elf-gcc -mhard-float -print-file-name=libc.a
/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib/libc.a

$ arm-elf-gcc -mfloat-abi=hard -v -o hello hello.c
...
COLLECT_GCC_OPTIONS='-mfloat-abi=hard' '-v' '-o' 'hello'
 /usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/bin/as.exe -mfloat-abi=hard -o
/tmp/ccBX7XJa.o /tmp/ccm5rZK3.s
COMPILER_PATH=/usr/lib/gcc/arm-elf/4.5.1/:/usr/lib/gcc/arm-elf/4.5.1/:/usr/lib/gcc/arm-elf/:/usr/lib/gcc/arm-elf/4.5.1/:/usr/lib/gcc/arm-elf/:/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/bin/
LIBRARY_PATH=/usr/lib/gcc/arm-elf/4.5.1/fpu/:/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib/fpu/:/usr/lib/gcc/arm-elf/4.5.1/:/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib/:/usr/arm-elf/sys-root/usr/lib/
COLLECT_GCC_OPTIONS='-mfloat-abi=hard' '-v' '-o' 'hello'
 /usr/lib/gcc/arm-elf/4.5.1/collect2.exe --sysroot=/usr/arm-elf/sys-root -X -o
hello /usr/lib/gcc/arm-elf/4.5.1/fpu/crti.o
/usr/lib/gcc/arm-elf/4.5.1/fpu/crtbegin.o
/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib/fpu/crt0.o
-L/usr/lib/gcc/arm-elf/4.5.1/fpu
-L/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib/fpu
-L/usr/lib/gcc/arm-elf/4.5.1
-L/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib
-L/usr/arm-elf/sys-root/usr/lib /tmp/cc4pxySH.o --start-group -lgcc -lc
--end-group /usr/lib/gcc/arm-elf/4.5.1/fpu/crtend.o
/usr/lib/gcc/arm-elf/4.5.1/fpu/crtn.o


$ arm-elf-gcc -mhard-float -v  -o hello hello.c
...
COLLECT_GCC_OPTIONS='-mhard-float' '-v' '-o' 'hello'
 /usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/bin/as.exe -mfloat-abi=hard -o
/tmp/ccQgFiBi.o /tmp/ccv7qPvG.s
COMPILER_PATH=/usr/lib/gcc/arm-elf/4.5.1/:/usr/lib/gcc/arm-elf/4.5.1/:/usr/lib/gcc/arm-elf/:/usr/lib/gcc/arm-elf/4.5.1/:/usr/lib/gcc/arm-elf/:/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/bin/
LIBRARY_PATH=/usr/lib/gcc/arm-elf/4.5.1/:/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib/:/usr/arm-elf/sys-root/usr/lib/
COLLECT_GCC_OPTIONS='-mhard-float' '-v' '-o' 'hello'
 /usr/lib/gcc/arm-elf/4.5.1/collect2.exe --sysroot=/usr/arm-elf/sys-root -X -o
hello /usr/lib/gcc/arm-elf/4.5.1/crti.o /usr/lib/gcc/arm-elf/4.5.1/crtbegin.o
/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib/crt0.o
-L/usr/lib/gcc/arm-elf/4.5.1
-L/usr/lib/gcc/arm-elf/4.5.1/../../../../arm-elf/lib
-L/usr/arm-elf/sys-root/usr/lib /tmp/ccQgFiBi.o --start-group -lgcc -lc
--end-group /usr/lib/gcc/arm-elf/4.5.1/crtend.o
/usr/lib/gcc/arm-elf/4.5.1/crtn.o


Note that -mhard-float is translated to -mfloat-abi=hard when passed to the
assembler but the fpu "multilibs" aren't added to LIBRARY_PATH, resulting in
linking with the soft-float crt*.o and libraries.


-- 
           Summary: arm: -mhard-float != -mfloat-abi=hard during linking
           Product: gcc
           Version: 4.5.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: yselkowitz at users dot sourceforge dot net
 GCC build triplet: i686-pc-cygwin
  GCC host triplet: i686-pc-cygwin
GCC target triplet: arm-elf


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45360

Reply via email to