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