| 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 |
| @@ -28,7 +28,7 @@ |
| #define TARGET_VERSION fputs (" (ARM GNU/Linux with ELF)", stderr); |
| |
| #undef TARGET_DEFAULT_FLOAT_ABI |
| -#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD |
| +#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT |
| |
| /* TARGET_BIG_ENDIAN_DEFAULT is set in |
| config.gcc for big endian configurations. */ |
| @@ -44,6 +44,10 @@ |
| |
| #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 |
| |
| @@ -51,7 +55,7 @@ |
| |
| #undef MULTILIB_DEFAULTS |
| #define MULTILIB_DEFAULTS \ |
| - { "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" } |
| + { "marm", TARGET_ENDIAN_OPTION, "msoft-float", "mno-thumb-interwork" } |
| |
| /* Now we define the strings used to build the spec file. */ |
| #undef LIB_SPEC |
| @@ -60,7 +64,7 @@ |
| %{shared:-lc} \ |
| %{!shared:%{profile:-lc_p}%{!profile:-lc}}" |
| |
| -#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc" |
| +#define LIBGCC_SPEC "-lgcc" |
| |
| #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2" |
| |
| --- gcc-4.0.2/gcc/config/arm/t-linux |
| +++ gcc-4.0.2/gcc/config/arm/t-linux |
| @@ -3,8 +3,10 @@ |
| TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC |
| |
| LIB1ASMSRC = arm/lib1funcs.asm |
| -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx _clzsi2 _clzdi2 \ |
| - _arm_addsubdf3 _arm_addsubsf3 |
| +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 |