Message ID | 20240402140644.2172819-1-adhemerval.zanella@linaro.org |
---|---|
Headers | show |
Series | Fix some libm static issues | expand |
Ping on this serie (the 2/7 and 3/7 were already reviewed). On 02/04/24 11:06, Adhemerval Zanella wrote: > Some recent math optimizations removed some symbols from the static > build and due to the limited static build check, along with > --disable-shared being broken for some time [1], this issue has slipped > some releases. > > Although the fix is straightforward, I added an extra framework to > enable static build for math libraries using the generic type > framework (which autogenerated the tests for all supported types using > the C template files). I have not enabled it for all tests due to the > required extra size constraint, this is done with a new define that > can be used with make check (build-math-static-tests). > > As an experiment, I enabled static build for all autogenerated math > tests. This has uncovered some extra missing symbols on some ABIs, along > with some issues with implementation used on static for some ABIs. On > x86_64/i686 it shows that the assembly optimizations for acos, log10, > log2, and ldbl-96 y0/y1 show some issues: > > x86_64-linux-gnu$ grep ^FAIL math/subdir-tests.sum > FAIL: math/test-float64x-acos-static > FAIL: math/test-float64x-log10-static > FAIL: math/test-float64x-log2-static > FAIL: math/test-float64x-y0-static > FAIL: math/test-float64x-y1-static > FAIL: math/test-ldouble-acos-static > FAIL: math/test-ldouble-log10-static > FAIL: math/test-ldouble-log2-static > FAIL: math/test-ldouble-y0-static > FAIL: math/test-ldouble-y1-static > > i686-linux-gnu$ grep ^FAIL math/subdir-tests.sum > FAIL: math/test-double-atanh-static > FAIL: math/test-float-atanh-static > FAIL: math/test-float32-atanh-static > FAIL: math/test-float32x-atanh-static > FAIL: math/test-float64-atanh-static > FAIL: math/test-float64x-acos-static > FAIL: math/test-float64x-acosh-static > FAIL: math/test-float64x-atanh-static > FAIL: math/test-float64x-log10-static > FAIL: math/test-float64x-log2-static > FAIL: math/test-float64x-y0-static > FAIL: math/test-float64x-y1-static > FAIL: math/test-ldouble-acos-static > FAIL: math/test-ldouble-acosh-static > FAIL: math/test-ldouble-atanh-static > FAIL: math/test-ldouble-log10-static > FAIL: math/test-ldouble-log2-static > FAIL: math/test-ldouble-y0-static > FAIL: math/test-ldouble-y1-static > > The powerpc64le also shows multiple issues with the static linking > (using gcc 13.1): > > FAIL: math/test-float128-exp10-static > FAIL: math/test-float64x-exp10-static > FAIL: math/test-ibm128-acos-static > FAIL: math/test-ibm128-copysign-static > FAIL: math/test-ibm128-exp10-static > FAIL: math/test-ibm128-fmod-static > FAIL: math/test-ibm128-frexp-static > FAIL: math/test-ibm128-modf-static > [...] > > I have not analyzed what is happening, but it might be due to the > '-mabi=ibmlongdouble' along with how libgcc.a was built (I saw some > issues on GCC bugzilla). > > I also tested this patchset with build-math-static-tests=yes for all > ABIs, and there is not more build failures. > > [1] https://sourceware.org/bugzilla/show_bug.cgi?id=20845 > > Adhemerval Zanella (7): > math: Add support for auto static math tests > math: Fix i386 and m68k fmod/fmodf on static build (BZ 31488) > math: Fix i386 and m68k exp10 on static build > math: Fix isnanf128 static build > math: Provided copysignf128 for static libm on alpha, s390, and > sparcv9 > math: Provide frexpf128 for static libm on alpha, s390, and sparcv9 > math: Provide modf128 for static libm on alpha, s390, and sparcv9 > > Makeconfig | 5 + > Makefile.help | 4 + > math/Makefile | 113 +++++++++++++++++++- > math/test-double-static.h | 1 + > math/test-float-static.h | 1 + > math/test-float128-static.h | 1 + > math/test-float32-static.h | 1 + > math/test-float32x-static.h | 1 + > math/test-float64-static.h | 1 + > math/test-float64x-static.h | 1 + > math/test-ibm128-static.h | 1 + > math/test-ldouble-static.h | 1 + > sysdeps/i386/fpu/w_exp10_compat.c | 9 +- > sysdeps/i386/fpu/w_fmod_compat.c | 7 +- > sysdeps/i386/fpu/w_fmodf_compat.c | 7 +- > sysdeps/ieee754/float128/float128_private.h | 2 +- > sysdeps/ieee754/float128/s_isnanf128.c | 4 + > sysdeps/ieee754/ldbl-64-128/s_copysignl.c | 4 +- > sysdeps/ieee754/ldbl-64-128/s_frexpl.c | 4 +- > sysdeps/ieee754/ldbl-64-128/s_modfl.c | 4 +- > sysdeps/ieee754/ldbl-opt/s_ldexpl.c | 4 +- > sysdeps/m68k/m680x0/fpu/w_exp10_compat.c | 9 +- > sysdeps/m68k/m680x0/fpu/w_fmod_compat.c | 5 +- > sysdeps/m68k/m680x0/fpu/w_fmodf_compat.c | 7 +- > 24 files changed, 170 insertions(+), 27 deletions(-) > create mode 100644 math/test-double-static.h > create mode 100644 math/test-float-static.h > create mode 100644 math/test-float128-static.h > create mode 100644 math/test-float32-static.h > create mode 100644 math/test-float32x-static.h > create mode 100644 math/test-float64-static.h > create mode 100644 math/test-float64x-static.h > create mode 100644 math/test-ibm128-static.h > create mode 100644 math/test-ldouble-static.h >