[PATCH 09/39] Enable execstack tests only if compiler supports trampoline

Sam James sam@gentoo.org
Sun Dec 22 02:47:42 GMT 2024


"H.J. Lu" <hjl.tools@gmail.com> writes:

> Since trampoline is required to test execstack, enable execstack tests
> only if compiler supports trampoline.
>

Reviewed-by: Sam James <sam@gentoo.org>

> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> ---
>  configure     | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>  configure.ac  | 22 ++++++++++++++++++++++
>  elf/Makefile  |  4 ++++
>  nptl/Makefile |  9 +++++++--
>  4 files changed, 80 insertions(+), 2 deletions(-)
>
> diff --git a/configure b/configure
> index 73eaf0e4e7..1eb2d1e7e9 100755
> --- a/configure
> +++ b/configure
> @@ -7775,6 +7775,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"
> diff --git a/configure.ac b/configure.ac
> index ecb51e4384..9f72a2a0ae 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1528,6 +1528,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],
> diff --git a/elf/Makefile b/elf/Makefile
> index a5a25a8370..b62836d79c 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -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
> diff --git a/nptl/Makefile b/nptl/Makefile
> index 88077e27bb..bc2e499a7c 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
> @@ -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


More information about the Libc-alpha mailing list