diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2022-03-25 08:58:03 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2024-04-17 16:12:40 -0300 |
commit | 6272e416053443fcb4b2220f4c8779286d6c60fe (patch) | |
tree | f414bb0b1b9b1916fc842f9a838a9dd2086bf67a | |
parent | 8eb85e1f8ac6ec5544e681d3d1e880e442b37310 (diff) | |
download | glibc-6272e416053443fcb4b2220f4c8779286d6c60fe.zip glibc-6272e416053443fcb4b2220f4c8779286d6c60fe.tar.gz glibc-6272e416053443fcb4b2220f4c8779286d6c60fe.tar.bz2 |
Use check tests with trampolines iff compiler supports it
-rwxr-xr-x | configure | 33 | ||||
-rw-r--r-- | configure.ac | 20 | ||||
-rw-r--r-- | elf/Makefile | 10 | ||||
-rw-r--r-- | nptl/Makefile | 8 |
4 files changed, 64 insertions, 7 deletions
@@ -7454,6 +7454,39 @@ if test $libc_cv_cc_loop_to_function = yes; then fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC has support for trampolines" >&5 +printf %s "checking if $CC has support for trampolines... " >&6; } +if test ${libc_cv_cc_trampoline+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat > conftest.c <<EOF +void bar (void (*callback) (void)); +int foo (void) +{ + int var = 0; + void callback (void) { var = 1; } + bar (callback); + return var; +} +EOF +libc_cv_cc_trampoline=no +if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Werror -c conftest.c' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + libc_cv_cc_trampoline=yes +fi +rm -f conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_trampoline" >&5 +printf "%s\n" "$libc_cv_cc_trampoline" >&6; } +config_vars="$config_vars +have-cc-trampoline = $libc_cv_cc_trampoline" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libgd" >&5 printf %s "checking for libgd... " >&6; } if test "$with_gd" != "no"; then diff --git a/configure.ac b/configure.ac index 2f90025..99a0ea1 100644 --- a/configure.ac +++ b/configure.ac @@ -1526,6 +1526,26 @@ if test $libc_cv_cc_loop_to_function = yes; then fi AC_SUBST(libc_cv_cc_loop_to_function) +AC_CACHE_CHECK(if $CC has support for trampolines, libc_cv_cc_trampoline, [dnl +cat > conftest.c <<EOF +void bar (void (*callback) (void)); +int foo (void) +{ + int var = 0; + void callback (void) { var = 1; } + bar (callback); + return var; +} +EOF +libc_cv_cc_trampoline=no +if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Werror -c conftest.c]) +then + libc_cv_cc_trampoline=yes +fi +rm -f conftest*]) +LIBC_CONFIG_VAR([have-cc-trampoline], + [$libc_cv_cc_trampoline]) + dnl Check whether we have the gd library available. AC_MSG_CHECKING(for libgd) if test "$with_gd" != "no"; then diff --git a/elf/Makefile b/elf/Makefile index ec1516c..42450f9 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -537,7 +537,7 @@ endif selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null) ifneq ($(selinux-enabled),1) -tests-execstack-yes = \ +tests-execstack-yesyes = \ tst-execstack \ tst-execstack-needed \ tst-execstack-prog \ @@ -628,7 +628,7 @@ $(objpfx)tst-rtld-does-not-exist.out: tst-rtld-does-not-exist.sh $(objpfx)ld.so $(SHELL) $< $(objpfx)ld.so > $@; \ $(evaluate-test) -tests += $(tests-execstack-$(have-z-execstack)) +tests += $(tests-execstack-$(have-z-execstack)$(have-cc-trampoline)) ifeq ($(run-built-tests),yes) tests-special += \ $(objpfx)noload-mem.out \ @@ -992,7 +992,7 @@ modules-names-cxx = \ modules-names += \ $(if $(CXX),$(modules-names-cxx)) \ - $(modules-execstack-$(have-z-execstack)) \ + $(modules-execstack-$(have-z-execstack)$(have-cc-trampoline)) \ $(tlsmod17a-modules) \ $(tlsmod18a-modules) \ $(tst-tls-many-dynamic-modules) \ @@ -1041,7 +1041,7 @@ tests-pie += vismain CFLAGS-vismain.c += $(PIE-ccflag) endif endif -modules-execstack-yes = tst-execstack-mod +modules-execstack-yesyes = tst-execstack-mod extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) # filtmod1.so, tst-big-note-lib.so, tst-ro-dynamic-mod.so have special @@ -1833,7 +1833,7 @@ $(objpfx)unload8.out: $(objpfx)unload8mod1.so $(objpfx)unload8mod1x.so $(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so -ifeq ($(have-z-execstack),yes) +ifeq ($(have-z-execstack)$(have-cc-trampoline),yesyes) $(objpfx)tst-execstack.out: $(objpfx)tst-execstack-mod.so CPPFLAGS-tst-execstack.c += -DUSE_PTHREADS=0 LDFLAGS-tst-execstack = -Wl,-z,noexecstack diff --git a/nptl/Makefile b/nptl/Makefile index b3f8af2..a13a8ea 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -466,7 +466,7 @@ tests-internal += \ tst-tls3-malloc \ tst-tls5 \ # tests-internal -ifeq ($(have-z-execstack),yes) +ifeq ($(have-z-execstack)$(have-cc-trampoline),yesyes) tests += tst-execstack-threads endif endif @@ -475,7 +475,6 @@ modules-names = \ tst-audit-threads-mod1 \ tst-audit-threads-mod2 \ tst-compat-forwarder-mod \ - tst-execstack-threads-mod \ tst-stack4mod \ tst-tls3mod \ tst-tls5mod \ @@ -486,6 +485,11 @@ modules-names = \ tst-tls5mode \ tst-tls5modf \ # modules-names +ifeq ($(have-z-execstack)$(have-cc-trampoline),yesyes) +modules-names += \ + tst-execstack-threads-mod \ + # modules-names +endif extra-test-objs += \ $(addsuffix .os,$(strip $(modules-names))) \ tst-cleanup4aux.o \ |