From: Adhemerval Zanella Date: Tue, 23 Dec 2025 17:30:45 +0000 (-0300) Subject: x86: Fix x86_64 build failure with -Os (BZ 33367) X-Git-Tag: glibc-2.43~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=422c3a5baf3cbe5d212c240bce99dbafed55d4ef;p=thirdparty%2Fglibc.git x86: Fix x86_64 build failure with -Os (BZ 33367) The 13cfd77bf5 change broke the b5d88fa6c3 fix by removing the symbol to __symbol redirections. Although it works for -O2 with both gcc and clang, with -Os without the redirection, the libcall might still be issued. This patch reinstates the b5d88fa6c3 fix, with a modification that allows each ifunc variant to control which trunc to issue. This is required for clang, which defines HAVE_X86_INLINE_TRUNC to 1 (meaning that trunc will always be lowered to the instruction on -Os). Checked on x86_64-linux-gnu with -O2 and -Os with gcc-15 and clang-18. Reviewed-by: Carlos O'Donell --- diff --git a/sysdeps/ieee754/dbl-64/s_modf.c b/sysdeps/ieee754/dbl-64/s_modf.c index 7c7e2de6b2..9020567085 100644 --- a/sysdeps/ieee754/dbl-64/s_modf.c +++ b/sysdeps/ieee754/dbl-64/s_modf.c @@ -25,12 +25,15 @@ __modf (double x, double *iptr) { uint64_t t = asuint64 (x); #if USE_TRUNC_BUILTIN +# ifndef TRUNC +# define TRUNC trunc +# endif if (is_inf (t)) { *iptr = x; return copysign (0.0, x); } - *iptr = trunc (x); + *iptr = TRUNC (x); return copysign (x - *iptr, x); #else int e = get_exponent (t); diff --git a/sysdeps/ieee754/flt-32/s_modff.c b/sysdeps/ieee754/flt-32/s_modff.c index 2addebc425..cc42098045 100644 --- a/sysdeps/ieee754/flt-32/s_modff.c +++ b/sysdeps/ieee754/flt-32/s_modff.c @@ -25,12 +25,15 @@ __modff (float x, float *iptr) { uint32_t t = asuint (x); #if USE_TRUNCF_BUILTIN +# ifndef TRUNCF +# define TRUNCF truncf +# endif if (is_inf (t)) { *iptr = x; return copysignf (0.0, x); } - *iptr = truncf (x); + *iptr = TRUNCF (x); return copysignf (x - *iptr, x); #else int e = get_exponent (t); diff --git a/sysdeps/x86_64/fpu/multiarch/s_modf-avx.c b/sysdeps/x86_64/fpu/multiarch/s_modf-avx.c index 9b8b951a97..76e7896277 100644 --- a/sysdeps/x86_64/fpu/multiarch/s_modf-avx.c +++ b/sysdeps/x86_64/fpu/multiarch/s_modf-avx.c @@ -1,2 +1,3 @@ #define __modf __modf_avx +#define TRUNC __trunc #include diff --git a/sysdeps/x86_64/fpu/multiarch/s_modf-sse4_1.c b/sysdeps/x86_64/fpu/multiarch/s_modf-sse4_1.c index 1f77386336..49fa4f0b97 100644 --- a/sysdeps/x86_64/fpu/multiarch/s_modf-sse4_1.c +++ b/sysdeps/x86_64/fpu/multiarch/s_modf-sse4_1.c @@ -1,2 +1,3 @@ #define __modf __modf_sse41 +#define TRUNC __trunc #include diff --git a/sysdeps/x86_64/fpu/multiarch/s_modff-avx.c b/sysdeps/x86_64/fpu/multiarch/s_modff-avx.c index 488f93700c..3b00c364b1 100644 --- a/sysdeps/x86_64/fpu/multiarch/s_modff-avx.c +++ b/sysdeps/x86_64/fpu/multiarch/s_modff-avx.c @@ -1,2 +1,3 @@ #define __modff __modff_avx +#define TRUNCF __truncf #include diff --git a/sysdeps/x86_64/fpu/multiarch/s_modff-sse4_1.c b/sysdeps/x86_64/fpu/multiarch/s_modff-sse4_1.c index 8e49970ffc..58d46582bd 100644 --- a/sysdeps/x86_64/fpu/multiarch/s_modff-sse4_1.c +++ b/sysdeps/x86_64/fpu/multiarch/s_modff-sse4_1.c @@ -1,2 +1,3 @@ #define __modff __modff_sse41 +#define TRUNCF __truncf #include