[PATCH] x86-64: Compile ISA versions of modf/modff with -fno-stack-protector

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Thu Jul 17 13:17:00 GMT 2025



On 16/07/25 23:48, H.J. Lu wrote:
> Since modf and modff are compiled into both libc and libm, when glibc is
> configured with --enable-stack-protector=all, ISA versions of modf and
> modff should be compiled with -fno-stack-protector to avoid calling
> __stack_chk_fail via PLT in libc.so.
> 
> This fixes BZ #33165.
> 
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> ---
>  sysdeps/x86_64/fpu/multiarch/Makefile | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
> index 5fe872b898..81a870d3b1 100644
> --- a/sysdeps/x86_64/fpu/multiarch/Makefile
> +++ b/sysdeps/x86_64/fpu/multiarch/Makefile
> @@ -159,11 +159,18 @@ CFLAGS-s_sin-avx.c = -msse2avx -DSSE2AVX
>  CFLAGS-s_tan-avx.c = -msse2avx -DSSE2AVX
>  CFLAGS-s_sincos-avx.c = -msse2avx -DSSE2AVX
>  
> -CFLAGS-s_modf-sse4_1.c = -msse4.1 -fno-builtin-modff32x -fno-builtin-modff64
> -CFLAGS-s_modff-sse4_1.c = -msse4.1 -fno-builtin-modff32
> +CFLAGS-s_modf-c.c = $(no-stack-protector)
> +CFLAGS-s_modff-c.c = $(no-stack-protector)
>  
> -CFLAGS-s_modf-avx.c = -msse2avx -DSSE2AVX -fno-builtin-modff32x -fno-builtin-modff64
> -CFLAGS-s_modff-avx.c = -msse2avx -DSSE2AVX -fno-builtin-modff32
> +CFLAGS-s_modf-sse4_1.c = -msse4.1 -fno-builtin-modff32x \
> +			 -fno-builtin-modff64 $(no-stack-protector)
> +CFLAGS-s_modff-sse4_1.c = -msse4.1 -fno-builtin-modff32 \
> +			  $(no-stack-protector)
> +
> +CFLAGS-s_modf-avx.c = -msse2avx -DSSE2AVX -fno-builtin-modff32x \
> +		      $(no-stack-protector) -fno-builtin-modff64
> +CFLAGS-s_modff-avx.c = -msse2avx -DSSE2AVX -fno-builtin-modff32 \
> +		      $(no-stack-protector)
>  endif
>  
>  ifeq ($(subdir),mathvec)

I am checking a different strategy to avoid disable stack protector, but I
don't have a strong preference:

diff --git a/sysdeps/generic/symbol-hacks.h b/sysdeps/generic/symbol-hacks.h
index 1115e4c0a7..1bd330cc88 100644
--- a/sysdeps/generic/symbol-hacks.h
+++ b/sysdeps/generic/symbol-hacks.h
@@ -1,20 +1,26 @@
 /* Some compiler optimizations may transform loops into memset/memmove
    calls and without proper declaration it may generate PLT calls.  */
-#if !defined __ASSEMBLER__ && IS_IN (libc) && defined SHARED \
+#if !defined __ASSEMBLER__ \
+    && IS_IN (libc) \
+    && defined SHARED \
     && !defined LIBC_NONSHARED
 asm ("memmove = __GI_memmove");
 asm ("memset = __GI_memset");
 asm ("memcpy = __GI_memcpy");
+#endif

 /* Some targets do not use __stack_chk_fail_local.  In libc.so,
    redirect __stack_chk_fail to a hidden reference
    __stack_chk_fail_local, to avoid the PLT reference.
    __stack_chk_fail itself is a global symbol, exported from libc.so,
-   and cannot be made hidden.  */
-
-# if IS_IN (libc) && defined SHARED \
-  && defined STACK_PROTECTOR_LEVEL && STACK_PROTECTOR_LEVEL > 0
+   and cannot be made hidden.
+   The FORCE_LOCAL_STACK_CHK_FAIL is used for TU that are also included in
+   libc, but built with a different module name.  */
+#if !defined __ASSEMBLER__ \
+    && (IS_IN (libc) || defined FORCE_LOCAL_STACK_CHK_FAIL) \
+    && defined SHARED \
+    && defined STACK_PROTECTOR_LEVEL && STACK_PROTECTOR_LEVEL > 0 \
+    && !defined LIBC_NONSHARED
 asm (".hidden __stack_chk_fail_local\n"
      "__stack_chk_fail = __stack_chk_fail_local");
-# endif
 #endif
diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
index 5fe872b898..f129289733 100644
--- a/sysdeps/x86_64/fpu/multiarch/Makefile
+++ b/sysdeps/x86_64/fpu/multiarch/Makefile
@@ -159,11 +159,15 @@ CFLAGS-s_sin-avx.c = -msse2avx -DSSE2AVX
 CFLAGS-s_tan-avx.c = -msse2avx -DSSE2AVX
 CFLAGS-s_sincos-avx.c = -msse2avx -DSSE2AVX

-CFLAGS-s_modf-sse4_1.c = -msse4.1 -fno-builtin-modff32x -fno-builtin-modff64
-CFLAGS-s_modff-sse4_1.c = -msse4.1 -fno-builtin-modff32

-CFLAGS-s_modf-avx.c = -msse2avx -DSSE2AVX -fno-builtin-modff32x -fno-builtin-modff64
-CFLAGS-s_modff-avx.c = -msse2avx -DSSE2AVX -fno-builtin-modff32
+CFLAGS-s_modf-c.c = -DFORCE_LOCAL_STACK_CHK_FAIL
+CFLAGS-s_modff-c.c = -DFORCE_LOCAL_STACK_CHK_FAIL
+
+CFLAGS-s_modf-sse4_1.c = -msse4.1 -fno-builtin-modff32x -fno-builtin-modff64 -DFORCE_LOCAL_STACK_CHK_FAIL
+CFLAGS-s_modff-sse4_1.c = -msse4.1 -fno-builtin-modff32 -DFORCE_LOCAL_STACK_CHK_FAIL
+
+CFLAGS-s_modf-avx.c = -msse2avx -DSSE2AVX -fno-builtin-modff32x -fno-builtin-modff64 -DFORCE_LOCAL_STACK_CHK_FAIL
+CFLAGS-s_modff-avx.c = -msse2avx -DSSE2AVX -fno-builtin-modff32 -DFORCE_LOCAL_STACK_CHK_FAIL
 endif

 ifeq ($(subdir),mathvec)


More information about the Libc-alpha mailing list