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