Merge changes I070d3a26,Ie9176587
am: e65558a0a4

Change-Id: I2b417a5e1e801485e012ec49b39296ca6cd4078a
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..5075fb2 100644
--- a/libm/Android.bp
+++ b/libm/Android.bp
@@ -508,10 +508,6 @@
     },
     stl: "none",
 
-    // TODO(ivanlozano): Remove after b/118321713
-    no_libcrt: true,
-    xom: false,
-
     stubs: {
         symbol_file: "libm.map.txt",
         versions: ["10000"],
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