git: 3a01e1e1a50c - main - msun/aarch64: convert fenv functions to proper linkage
- Reply: Konstantin Belousov : "Re: git: 3a01e1e1a50c - main - msun/aarch64: convert fenv functions to proper linkage"
- In reply to: Konstantin Belousov : "Re: git: 3a01e1e1a50c - main - msun/aarch64: convert fenv functions to proper linkage"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 06 Apr 2026 17:41:40 UTC
On 06.04.2026 20:05, Konstantin Belousov wrote:
> On Mon, Apr 06, 2026 at 07:58:37PM +0300, Dima Panov wrote:
> >
> >
> > On 06.04.2026 19:45, Konstantin Belousov wrote:
> > > On Mon, Apr 06, 2026 at 07:25:18PM +0300, Dima Panov wrote:
> > > >
> > > >
> > > > On 06.04.2026 19:07, Konstantin Belousov wrote:
> > > > > On Mon, Apr 06, 2026 at 06:56:36PM +0300, Dima Panov wrote:
> > > > > > Hello!
> > > > > >
> > > > > > This breaks most of libm consumers
> > > > > >
> > > > > > llvm/flang:
> > > > > > ===============
> > > > > > FAILED: [code=1] bin/flang-20
> > > > > > : && /usr/local/libexec/ccache/c++ -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -fPIC -fno-semantic-interposition -fvisibility-inline
> > > > > > s-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-s
> > > > > > emi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupport
> > > > > > ed -fdiagnostics-color -ffunction-sections -fdata-sections -Wno-deprecated-copy -Wno-string-conversion -Wno-ctad-maybe-unsupported -Wno-unused-command-line-argument -Wstring-conversion -Wcover
> > > > > > ed-switch-default -Wno-nested-anon-types -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -DNDEBUG -Wl,--color-diagnostics -Wl,--expor
> > > > > > t-dynamic -Wl,-z,origin -Wl,--gc-sections -Xlinker --dependency-file=tools/flang/tools/flang-driver/CMakeFiles/flang.dir/link.d tools/flang/tools/flang-driver/CMakeFiles/flang.dir/driver.cpp.o tools/
> > > > > > flang/tools/flang-driver/CMakeFiles/flang.dir/fc1_main.cpp.o -o bin/flang-20 -L/wrkdirs/usr/ports/devel/llvm20/work-default/.build/./lib -Wl,-rpath,"\$ORIGIN/../lib:/wrkdirs/usr/ports/devel/llvm20/work-
> > > > > > default/.build/./lib:/wrkdirs/usr/ports/devel/llvm20/work-default/.build/lib:" -lpthread lib/libflangFrontend.a lib/libflangFrontendTool.a lib/libFortranLower.a lib/libFortranSemantics.a lib/libFo
> > > > > > rtranSupport.a lib/libflangPasses.a lib/libHLFIRTransforms.a lib/libFIRTransforms.a lib/libFIROpenACCSupport.a lib/libFlangOpenMPTransforms.a lib/libFIRCodeGen.a lib/libFIRAnalysis.a lib/libFIRB
> > > > > > uilder.a lib/libCUFDialect.a lib/libFortranEvaluate.a lib/libFortranParser.a lib/libFortranCommon.a lib/libFortranDecimal.a lib/libFIRSupport.a lib/libHLFIRDialect.a lib/libFIRDialect.a lib/lib
> > > > > > FIRDialectSupport.a lib/libCUFAttrs.a lib/libclang-cpp.so.20.1 lib/libMLIR.so.20.1 lib/libLLVM.so.20.1 && :
> > > > > > ld: error: undefined symbol: feholdexcept
> > > > >
> > > > > This is strange. Could you show me the output of e.g.
> > > > > readelf --dyn_syms /lib/libm.so.5 | grep feholdexcept
> > > > > The best would be the output from the command like above for each missing
> > > > > symbol.
> > > >
> > > > missing :(
> > > >
> > > > FreeBSD 16.0-CURRENT #0 main-cf1f21572897: Mon Apr 6 13:45:02 MSK 2026
> > > >
> > > > root@aarch64:/ # readelf --dyn-syms /lib/libm.so.5 | grep feholdexcept
> > > > root@aarch64:/ #
> > > Hm, ok, perhaps I understand.
> > > These symbols where never exported from libm, and it just happens that
> > > they were compiled into the binaries itself due to extern inline.
> > > So the proper fix for consumers that want the symbols is to export them
> > > from libm.so.
> > >
> > > >
> > > > full list of symbols:
> > > >
> > > > Symbol table '.dynsym' contains 306 entries:
> > >
> > > It is practically impossible to get the missed symbols from the list of
> > > present symbols. Try this, if there is something else missed, add the
> > > symbols to msun/aarch64/Symbol.map. I did not even tried to (cross-)
> > > compile.
> > >
> > > I will think how to get the complete list to export, meantime.
> > > This should also be problem on any arch that provides non-standard fenv
> > > functions.
> > >
> > > commit 7573286180010304ca982d09ce5a980740e1e35e
> > > Author: Konstantin Belousov <kib@FreeBSD.org>
> > > Date: Mon Apr 6 19:41:23 2026 +0300
> > >
> > > lib/msun: export arch-specific fenv methods
> > >
> > > diff --git a/lib/msun/Makefile b/lib/msun/Makefile
> > > index 5112337f6297..b6e77fed5d9c 100644
> > > --- a/lib/msun/Makefile
> > > +++ b/lib/msun/Makefile
> > > @@ -115,6 +115,10 @@ LIBC_ARCH=${MACHINE_CPUARCH}
> > > CFLAGS+= -I${.CURDIR}/src -I${LIBC_SRCTOP}/include \
> > > -I${LIBC_SRCTOP}/${LIBC_ARCH}
> > > SYM_MAPS+= ${.CURDIR}/Symbol.map
> > > +ARCH_MAP= ${.CURDIR}/${LIBC_ARCH}/Symbol.map
> > > +.if exists(${ARCH_MAP})
> > > +SYM_MAPS+= ${ARCH_MAP}
> > > +.endif
> > >
> > > VERSION_DEF= ${LIBC_SRCTOP}/Versions.def
> > > SYMBOL_MAPS= ${SYM_MAPS}
> > > diff --git a/lib/msun/aarch64/Symbol.map b/lib/msun/aarch64/Symbol.map
> > > new file mode 100644
> > > index 000000000000..d24d7820ba98
> > > --- /dev/null
> > > +++ b/lib/msun/aarch64/Symbol.map
> > > @@ -0,0 +1,5 @@
> > > +FBSD_1.9 {
> > > + fegetenv;
> > > + feholdexcept;
> > > + feraiseexcept;
> > > +};
> >
> > May be better way is repeat map from msun/arm/Symbol.map? amd64 is also equal to it here.
> > FBSD_1.9 {
> > fesetexceptflag;
> > feraiseexcept;
> > fegetenv;
> > feholdexcept;
> > feupdateenv;
> > feenableexcept;
> > fedisableexcept;
> > fegetexcept;
> > };
> >
> > Started build with your diff anyway, will see on result
>
> Indeed. Also I suspect that msun/arm/Makefile.inc needs a fix to not list
> the Symbol.map twice, it is relevant for lib32 on aarch64. Updated patch
> below.
>
> commit 3a280c3bae0b3b9b76c19259ef9e7890fb7e38f1
> Author: Konstantin Belousov <kib@FreeBSD.org>
> Date: Mon Apr 6 19:41:23 2026 +0300
>
> lib/msun: export arch-specific fenv methods
>
> Reported by: fluffy
>
> diff --git a/lib/msun/Makefile b/lib/msun/Makefile
> index 5112337f6297..b6e77fed5d9c 100644
> --- a/lib/msun/Makefile
> +++ b/lib/msun/Makefile
> @@ -115,6 +115,10 @@ LIBC_ARCH=${MACHINE_CPUARCH}
> CFLAGS+= -I${.CURDIR}/src -I${LIBC_SRCTOP}/include \
> -I${LIBC_SRCTOP}/${LIBC_ARCH}
> SYM_MAPS+= ${.CURDIR}/Symbol.map
> +ARCH_MAP= ${.CURDIR}/${LIBC_ARCH}/Symbol.map
> +.if exists(${ARCH_MAP})
> +SYM_MAPS+= ${ARCH_MAP}
> +.endif
>
> VERSION_DEF= ${LIBC_SRCTOP}/Versions.def
> SYMBOL_MAPS= ${SYM_MAPS}
> diff --git a/lib/msun/aarch64/Symbol.map b/lib/msun/aarch64/Symbol.map
> new file mode 100644
> index 000000000000..b468c814ff06
> --- /dev/null
> +++ b/lib/msun/aarch64/Symbol.map
> @@ -0,0 +1,10 @@
> +FBSD_1.9 {
> + fesetexceptflag;
> + feraiseexcept;
> + fegetenv;
> + feholdexcept;
> + feupdateenv;
> + feenableexcept;
> + fedisableexcept;
> + fegetexcept;
> +};
> diff --git a/lib/msun/arm/Makefile.inc b/lib/msun/arm/Makefile.inc
> index 6e3ddb351dd3..e155f1a2cae4 100644
> --- a/lib/msun/arm/Makefile.inc
> +++ b/lib/msun/arm/Makefile.inc
> @@ -1,5 +1,4 @@
> LDBL_PREC = 53
> -SYM_MAPS += ${.CURDIR}/arm/Symbol.map
>
> .if defined(CPUTYPE) && ${CPUTYPE:M*soft*} != ""
> ARCH_SRCS = fenv-softfp.c fenv-vfp.c
--- lib/msun__L ---
--- libm.so.5.full ---
Building shared library libm.so.5
cc -target aarch64-unknown-freebsd16.0 --sysroot=/usr/obj/opt/poudriere/jails/16c/usr/src/arm64.aarch64/tmp -B/usr/obj/opt/poudriere/jails/16c/usr/src/arm64.aarch64/tmp/usr/bin -Wl,-zrelro -Wl,--versio
n-script=Version.map -Wl,--no-undefined-version -fstack-protector-strong -shared -Wl,-x -Wl,--fatal-warnings -Wl,--warn-shared-textrel -o libm.so.5.full -Wl,-soname,libm.so.5 b_tgamma.pico e_acos.pi
co e_acosf.pico e_acosh.pico e_acoshf.pico e_asin.pico e_asinf.pico e_atan2.pico e_atan2f.pico e_atanh.pico e_atanhf.pico e_cosh.pico e_coshf.pico e_exp.pico e_expf.pico e_fmod.pico e_fmodf.pico e_gamma
.pico e_gamma_r.pico e_gammaf.pico e_gammaf_r.pico e_hypot.pico e_hypotf.pico e_j0.pico e_j0f.pico e_j1.pico e_j1f.pico e_jn.pico e_jnf.pico e_lgamma.pico e_lgamma_r.pico e_lgammaf.pico e_lgammaf_r.pico
e_log.pico e_log10.pico e_log10f.pico e_log2.pico e_log2f.pico e_logf.pico e_pow.pico e_powf.pico e_rem_pio2.pico e_rem_pio2f.pico e_remainder.pico e_remainderf.pico e_scalb.pico e_scalbf.pico e_sinh.p
ico e_sinhf.pico e_sqrt.pico e_sqrtf.pico fenv.pico k_cos.pico k_cosf.pico k_exp.pico k_expf.pico k_rem_pio2.pico k_sin.pico k_sinf.pico k_tan.pico k_tanf.pico s_asinh.pico s_asinhf.pico s_atan.pico s_a
tanf.pico s_carg.pico s_cargf.pico s_cargl.pico s_cbrt.pico s_cbrtf.pico s_ceil.pico s_ceilf.pico s_clog.pico s_clogf.pico s_copysign.pico s_copysignf.pico s_cos.pico s_cosf.pico s_csqrt.pico s_csqrtf.p
ico s_erf.pico s_erff.pico s_exp2.pico s_exp2f.pico s_expm1.pico s_expm1f.pico s_fabsf.pico s_fdim.pico s_finite.pico s_finitef.pico s_floor.pico s_floorf.pico s_fma.pico s_fmaf.pico s_fmax.pico s_fmaxf
.pico s_fmaximum.pico s_fmaximumf.pico s_fmin.pico s_fminf.pico s_fminimum.pico s_fminimumf.pico s_frexp.pico s_frexpf.pico s_ilogb.pico s_ilogbf.pico s_ilogbl.pico s_isfinite.pico s_isnan.pico s_isnorm
al.pico s_llrint.pico s_llrintf.pico s_llround.pico s_llroundf.pico s_llroundl.pico s_log1p.pico s_log1pf.pico s_logb.pico s_logbf.pico s_lrint.pico s_lrintf.pico s_lround.pico s_lroundf.pico s_lroundl.
pico s_modff.pico s_nan.pico s_nearbyint.pico s_nextafter.pico s_nextafterf.pico s_nexttowardf.pico s_remquo.pico s_remquof.pico s_rint.pico s_rintf.pico s_round.pico s_roundf.pico s_scalbln.pico s_scal
bn.pico s_scalbnf.pico s_signbit.pico s_signgam.pico s_significand.pico s_significandf.pico s_sin.pico s_sincos.pico s_sincosf.pico s_sinf.pico s_tan.pico s_tanf.pico s_tanh.pico s_tanhf.pico s_tgammaf.
pico s_trunc.pico s_truncf.pico w_cabs.pico w_cabsf.pico w_drem.pico w_dremf.pico s_cospi.pico s_cospif.pico s_sinpi.pico s_sinpif.pico s_tanpi.pico s_tanpif.pico s_copysignl.pico s_fabsl.pico s_llrintl
.pico s_lrintl.pico s_modfl.pico b_tgammal.pico catrigl.pico e_acoshl.pico e_acosl.pico e_asinl.pico e_atan2l.pico e_atanhl.pico e_coshl.pico e_fmodl.pico e_hypotl.pico e_lgammal.pico e_lgammal_r.pico e
_powl.pico e_remainderl.pico e_sinhl.pico e_sqrtl.pico invtrig.pico k_cosl.pico k_sinl.pico k_tanl.pico s_asinhl.pico s_atanl.pico s_cbrtl.pico s_ceill.pico s_cexpl.pico s_clogl.pico s_cosl.pico s_cospi
l.pico s_cprojl.pico s_csqrtl.pico s_erfl.pico s_exp2l.pico s_expl.pico s_floorl.pico s_fmal.pico s_fmaxl.pico s_fmaximuml.pico s_fminl.pico s_fminimuml.pico s_frexpl.pico s_logbl.pico s_logl.pico s_nan
l.pico s_nextafterl.pico s_nexttoward.pico s_remquol.pico s_rintl.pico s_roundl.pico s_scalbnl.pico s_sinl.pico s_sincosl.pico s_sinpil.pico s_tanhl.pico s_tanl.pico s_tanpil.pico s_truncl.pico w_cabsl.
pico catrig.pico catrigf.pico s_ccosh.pico s_ccoshf.pico s_cexp.pico s_cexpf.pico s_cimag.pico s_cimagf.pico s_cimagl.pico s_conj.pico s_conjf.pico s_conjl.pico s_cpow.pico s_cpowf.pico s_cpowl.pico s_c
proj.pico s_cprojf.pico s_creal.pico s_crealf.pico s_creall.pico s_csinh.pico s_csinhf.pico s_ctanh.pico s_ctanhf.pico
ld: error: version script assignment of 'FBSD_1.9' to symbol 'feenableexcept' failed: symbol not defined
ld: error: version script assignment of 'FBSD_1.9' to symbol 'fedisableexcept' failed: symbol not defined
ld: error: version script assignment of 'FBSD_1.9' to symbol 'fegetexcept' failed: symbol not defined
cc: error: linker command failed with exit code 1 (use -v to see invocation)
*** [libm.so.5.full] Error code 1
make[4]: stopped making "all" in /opt/poudriere/jails/16c/usr/src/lib/msun
make[4]: 1 error
make[4]: stopped making "all" in /opt/poudriere/jails/16c/usr/src/lib/msun
make[3]: stopped making "_prebuild_libs" in /opt/poudriere/jails/16c/usr/src
Will restart build with deleted these 3 symbols from map
--
Sincerely,
Dima (fluffy@FreeBSD.org, https://t.me/FluffyBSD, @fluffy:matrix-dev.freebsd.org)
(desktop, kde, x11, office, ports-secteam)@FreeBSD team