Switch libm to libcrt.builtins After switching libm from libgcc to libcrt.builtins, some of the symbols are no longer getting included in libm, causing the compiler to complain about missing symbols from the version script. Explicitly export them in libc (since libm depends on libc). Bug: 122993571 Test: m checkbuild Test: bionic-unit-tests Change-Id: Ie91765874d20df605f557b1a8c4236619553c549
diff --git a/libc/Android.bp b/libc/Android.bp index 262d951..669ffc0 100644 --- a/libc/Android.bp +++ b/libc/Android.bp
@@ -85,6 +85,9 @@ no_libcrt: true, }, }, + // lld complains about duplicate symbols in libcrt and libgcc. Suppress the + // warning since this is intended right now. + ldflags: ["-Wl,-z,muldefs"], } // ========================================================
diff --git a/libc/arch-arm/bionic/libcrt_compat.c b/libc/arch-arm/bionic/libcrt_compat.c index 22a3387..ce77a5d 100644 --- a/libc/arch-arm/bionic/libcrt_compat.c +++ b/libc/arch-arm/bionic/libcrt_compat.c
@@ -31,8 +31,12 @@ extern char __aeabi_cdcmpeq; extern char __aeabi_cdcmple; extern char __aeabi_cdrcmple; +extern char __aeabi_cfcmpeq; +extern char __aeabi_cfcmple; +extern char __aeabi_cfrcmple; extern char __aeabi_d2f; extern char __aeabi_d2iz; +extern char __aeabi_d2uiz; extern char __aeabi_dadd; extern char __aeabi_dcmpeq; extern char __aeabi_dcmpge; @@ -48,6 +52,11 @@ extern char __aeabi_f2iz; extern char __aeabi_f2uiz; extern char __aeabi_fadd; +extern char __aeabi_fcmpeq; +extern char __aeabi_fcmpge; +extern char __aeabi_fcmpgt; +extern char __aeabi_fcmple; +extern char __aeabi_fcmplt; extern char __aeabi_fcmpun; extern char __aeabi_fdiv; extern char __aeabi_fmul; @@ -74,12 +83,15 @@ extern char __aeabi_unwind_cpp_pr0; extern char __aeabi_unwind_cpp_pr1; extern char __cmpdf2; +extern char __cmpsf2; extern char __divdf3; extern char __divsf3; extern char __eqdf2; +extern char __eqsf2; extern char __extendsfdf2; extern char __fixdfsi; extern char __fixsfsi; +extern char __fixunsdfsi; extern char __floatdidf; extern char __floatdisf; extern char __floatsidf; @@ -89,15 +101,20 @@ extern char __floatunsidf; extern char __floatunsisf; extern char __gedf2; +extern char __gesf2; extern char __gtdf2; +extern char __gtsf2; extern char __gnu_ldivmod_helper; extern char __gnu_uldivmod_helper; extern char __ledf2; +extern char __lesf2; extern char __ltdf2; +extern char __ltsf2; extern char __muldf3; extern char __muldi3; extern char __mulsf3; extern char __nedf2; +extern char __nesf2; extern char __popcount_tab; extern char __popcountsi2; extern char __subdf3; @@ -113,8 +130,12 @@ &__aeabi_cdcmpeq, &__aeabi_cdcmple, &__aeabi_cdrcmple, + &__aeabi_cfcmpeq, + &__aeabi_cfcmple, + &__aeabi_cfrcmple, &__aeabi_d2f, &__aeabi_d2iz, + &__aeabi_d2uiz, &__aeabi_dadd, &__aeabi_dcmpeq, &__aeabi_dcmpge, @@ -130,6 +151,11 @@ &__aeabi_f2iz, &__aeabi_f2uiz, &__aeabi_fadd, + &__aeabi_fcmpeq, + &__aeabi_fcmpge, + &__aeabi_fcmpgt, + &__aeabi_fcmple, + &__aeabi_fcmplt, &__aeabi_fcmpun, &__aeabi_fdiv, &__aeabi_fmul, @@ -156,12 +182,15 @@ &__aeabi_unwind_cpp_pr0, &__aeabi_unwind_cpp_pr1, &__cmpdf2, + &__cmpsf2, &__divdf3, &__divsf3, &__eqdf2, + &__eqsf2, &__extendsfdf2, &__fixdfsi, &__fixsfsi, + &__fixunsdfsi, &__floatdidf, &__floatdisf, &__floatsidf, @@ -171,15 +200,20 @@ &__floatunsidf, &__floatunsisf, &__gedf2, + &__gesf2, &__gtdf2, + &__gtsf2, &__gnu_ldivmod_helper, &__gnu_uldivmod_helper, &__ledf2, + &__lesf2, &__ltdf2, + &__ltsf2, &__muldf3, &__muldi3, &__mulsf3, &__nedf2, + &__nesf2, &__popcount_tab, &__popcountsi2, &__subdf3,
diff --git a/libc/libc.map.txt b/libc/libc.map.txt index 62aea27..7d30c26 100644 --- a/libc/libc.map.txt +++ b/libc/libc.map.txt
@@ -1500,8 +1500,12 @@ __aeabi_cdcmpeq; # arm __aeabi_cdcmple; # arm __aeabi_cdrcmple; # arm + __aeabi_cfcmpeq; # arm + __aeabi_cfcmple; # arm + __aeabi_cfrcmple; # arm __aeabi_d2f; # arm __aeabi_d2iz; # arm + __aeabi_d2uiz; # arm __aeabi_dadd; # arm __aeabi_dcmpeq; # arm __aeabi_dcmpge; # arm @@ -1517,6 +1521,11 @@ __aeabi_f2iz; # arm __aeabi_f2uiz; # arm __aeabi_fadd; # arm + __aeabi_fcmpeq; # arm + __aeabi_fcmpge; # arm + __aeabi_fcmpgt; # arm + __aeabi_fcmple; # arm + __aeabi_fcmplt; # arm __aeabi_fcmpun; # arm __aeabi_fdiv; # arm __aeabi_fmul; # arm @@ -1563,15 +1572,18 @@ __bionic_brk; # arm x86 mips __bionic_libcrt_compat_symbols; # arm x86 __cmpdf2; # arm + __cmpsf2; # arm __divdf3; # arm __divdi3; # arm x86 mips __divsf3; # arm __divsi3; # arm __dso_handle; # arm __eqdf2; # arm + __eqsf2; # arm __extendsfdf2; # arm __fixdfsi; # arm __fixsfsi; # arm + __fixunsdfsi; # arm __fixunssfsi; # arm __floatdidf; # arm __floatdisf; # arm @@ -1584,6 +1596,7 @@ __futex_wait; # arm x86 mips __futex_wake; # arm x86 mips __gedf2; # arm + __gesf2; # arm __get_thread; # arm x86 mips __get_tls; # arm x86 mips __getdents64; # arm x86 mips @@ -1608,13 +1621,17 @@ __gnu_Unwind_Save_WMMXC; # arm __gnu_Unwind_Save_WMMXD; # arm __gtdf2; # arm + __gtsf2; # arm __ledf2; # arm + __lesf2; # arm __lshrdi3; # arm __ltdf2; # arm + __ltsf2; # arm __muldf3; # arm __muldi3; # arm __mulsf3; # arm __nedf2; # arm + __nesf2; # arm __open; # arm x86 mips __page_shift; # arm x86 mips __page_size; # arm x86 mips
diff --git a/libm/Android.bp b/libm/Android.bp index ec319e2..079220b 100644 --- a/libm/Android.bp +++ b/libm/Android.bp
@@ -509,7 +509,6 @@ stl: "none", // TODO(ivanlozano): Remove after b/118321713 - no_libcrt: true, xom: false, stubs: {
diff --git a/libm/libm.map.txt b/libm/libm.map.txt index 1f9a3f9..00ea7ee 100644 --- a/libm/libm.map.txt +++ b/libm/libm.map.txt
@@ -301,58 +301,19 @@ ___Unwind_RaiseException; # arm ___Unwind_Resume; # arm ___Unwind_Resume_or_Rethrow; # arm - __adddf3; # arm - __aeabi_cdcmpeq; # arm - __aeabi_cdcmple; # arm - __aeabi_cdrcmple; # arm - __aeabi_cfcmpeq; # arm - __aeabi_cfcmple; # arm - __aeabi_cfrcmple; # arm __aeabi_d2lz; # arm - __aeabi_d2uiz; # arm __aeabi_d2ulz; # arm - __aeabi_dadd; # arm - __aeabi_dcmpeq; # arm - __aeabi_dcmpge; # arm - __aeabi_dcmpgt; # arm - __aeabi_dcmple; # arm - __aeabi_dcmplt; # arm - __aeabi_ddiv; # arm - __aeabi_dmul; # arm - __aeabi_drsub; # arm - __aeabi_dsub; # arm - __aeabi_f2d; # arm __aeabi_f2lz; # arm __aeabi_f2ulz; # arm - __aeabi_fcmpeq; # arm - __aeabi_fcmpge; # arm - __aeabi_fcmpgt; # arm - __aeabi_fcmple; # arm - __aeabi_fcmplt; # arm - __aeabi_i2d; # arm __aeabi_l2d; # arm - __aeabi_ui2d; # arm - __aeabi_ul2d; # arm __aeabi_unwind_cpp_pr0; # arm __aeabi_unwind_cpp_pr1; # arm __aeabi_unwind_cpp_pr2; # arm - __cmpdf2; # arm - __cmpsf2; # arm - __divdf3; # arm - __eqdf2; # arm - __eqsf2; # arm - __extendsfdf2; # arm __fixdfdi; # arm mips __fixsfdi; # arm mips __fixunsdfdi; # arm mips - __fixunsdfsi; # arm __fixunssfdi; # arm mips __floatdidf; # arm - __floatsidf; # arm - __floatundidf; # arm - __floatunsidf; # arm - __gedf2; # arm - __gesf2; # arm __gnu_Unwind_Backtrace; # arm __gnu_unwind_execute; # arm __gnu_Unwind_ForcedUnwind; # arm @@ -370,17 +331,7 @@ __gnu_Unwind_Save_VFP_D_16_to_31; # arm __gnu_Unwind_Save_WMMXC; # arm __gnu_Unwind_Save_WMMXD; # arm - __gtdf2; # arm - __gtsf2; # arm - __ledf2; # arm - __lesf2; # arm - __ltdf2; # arm - __ltsf2; # arm - __muldf3; # arm - __nedf2; # arm - __nesf2; # arm __restore_core_regs; # arm - __subdf3; # arm _Unwind_Backtrace; # arm _Unwind_Complete; # arm _Unwind_DeleteException; # arm