]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Enable execstack tests only if compiler supports trampoline
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 16 Dec 2024 11:20:54 +0000 (19:20 +0800)
committerH.J. Lu <hjl.tools@gmail.com>
Sun, 22 Dec 2024 04:55:50 +0000 (12:55 +0800)
Since trampoline is required to test execstack, enable execstack tests
only if compiler supports trampoline.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
Reviewed-by: Sam James <sam@gentoo.org>
configure
configure.ac
elf/Makefile
nptl/Makefile

index b899d39717d727ed9b1c720d55b2ed9f46422426..aaad07e95244fb7914544b4d3f8bfb8cb317807f 100755 (executable)
--- a/configure
+++ b/configure
@@ -7774,6 +7774,53 @@ config_vars="$config_vars
 cc-option-wimplicit-fallthrough = $libc_cv_cc_wimplicit_fallthrough"
 
 
+conftest_code="
+void bar (void (*callback) (void));
+int foo (void)
+{
+  int var = 0;
+  void callback (void) { var = 1; }
+  bar (callback);
+  return var;
+}
+"
+
+
+cat > conftest.c <<EOF
+$conftest_code
+EOF
+
+saved_CC="$CC"
+CC="$TEST_CC"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking support for trampolines in testing" >&5
+printf %s "checking support for trampolines in testing... " >&6; }
+if test ${libc_cv_test_cc_trampolines+y}
+then :
+  printf %s "(cached) " >&6
+else case e in #(
+  e)     if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c -Werror conftest.c -o conftest 1>&5'
+  { { 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_test_cc_trampolines=yes
+    else
+      libc_cv_test_cc_trampolines=no
+
+    fi ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_test_cc_trampolines" >&5
+printf "%s\n" "$libc_cv_test_cc_trampolines" >&6; }
+
+CC="$saved_CC"
+
+rm -f conftest*
+config_vars="$config_vars
+have-test-cc-trampoline = $libc_cv_test_cc_trampolines"
+
 
 
 saved_CC="$CC"
index 6eaf83b8dcb2a145f2273a0a7438dd09c13d16bd..d4c1c7c916608e4ca33dc101c4c232b2e1d61edf 100644 (file)
@@ -1527,6 +1527,28 @@ LIBC_CONFIG_VAR([cc-option-wimplicit-fallthrough],
                [$libc_cv_cc_wimplicit_fallthrough])
 AC_SUBST(libc_cv_test_cc_wimplicit_fallthrough)
 
+conftest_code="
+void bar (void (*callback) (void));
+int foo (void)
+{
+  int var = 0;
+  void callback (void) { var = 1; }
+  bar (callback);
+  return var;
+}
+"
+
+dnl Check if TEST_CC support trampolines.
+LIBC_TRY_TEST_CC_COMMAND([support for trampolines],
+  [$conftest_code],
+  [-c -Werror],
+  libc_cv_test_cc_trampolines,
+  [libc_cv_test_cc_trampolines=yes],
+  [libc_cv_test_cc_trampolines=no]
+)
+LIBC_CONFIG_VAR([have-test-cc-trampoline],
+               [$libc_cv_test_cc_trampolines])
+
 dnl Check if TEST_CC supports -finput-charset=ascii.
 LIBC_TRY_TEST_CC_OPTION([-finput-charset=ascii],
   [-c -Werror -finput-charset=ascii],
index a5a25a83702873f243edcccf8a4a1745f5f1135a..b62836d79c8c9e5421cf590ca7ad694386e3fc77 100644 (file)
@@ -557,12 +557,14 @@ endif
 selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null)
 
 ifneq ($(selinux-enabled),1)
+ifeq ($(have-test-cc-trampoline),yes)
 tests-execstack-yes = \
   tst-execstack \
   tst-execstack-needed \
   tst-execstack-prog \
   # tests-execstack-yes
 endif
+endif
 ifeq ($(have-depaudit),yes)
 tests += \
   tst-audit14 \
@@ -1146,7 +1148,9 @@ tests-pie += vismain
 CFLAGS-vismain.c += $(PIE-ccflag)
 endif
 endif
+ifeq ($(have-test-cc-trampoline),yes)
 modules-execstack-yes = tst-execstack-mod
+endif
 extra-test-objs += $(addsuffix .os,$(strip $(modules-names)))
 
 # filtmod1.so, tst-big-note-lib.so, tst-ro-dynamic-mod.so have special
index 88077e27bb054e110dcfdd3000c7035024da9bd5..bc2e499a7c6c80179ed10eba3e6e2d34e9ffa042 100644 (file)
@@ -474,7 +474,7 @@ tests-internal += \
   tst-tls3-malloc \
   tst-tls5 \
   # tests-internal
-ifeq ($(have-z-execstack),yes)
+ifeq ($(have-z-execstack)$(have-test-cc-trampoline),yesyes)
 tests += tst-execstack-threads
 endif
 endif
@@ -483,7 +483,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 \
@@ -504,6 +503,12 @@ test-extras += \
   tst-cleanupx4aux \
   # test-extras
 
+ifneq ($(have-test-clang),yes)
+modules-names += \
+  tst-execstack-threads-mod \
+  # modules-names
+endif
+
 # This test exercises compat symbols removed in glibc 2.34.
 ifdef have-GLIBC_2.33
 tests += tst-cleanup4