git: 50fda38ba0b0 - main - libgcc_s: export integer and floating point __aeabi_ symbols
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 04 May 2025 17:09:29 UTC
The branch main has been updated by mmel:
URL: https://cgit.FreeBSD.org/src/commit/?id=50fda38ba0b0a783ccf1375fb889eee5476f4b1a
commit 50fda38ba0b0a783ccf1375fb889eee5476f4b1a
Author: Michal Meloun <mmel@FreeBSD.org>
AuthorDate: 2025-02-22 18:35:27 +0000
Commit: Michal Meloun <mmel@FreeBSD.org>
CommitDate: 2025-05-04 11:48:32 +0000
libgcc_s: export integer and floating point __aeabi_ symbols
Export all integer and floating point __aeabi_ functions defined by
"Run-time ABI for Arm Architecture" from libgcc, excluding __aeabi_h2f_alt,
__aeabi_f2h_alt and __aeabi_d2h_alt, which are not yet implemented by
compiler-rt.
To maintain ABI backward compatibility, convert __aeabi_ floating-point
symbols previously exported from libc to an explicit non-default version.
Remove guessing of vfp/not-vfp version for compiler-rt sources. The vfp
version needs additional runtime logic to select the right implementation
and we don't have it implemented.
MFC after: 1 month
Reviewed by: dim
PR: 271087
Differential Revision: https://reviews.freebsd.org/D50100
---
lib/libc/arm/aeabi/Symbol.map | 44 ------------------------
lib/libc/arm/aeabi/aeabi_int_div.S | 2 ++
lib/libc/arm/aeabi/aeabi_vfp.h | 4 ++-
lib/libcompiler_rt/Makefile.inc | 18 ++++++----
lib/libgcc_s/arm/Symbol.map | 68 ++++++++++++++++++++++++++++++++++++++
5 files changed, 84 insertions(+), 52 deletions(-)
diff --git a/lib/libc/arm/aeabi/Symbol.map b/lib/libc/arm/aeabi/Symbol.map
index 175884c82881..515794004ba7 100644
--- a/lib/libc/arm/aeabi/Symbol.map
+++ b/lib/libc/arm/aeabi/Symbol.map
@@ -6,50 +6,6 @@
FBSDprivate_1.0 {
__aeabi_atexit;
- __aeabi_dcmpeq;
- __aeabi_dcmplt;
- __aeabi_dcmple;
- __aeabi_dcmpge;
- __aeabi_dcmpgt;
- __aeabi_dcmpun;
-
- __aeabi_cdcmpeq;
- __aeabi_cdcmple;
- __aeabi_cdrcmple;
-
- __aeabi_d2iz;
- __aeabi_d2f;
-
- __aeabi_dadd;
- __aeabi_ddiv;
- __aeabi_dmul;
- __aeabi_dsub;
-
-
- __aeabi_fcmpeq;
- __aeabi_fcmplt;
- __aeabi_fcmple;
- __aeabi_fcmpge;
- __aeabi_fcmpgt;
- __aeabi_fcmpun;
-
- __aeabi_cfcmpeq;
- __aeabi_cfcmple;
- __aeabi_cfrcmple;
-
- __aeabi_f2iz;
- __aeabi_f2d;
-
- __aeabi_fadd;
- __aeabi_fdiv;
- __aeabi_fmul;
- __aeabi_fsub;
-
-
- __aeabi_i2d;
- __aeabi_i2f;
-
-
__aeabi_memclr;
__aeabi_memclr4;
__aeabi_memclr8;
diff --git a/lib/libc/arm/aeabi/aeabi_int_div.S b/lib/libc/arm/aeabi/aeabi_int_div.S
index 708b478b3881..bb002c2716f7 100644
--- a/lib/libc/arm/aeabi/aeabi_int_div.S
+++ b/lib/libc/arm/aeabi/aeabi_int_div.S
@@ -37,11 +37,13 @@
*/
ENTRY(__aeabi_uidiv_compat)
+ .hidden __aeabi_uidiv_compat
.symver __aeabi_uidiv_compat, __aeabi_uidiv@
b __udivsi3
END(__aeabi_uidiv_compat)
ENTRY(__aeabi_idiv_compat)
+ .hidden __aeabi_idiv_compat
.symver __aeabi_idiv_compat, __aeabi_idiv@
b __divsi3
END(__aeabi_idiv_compat)
diff --git a/lib/libc/arm/aeabi/aeabi_vfp.h b/lib/libc/arm/aeabi/aeabi_vfp.h
index 3b70fe06fab3..4f3bb2ef969b 100644
--- a/lib/libc/arm/aeabi/aeabi_vfp.h
+++ b/lib/libc/arm/aeabi/aeabi_vfp.h
@@ -40,7 +40,9 @@
#define AEABI_ENTRY(x) ENTRY(__aeabi_ ## x ## _vfp)
#define AEABI_END(x) END(__aeabi_ ## x ## _vfp)
#else
-#define AEABI_ENTRY(x) ENTRY(__aeabi_ ## x)
+#define AEABI_ENTRY(x) \
+ ENTRY(__aeabi_ ## x) \
+ .symver __aeabi_##x, __aeabi_##x##@FBSDprivate_1.0;
#define AEABI_END(x) END(__aeabi_ ## x)
#endif
diff --git a/lib/libcompiler_rt/Makefile.inc b/lib/libcompiler_rt/Makefile.inc
index e2a2618232e1..57cfdee95541 100644
--- a/lib/libcompiler_rt/Makefile.inc
+++ b/lib/libcompiler_rt/Makefile.inc
@@ -208,7 +208,7 @@ SRCF+= trunctfsf2
.endif
# These are already shipped by libc.a on some architectures.
-.if ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "riscv"
+.if ${MACHINE_CPUARCH} != "riscv"
SRCF+= adddf3
SRCF+= addsf3
SRCF+= divdf3
@@ -225,10 +225,8 @@ SRCF+= subsf3
SRCF+= truncdfsf2
.endif
-.if ${MACHINE_CPUARCH} != "arm"
SRCF+= comparedf2
SRCF+= comparesf2
-.endif
# Helper to reduce complexity of _Float16 and __bf16 statements below.
.if ${MACHINE_CPUARCH} == "aarch64" || \
@@ -274,10 +272,7 @@ CFLAGS+= -DEMIT_SYNC_ATOMICS
.endif
.for file in ${SRCF}
-.if ${MACHINE_CPUARCH} == "arm" && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "") \
- && exists(${CRTSRC}/${CRTARCH}/${file}vfp.S)
-SRCS+= ${file}vfp.S
-. elif exists(${CRTSRC}/${CRTARCH}/${file}.S)
+. if exists(${CRTSRC}/${CRTARCH}/${file}.S)
SRCS+= ${file}.S
. else
SRCS+= ${file}.c
@@ -285,7 +280,15 @@ SRCS+= ${file}.c
.endfor
.if ${MACHINE_CPUARCH} == "arm"
+SRCS+= aeabi_cdcmp.S
+SRCS+= aeabi_cdcmpeq_check_nan.c
+SRCS+= aeabi_cfcmp.S
+SRCS+= aeabi_cfcmpeq_check_nan.c
+SRCS+= aeabi_dcmp.S
SRCS+= aeabi_div0.c
+SRCS+= aeabi_drsub.c
+SRCS+= aeabi_fcmp.S
+SRCS+= aeabi_frsub.c
SRCS+= aeabi_idivmod.S
SRCS+= aeabi_ldivmod.S
SRCS+= aeabi_memcmp.S
@@ -294,6 +297,7 @@ SRCS+= aeabi_memmove.S
SRCS+= aeabi_memset.S
SRCS+= aeabi_uidivmod.S
SRCS+= aeabi_uldivmod.S
+
SRCS+= switch16.S
SRCS+= switch32.S
SRCS+= switch8.S
diff --git a/lib/libgcc_s/arm/Symbol.map b/lib/libgcc_s/arm/Symbol.map
index 92b54761d810..ea0189eabaa0 100644
--- a/lib/libgcc_s/arm/Symbol.map
+++ b/lib/libgcc_s/arm/Symbol.map
@@ -2,6 +2,74 @@
*/
GCC_3.5 {
+ __aeabi_cdcmple;
+ __aeabi_cdrcmple;
+ __aeabi_cfcmpeq;
+ __aeabi_cfcmple;
+ __aeabi_cfrcmple;
+ __aeabi_d2f;
+ __aeabi_d2h;
+/* __aeabi_d2h_alt; */
+ __aeabi_d2iz;
+ __aeabi_d2lz;
+ __aeabi_d2uiz;
+ __aeabi_d2ulz;
+ __aeabi_dadd;
+ __aeabi_dcmpeq;
+ __aeabi_dcmpge;
+ __aeabi_dcmpgt;
+ __aeabi_dcmple;
+ __aeabi_dcmplt;
+ __aeabi_dcmpun;
+ __aeabi_ddiv;
+ __aeabi_dmul;
+ __aeabi_dneg;
+ __aeabi_drsub;
+ __aeabi_dsub;
+ __aeabi_f2d;
+ __aeabi_f2h;
+/* __aeabi_f2h_alt; */
+ __aeabi_f2iz;
+ __aeabi_f2lz;
+ __aeabi_f2uiz;
+ __aeabi_f2ulz;
+ __aeabi_fadd;
+ __aeabi_fcmpeq;
+ __aeabi_fcmpge;
+ __aeabi_fcmpgt;
+ __aeabi_fcmple;
+ __aeabi_fcmplt;
+ __aeabi_fcmpun;
+ __aeabi_fdiv;
+ __aeabi_fmul;
+ __aeabi_fneg;
+ __aeabi_frsub;
+ __aeabi_fsub;
+ __aeabi_h2f;
+/* __aeabi_h2f_alt; */
+ __aeabi_i2d;
+ __aeabi_i2f;
+ __aeabi_idiv;
+ __aeabi_idiv0;
+ __aeabi_idivmod;
+ __aeabi_l2d;
+ __aeabi_l2f;
+ __aeabi_lasr;
+ __aeabi_lcmp;
+ __aeabi_ldiv0;
+ __aeabi_ldivmod;
+ __aeabi_llsl;
+ __aeabi_llsr;
+ __aeabi_lmul;
+ __aeabi_ui2d;
+ __aeabi_ui2f;
+ __aeabi_uidiv;
+ __aeabi_uidivmod;
+ __aeabi_ul2d;
+ __aeabi_ul2f;
+ __aeabi_ulcmp;
+ __aeabi_uldivmod;
+
_Unwind_Complete;
_Unwind_VRS_Get;
_Unwind_VRS_Set;