Build get-cpuid-feature-leaf.c without stack-protector [BZ #27555]

__x86_get_cpuid_feature_leaf is called during early startup, before
the stack check guard is initialized and is hence not safe to build
with stack-protector.

Additionally, IFUNC resolvers for static tst-ifunc-isa tests get
called too early for stack protector to be useful, so fix them to
disable stack protector for the resolver functions.

This fixes all failures seen with --enable-stack-protector=all
configuration.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
Siddhesh Poyarekar 2021-03-15 20:24:45 +05:30
parent 03f42a56eb
commit 941ea10f80
2 changed files with 4 additions and 0 deletions

View File

@ -7,6 +7,8 @@ sysdep_routines += get-cpuid-feature-leaf
sysdep-dl-routines += dl-get-cpu-features
sysdep_headers += sys/platform/x86.h
CFLAGS-get-cpuid-feature-leaf.o += $(no-stack-protector)
tests += tst-get-cpu-features tst-get-cpu-features-static \
tst-cpu-features-cpuinfo tst-cpu-features-cpuinfo-static \
tst-cpu-features-supports tst-cpu-features-supports-static

View File

@ -29,6 +29,7 @@ enum isa
};
enum isa
__attribute__ ((__optimize__ ("-fno-stack-protector")))
get_isa (void)
{
if (CPU_FEATURE_USABLE (AVX512F))
@ -83,6 +84,7 @@ isa_none (void)
int foo (void) __attribute__ ((ifunc ("foo_ifunc")));
void *
__attribute__ ((__optimize__ ("-fno-stack-protector")))
foo_ifunc (void)
{
switch (get_isa ())