Index: lib/builtins/adddf3.c =================================================================== --- lib/builtins/adddf3.c +++ lib/builtins/adddf3.c @@ -20,8 +20,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI double __aeabi_dadd(double a, double b) { return __adddf3(a, b); } +#else +AEABI_RTABI double __aeabi_dadd(double a, double b) COMPILER_RT_ALIAS(__adddf3); +#endif #endif - Index: lib/builtins/addsf3.c =================================================================== --- lib/builtins/addsf3.c +++ lib/builtins/addsf3.c @@ -20,8 +20,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI float __aeabi_fadd(float a, float b) { return __addsf3(a, b); } +#else +AEABI_RTABI float __aeabi_fadd(float a, float b) COMPILER_RT_ALIAS(__addsf3); +#endif #endif - Index: lib/builtins/ashldi3.c =================================================================== --- lib/builtins/ashldi3.c +++ lib/builtins/ashldi3.c @@ -41,8 +41,5 @@ } #if defined(__ARM_EABI__) -AEABI_RTABI di_int __aeabi_llsl(di_int a, si_int b) { - return __ashldi3(a, b); -} +AEABI_RTABI di_int __aeabi_llsl(di_int a, si_int b) COMPILER_RT_ALIAS(__ashldi3); #endif - Index: lib/builtins/ashrdi3.c =================================================================== --- lib/builtins/ashrdi3.c +++ lib/builtins/ashrdi3.c @@ -42,8 +42,5 @@ } #if defined(__ARM_EABI__) -AEABI_RTABI di_int __aeabi_lasr(di_int a, si_int b) { - return __ashrdi3(a, b); -} +AEABI_RTABI di_int __aeabi_lasr(di_int a, si_int b) COMPILER_RT_ALIAS(__ashrdi3); #endif - Index: lib/builtins/comparedf2.c =================================================================== --- lib/builtins/comparedf2.c +++ lib/builtins/comparedf2.c @@ -143,8 +143,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI int __aeabi_dcmpun(fp_t a, fp_t b) { return __unorddf2(a, b); } +#else +AEABI_RTABI int __aeabi_dcmpun(fp_t a, fp_t b) COMPILER_RT_ALIAS(__unorddf2); +#endif #endif - Index: lib/builtins/comparesf2.c =================================================================== --- lib/builtins/comparesf2.c +++ lib/builtins/comparesf2.c @@ -142,9 +142,12 @@ return __gesf2(a, b); } -#if defined(__ARM_EABI__) +#if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI int __aeabi_fcmpun(fp_t a, fp_t b) { return __unordsf2(a, b); } +#else +AEABI_RTABI int __aeabi_fcmpun(fp_t a, fp_t b) COMPILER_RT_ALIAS(__unordsf2); +#endif #endif - Index: lib/builtins/divdf3.c =================================================================== --- lib/builtins/divdf3.c +++ lib/builtins/divdf3.c @@ -183,8 +183,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_ddiv(fp_t a, fp_t b) { return __divdf3(a, b); } +#else +AEABI_RTABI fp_t __aeabi_ddiv(fp_t a, fp_t b) COMPILER_RT_ALIAS(__divdf3); +#endif #endif - Index: lib/builtins/divsf3.c =================================================================== --- lib/builtins/divsf3.c +++ lib/builtins/divsf3.c @@ -167,8 +167,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_fdiv(fp_t a, fp_t b) { return __divsf3(a, b); } +#else +AEABI_RTABI fp_t __aeabi_fdiv(fp_t a, fp_t b) COMPILER_RT_ALIAS(__divsf3); +#endif #endif - Index: lib/builtins/divsi3.c =================================================================== --- lib/builtins/divsi3.c +++ lib/builtins/divsi3.c @@ -35,8 +35,5 @@ } #if defined(__ARM_EABI__) -AEABI_RTABI si_int __aeabi_idiv(si_int a, si_int b) { - return __divsi3(a, b); -} +AEABI_RTABI si_int __aeabi_idiv(si_int a, si_int b) COMPILER_RT_ALIAS(__divsi3); #endif - Index: lib/builtins/extendhfsf2.c =================================================================== --- lib/builtins/extendhfsf2.c +++ lib/builtins/extendhfsf2.c @@ -23,8 +23,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI float __aeabi_h2f(uint16_t a) { return __extendhfsf2(a); } +#else +AEABI_RTABI float __aeabi_h2f(uint16_t a) COMPILER_RT_ALIAS(__extendhfsf2); +#endif #endif - Index: lib/builtins/extendsfdf2.c =================================================================== --- lib/builtins/extendsfdf2.c +++ lib/builtins/extendsfdf2.c @@ -17,8 +17,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI double __aeabi_f2d(float a) { return __extendsfdf2(a); } +#else +AEABI_RTABI double __aeabi_f2d(float a) COMPILER_RT_ALIAS(__extendsfdf2); +#endif #endif - Index: lib/builtins/fixdfdi.c =================================================================== --- lib/builtins/fixdfdi.c +++ lib/builtins/fixdfdi.c @@ -45,13 +45,11 @@ #endif #if defined(__ARM_EABI__) -AEABI_RTABI di_int -#if defined(__SOFT_FP__) -__aeabi_d2lz(fp_t a) { -#else -__aeabi_d2lz(double a) { -#endif +#if defined(COMPILER_RT_ARMHF_TARGET) +AEABI_RTABI di_int __aeabi_d2lz(fp_t a) { return __fixdfdi(a); } +#else +AEABI_RTABI di_int __aeabi_d2lz(fp_t a) COMPILER_RT_ALIAS(__fixdfdi); +#endif #endif - Index: lib/builtins/fixdfsi.c =================================================================== --- lib/builtins/fixdfsi.c +++ lib/builtins/fixdfsi.c @@ -20,8 +20,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI si_int __aeabi_d2iz(fp_t a) { return __fixdfsi(a); } +#else +AEABI_RTABI si_int __aeabi_d2iz(fp_t a) COMPILER_RT_ALIAS(__fixdfsi); +#endif #endif - Index: lib/builtins/fixsfdi.c =================================================================== --- lib/builtins/fixsfdi.c +++ lib/builtins/fixsfdi.c @@ -45,13 +45,11 @@ #endif #if defined(__ARM_EABI__) -AEABI_RTABI di_int -#if defined(__SOFT_FP__) -__aeabi_f2lz(fp_t a) { -#else -__aeabi_f2lz(float a) { -#endif +#if defined(COMPILER_RT_ARMHF_TARGET) +AEABI_RTABI di_int __aeabi_f2lz(fp_t a) { return __fixsfdi(a); } +#else +AEABI_RTABI di_int __aeabi_f2lz(fp_t a) COMPILER_RT_ALIAS(__fixsfdi); +#endif #endif - Index: lib/builtins/fixsfsi.c =================================================================== --- lib/builtins/fixsfsi.c +++ lib/builtins/fixsfsi.c @@ -20,8 +20,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI si_int __aeabi_f2iz(fp_t a) { return __fixsfsi(a); } +#else +AEABI_RTABI si_int __aeabi_f2iz(fp_t a) COMPILER_RT_ALIAS(__fixsfsi); +#endif #endif - Index: lib/builtins/fixunsdfdi.c =================================================================== --- lib/builtins/fixunsdfdi.c +++ lib/builtins/fixunsdfdi.c @@ -42,13 +42,11 @@ #endif #if defined(__ARM_EABI__) -AEABI_RTABI du_int -#if defined(__SOFT_FP__) -__aeabi_d2ulz(fp_t a) { -#else -__aeabi_d2ulz(double a) { -#endif +#if defined(COMPILER_RT_ARMHF_TARGET) +AEABI_RTABI du_int __aeabi_d2ulz(fp_t a) { return __fixunsdfdi(a); } +#else +AEABI_RTABI du_int __aeabi_d2ulz(fp_t a) COMPILER_RT_ALIAS(__fixunsdfdi); +#endif #endif - Index: lib/builtins/fixunsdfsi.c =================================================================== --- lib/builtins/fixunsdfsi.c +++ lib/builtins/fixunsdfsi.c @@ -19,8 +19,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI su_int __aeabi_d2uiz(fp_t a) { return __fixunsdfsi(a); } +#else +AEABI_RTABI su_int __aeabi_d2uiz(fp_t a) COMPILER_RT_ALIAS(__fixunsdfsi); +#endif #endif - Index: lib/builtins/fixunssfdi.c =================================================================== --- lib/builtins/fixunssfdi.c +++ lib/builtins/fixunssfdi.c @@ -43,13 +43,11 @@ #endif #if defined(__ARM_EABI__) -AEABI_RTABI du_int -#if defined(__SOFT_FP__) -__aeabi_f2ulz(fp_t a) { -#else -__aeabi_f2ulz(float a) { -#endif +#if defined(COMPILER_RT_ARMHF_TARGET) +AEABI_RTABI du_int __aeabi_f2ulz(fp_t a) { return __fixunssfdi(a); } +#else +AEABI_RTABI du_int __aeabi_f2ulz(fp_t a) COMPILER_RT_ALIAS(__fixunssfdi); +#endif #endif - Index: lib/builtins/fixunssfsi.c =================================================================== --- lib/builtins/fixunssfsi.c +++ lib/builtins/fixunssfsi.c @@ -23,8 +23,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI su_int __aeabi_f2uiz(fp_t a) { return __fixunssfsi(a); } +#else +AEABI_RTABI su_int __aeabi_f2uiz(fp_t a) COMPILER_RT_ALIAS(__fixunssfsi); +#endif #endif - Index: lib/builtins/floatdidf.c =================================================================== --- lib/builtins/floatdidf.c +++ lib/builtins/floatdidf.c @@ -105,8 +105,11 @@ #endif #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI double __aeabi_l2d(di_int a) { return __floatdidf(a); } +#else +AEABI_RTABI double __aeabi_l2d(di_int a) COMPILER_RT_ALIAS(__floatdidf); +#endif #endif - Index: lib/builtins/floatdisf.c =================================================================== --- lib/builtins/floatdisf.c +++ lib/builtins/floatdisf.c @@ -78,8 +78,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI float __aeabi_l2f(di_int a) { return __floatdisf(a); } +#else +AEABI_RTABI float __aeabi_l2f(di_int a) COMPILER_RT_ALIAS(__floatdisf); +#endif #endif - Index: lib/builtins/floatsidf.c =================================================================== --- lib/builtins/floatsidf.c +++ lib/builtins/floatsidf.c @@ -51,8 +51,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_i2d(int a) { return __floatsidf(a); } +#else +AEABI_RTABI fp_t __aeabi_i2d(int a) COMPILER_RT_ALIAS(__floatsidf); +#endif #endif - Index: lib/builtins/floatsisf.c =================================================================== --- lib/builtins/floatsisf.c +++ lib/builtins/floatsisf.c @@ -56,9 +56,12 @@ return fromRep(result | sign); } -#if defined(__ARM_EABI__) +#if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_i2f(int a) { return __floatsisf(a); } +#else +AEABI_RTABI fp_t __aeabi_i2f(int a) COMPILER_RT_ALIAS(__floatsisf); +#endif #endif - Index: lib/builtins/floatundidf.c =================================================================== --- lib/builtins/floatundidf.c +++ lib/builtins/floatundidf.c @@ -104,8 +104,11 @@ #endif #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI double __aeabi_ul2d(du_int a) { return __floatundidf(a); } +#else +AEABI_RTABI double __aeabi_ul2d(du_int a) COMPILER_RT_ALIAS(__floatundidf); +#endif #endif - Index: lib/builtins/floatundisf.c =================================================================== --- lib/builtins/floatundisf.c +++ lib/builtins/floatundisf.c @@ -75,8 +75,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI float __aeabi_ul2f(du_int a) { return __floatundisf(a); } +#else +AEABI_RTABI float __aeabi_ul2f(du_int a) COMPILER_RT_ALIAS(__floatundisf); +#endif #endif - Index: lib/builtins/floatunsidf.c =================================================================== --- lib/builtins/floatunsidf.c +++ lib/builtins/floatunsidf.c @@ -40,8 +40,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_ui2d(unsigned int a) { return __floatunsidf(a); } +#else +AEABI_RTABI fp_t __aeabi_ui2d(unsigned int a) COMPILER_RT_ALIAS(__floatunsidf); +#endif #endif - Index: lib/builtins/floatunsisf.c =================================================================== --- lib/builtins/floatunsisf.c +++ lib/builtins/floatunsisf.c @@ -48,8 +48,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_ui2f(unsigned int a) { return __floatunsisf(a); } +#else +AEABI_RTABI fp_t __aeabi_ui2f(unsigned int a) COMPILER_RT_ALIAS(__floatunsisf); +#endif #endif - Index: lib/builtins/int_lib.h =================================================================== --- lib/builtins/int_lib.h +++ lib/builtins/int_lib.h @@ -23,8 +23,10 @@ #if defined(__ELF__) #define FNALIAS(alias_name, original_name) \ void alias_name() __attribute__((alias(#original_name))) +#define COMPILER_RT_ALIAS(aliasee) __attribute__((alias(#aliasee))) #else #define FNALIAS(alias, name) _Pragma("GCC error(\"alias unsupported on this file format\")") +#define COMPILER_RT_ALIAS(aliasee) _Pragma("GCC error(\"alias unsupported on this file format\")") #endif /* ABI macro definitions */ Index: lib/builtins/lshrdi3.c =================================================================== --- lib/builtins/lshrdi3.c +++ lib/builtins/lshrdi3.c @@ -41,8 +41,5 @@ } #if defined(__ARM_EABI__) -AEABI_RTABI di_int __aeabi_llsr(di_int a, si_int b) { - return __lshrdi3(a, b); -} +AEABI_RTABI di_int __aeabi_llsr(di_int a, si_int b) COMPILER_RT_ALIAS(__lshrdi3); #endif - Index: lib/builtins/muldf3.c =================================================================== --- lib/builtins/muldf3.c +++ lib/builtins/muldf3.c @@ -20,8 +20,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_dmul(fp_t a, fp_t b) { return __muldf3(a, b); } +#else +AEABI_RTABI fp_t __aeabi_dmul(fp_t a, fp_t b) COMPILER_RT_ALIAS(__muldf3); +#endif #endif - Index: lib/builtins/muldi3.c =================================================================== --- lib/builtins/muldi3.c +++ lib/builtins/muldi3.c @@ -54,8 +54,5 @@ } #if defined(__ARM_EABI__) -AEABI_RTABI di_int __aeabi_lmul(di_int a, di_int b) { - return __muldi3(a, b); -} +AEABI_RTABI di_int __aeabi_lmul(di_int a, di_int b) COMPILER_RT_ALIAS(__muldi3); #endif - Index: lib/builtins/mulsf3.c =================================================================== --- lib/builtins/mulsf3.c +++ lib/builtins/mulsf3.c @@ -20,8 +20,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_fmul(fp_t a, fp_t b) { return __mulsf3(a, b); } +#else +AEABI_RTABI fp_t __aeabi_fmul(fp_t a, fp_t b) COMPILER_RT_ALIAS(__mulsf3); +#endif #endif - Index: lib/builtins/negdf2.c =================================================================== --- lib/builtins/negdf2.c +++ lib/builtins/negdf2.c @@ -20,8 +20,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_dneg(fp_t a) { return __negdf2(a); } +#else +AEABI_RTABI fp_t __aeabi_dneg(fp_t a) COMPILER_RT_ALIAS(__negdf2); +#endif #endif - Index: lib/builtins/negsf2.c =================================================================== --- lib/builtins/negsf2.c +++ lib/builtins/negsf2.c @@ -20,8 +20,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_fneg(fp_t a) { return __negsf2(a); } +#else +AEABI_RTABI fp_t __aeabi_fneg(fp_t a) COMPILER_RT_ALIAS(__negsf2); +#endif #endif - Index: lib/builtins/subdf3.c =================================================================== --- lib/builtins/subdf3.c +++ lib/builtins/subdf3.c @@ -22,8 +22,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_dsub(fp_t a, fp_t b) { return __subdf3(a, b); } +#else +AEABI_RTABI fp_t __aeabi_dsub(fp_t a, fp_t b) COMPILER_RT_ALIAS(__subdf3); +#endif #endif - Index: lib/builtins/subsf3.c =================================================================== --- lib/builtins/subsf3.c +++ lib/builtins/subsf3.c @@ -22,8 +22,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI fp_t __aeabi_fsub(fp_t a, fp_t b) { return __subsf3(a, b); } +#else +AEABI_RTABI fp_t __aeabi_fsub(fp_t a, fp_t b) COMPILER_RT_ALIAS(__subsf3); +#endif #endif - Index: lib/builtins/truncdfhf2.c =================================================================== --- lib/builtins/truncdfhf2.c +++ lib/builtins/truncdfhf2.c @@ -16,8 +16,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI uint16_t __aeabi_d2h(double a) { return __truncdfhf2(a); } +#else +AEABI_RTABI uint16_t __aeabi_d2h(double a) COMPILER_RT_ALIAS(__truncdfhf2); +#endif #endif - Index: lib/builtins/truncdfsf2.c =================================================================== --- lib/builtins/truncdfsf2.c +++ lib/builtins/truncdfsf2.c @@ -16,8 +16,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI float __aeabi_d2f(double a) { return __truncdfsf2(a); } +#else +AEABI_RTABI float __aeabi_d2f(double a) COMPILER_RT_ALIAS(__truncdfsf2); +#endif #endif - Index: lib/builtins/truncsfhf2.c =================================================================== --- lib/builtins/truncsfhf2.c +++ lib/builtins/truncsfhf2.c @@ -22,8 +22,11 @@ } #if defined(__ARM_EABI__) +#if defined(COMPILER_RT_ARMHF_TARGET) AEABI_RTABI uint16_t __aeabi_f2h(float a) { return __truncsfhf2(a); } +#else +AEABI_RTABI uint16_t __aeabi_f2h(float a) COMPILER_RT_ALIAS(__truncsfhf2); +#endif #endif - Index: lib/builtins/udivsi3.c =================================================================== --- lib/builtins/udivsi3.c +++ lib/builtins/udivsi3.c @@ -64,8 +64,5 @@ } #if defined(__ARM_EABI__) -AEABI_RTABI su_int __aeabi_uidiv(su_int n, su_int d) { - return __udivsi3(n, d); -} +AEABI_RTABI su_int __aeabi_uidiv(su_int n, su_int d) COMPILER_RT_ALIAS(__udivsi3); #endif -