[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