The hunk for gcc/config/arm/t-linux comes from: http://gcc.gnu.org/PR14352 The rest is a custom job by Yuri Vasilevski. The idea here is that we add soft float support into the spec file so that we don't have to worry about packages stripping out softfloat flags from CFLAGS/CXXFLAGS. http://bugs.gentoo.org/75585 --- gcc-4.0.2/gcc/config/arm/elf.h +++ gcc-4.0.2/gcc/config/arm/elf.h @@ -45,8 +45,9 @@ #endif #ifndef SUBTARGET_ASM_FLOAT_SPEC -#define SUBTARGET_ASM_FLOAT_SPEC "\ -%{mapcs-float:-mfloat}" +#define SUBTARGET_ASM_FLOAT_SPEC "%{mapcs-float:-mfloat} \ + %{mhard-float:-mfpu=fpa} \ + %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}" #endif #ifndef ASM_SPEC @@ -58,8 +59,6 @@ %{mapcs-*:-mapcs-%*} \ %(subtarget_asm_float_spec) \ %{mthumb-interwork:-mthumb-interwork} \ -%{msoft-float:-mfloat-abi=soft} %{mhard-float:-mfloat-abi=hard} \ -%{mfloat-abi=*} %{mfpu=*} \ %(subtarget_extra_asm_spec)" #endif --- gcc-4.0.2/gcc/config/arm/linux-elf.h +++ gcc-4.0.2/gcc/config/arm/linux-elf.h @@ -32,18 +32,22 @@ #endif #undef TARGET_DEFAULT_FLOAT_ABI -#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD +#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT #undef TARGET_DEFAULT #define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT) +#undef SUBTARGET_EXTRA_ASM_SPEC +#define SUBTARGET_EXTRA_ASM_SPEC "%{mhard-float:-mfpu=fpa} \ + %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}" + #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6 #define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p" #undef MULTILIB_DEFAULTS #define MULTILIB_DEFAULTS \ - { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" } + { "marm", TARGET_ENDIAN_OPTION, "msoft-float", "mno-thumb-interwork" } /* The GNU C++ standard library requires that these macros be defined. */ #undef CPLUSPLUS_CPP_SPEC @@ -56,7 +60,7 @@ %{shared:-lc} \ %{!shared:%{profile:-lc_p}%{!profile:-lc}}" -#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc" +#define LIBGCC_SPEC "-lgcc" /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add the GNU/Linux magical crtbegin.o file (see crtstuff.c) which --- gcc-4.0.2/gcc/config/arm/t-linux +++ gcc-4.0.2/gcc/config/arm/t-linux @@ -4,7 +4,10 @@ TARGET_LIBGCC2_CFLAGS = -fomit-frame-poi LIBGCC2_DEBUG_CFLAGS = -g0 LIB1ASMSRC = arm/lib1funcs.asm -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx +LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \ + _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ + _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ + _fixsfsi _fixunssfsi _floatdidf _floatdisf # MULTILIB_OPTIONS = mhard-float/msoft-float # MULTILIB_DIRNAMES = hard-float soft-float