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;