From nobody Mon Apr 6 17:59:03 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fqHCC27znz6YS1X; Mon, 06 Apr 2026 17:59:19 +0000 (UTC) (envelope-from kib@freebsd.org) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4fqHCB5Mscz3KVB; Mon, 06 Apr 2026 17:59:18 +0000 (UTC) (envelope-from kib@freebsd.org) Authentication-Results: mx1.freebsd.org; none Received: from tom.home (kib@localhost [127.0.0.1] (may be forged)) by kib.kiev.ua (8.18.1/8.18.1) with ESMTP id 636Hx3EQ035977; Mon, 6 Apr 2026 20:59:06 +0300 (EEST) (envelope-from kib@freebsd.org) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua 636Hx3EQ035977 Received: (from kostik@localhost) by tom.home (8.18.1/8.18.1/Submit) id 636Hx3iN035976; Mon, 6 Apr 2026 20:59:03 +0300 (EEST) (envelope-from kib@freebsd.org) X-Authentication-Warning: tom.home: kostik set sender to kib@freebsd.org using -f Date: Mon, 6 Apr 2026 20:59:03 +0300 From: Konstantin Belousov To: Dima Panov Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 3a01e1e1a50c - main - msun/aarch64: convert fenv functions to proper linkage Message-ID: References: <69caafbb.408c4.7b20a1e1@gitrepo.freebsd.org> <1f2ad4f0-a4ab-4f15-a779-5f1a6db9912b@FreeBSD.org> <8022afad-9cee-4ade-8b56-ef5b7feb6e16@FreeBSD.org> <724be016-85a3-4dfa-8b18-abcfe384b0fc@FreeBSD.org> List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <724be016-85a3-4dfa-8b18-abcfe384b0fc@FreeBSD.org> X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham autolearn_force=no version=4.0.2 X-Spam-Checker-Version: SpamAssassin 4.0.2 (2025-08-27) on tom.home X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US] X-Rspamd-Queue-Id: 4fqHCB5Mscz3KVB X-Spamd-Bar: ---- On Mon, Apr 06, 2026 at 08:41:40PM +0300, Dima Panov wrote: > > > 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 > > > > 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 > > 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 No, I provided the symbols in the updated D56283.