[PATCH 1/5] configure: use TEST_CC to check for --no-error-execstack

Sam James sam@gentoo.org
Sat Dec 6 13:33:04 GMT 2025


Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:

> The ld.lld does not support the --no-error-execstack option, and it is
> required only to suppress the linker warning while building tests. A new
> configure macro, LIBC_TEST_LINKER_FEATURE, is added to check for linker
> features using TEST_CC instead of CC.
>
> Checked on x86_64-linux-gnu and aarch64-linux-gnu with gcc and
> TEST_CC set to clang-18 and clan-21.

Ah, my bad for introducing this IIRC with the wrong var name.

OK but we should implement H.J.'s suggestion of fixing up these
things.

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

> ---
>  aclocal.m4   | 32 ++++++++++++++++++++++++++++++++
>  configure    |  3 +++
>  configure.ac |  2 +-
>  3 files changed, 36 insertions(+), 1 deletion(-)
>
> diff --git a/aclocal.m4 b/aclocal.m4
> index 5c25a71d8f..b32076d8d0 100644
> --- a/aclocal.m4
> +++ b/aclocal.m4
> @@ -268,6 +268,38 @@ else
>  fi
>  AC_MSG_RESULT($libc_linker_feature)])
>  
> +dnl Check linker option support.
> +dnl LIBC_TEST_LINKER_FEATURE([ld_option], [cc_option], [action-if-true], [action-if-false])
> +AC_DEFUN([LIBC_TEST_LINKER_FEATURE],
> +[AC_MSG_CHECKING([for linker that supports $1])
> +libc_linker_feature=no
> +cat > conftest.c <<EOF
> +int _start (void) { return 42; }
> +EOF
> +saved_CC="$CC"
> +CC="$TEST_CC"
> +if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
> +		  $2 -nostdlib -nostartfiles
> +		  -fPIC -shared -o conftest.so conftest.c
> +		  1>&AS_MESSAGE_LOG_FD])
> +then
> +  if ${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp $2 -nostdlib \
> +      -nostartfiles -fPIC -shared -o conftest.so conftest.c 2>&1 \
> +      | grep "warning: $1 ignored" > /dev/null 2>&1; then
> +    true
> +  else
> +    libc_linker_feature=yes
> +  fi
> +fi
> +rm -f conftest*
> +if test $libc_linker_feature = yes; then
> +  $3
> +else
> +  $4
> +fi
> +CC="$saved_CC"
> +AC_MSG_RESULT($libc_linker_feature)])
> +
>  dnl Add a makefile variable, with value set from a shell string
>  dnl (expanded by the shell inside double quotes), to config.make.
>  dnl LIBC_CONFIG_VAR(make-variable, shell-value)
> diff --git a/configure b/configure
> index 09ac6ff760..ff7c1d45b8 100755
> --- a/configure
> +++ b/configure
> @@ -7143,6 +7143,8 @@ libc_linker_feature=no
>  cat > conftest.c <<EOF
>  int _start (void) { return 42; }
>  EOF
> +saved_CC="$CC"
> +CC="$TEST_CC"
>  if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp
>  		  -Wl,--no-error-execstack -nostdlib -nostartfiles
>  		  -fPIC -shared -o conftest.so conftest.c
> @@ -7167,6 +7169,7 @@ if test $libc_linker_feature = yes; then
>  else
>    libc_cv_no_error_execstack=no
>  fi
> +CC="$saved_CC"
>  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_linker_feature" >&5
>  printf "%s\n" "$libc_linker_feature" >&6; }
>  
> diff --git a/configure.ac b/configure.ac
> index 73176840cc..1cde589da6 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1328,7 +1328,7 @@ if test $libc_cv_as_noexecstack = yes; then
>  fi
>  AC_SUBST(ASFLAGS_config)
>  
> -LIBC_LINKER_FEATURE([--no-error-execstack], [-Wl,--no-error-execstack],
> +LIBC_TEST_LINKER_FEATURE([--no-error-execstack], [-Wl,--no-error-execstack],
>  		    [libc_cv_no_error_execstack=yes], [libc_cv_no_error_execstack=no])
>  AC_SUBST(libc_cv_no_error_execstack)


More information about the Libc-alpha mailing list