[PATCH 19/39] elf: Enable tst-dlopen-nodelete-reloc if TEST_CXX supports STB_GNU_UNIQUE

Sam James sam@gentoo.org
Sun Dec 22 04:37:47 GMT 2024


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

> tst-dlopen-nodelete-reloc requires STB_GNU_UNIQUE support so that NODELETE
> is propagated by do_lookup_unique.  Enable it only if TEST_CXX supports
> STB_GNU_UNIQUE,
>
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> ---
>  configure    | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  configure.ac | 33 ++++++++++++++++++++++++++++++
>  elf/Makefile | 22 +++++++++++++-------
>  3 files changed, 106 insertions(+), 7 deletions(-)
>
> diff --git a/configure b/configure
> index 85d4832fac..f5e8096099 100755
> --- a/configure
> +++ b/configure
> @@ -8034,6 +8034,64 @@ CXX="$saved_CXX"
>  config_vars="$config_vars
>  test-config-cxxflags-finput-charset-ascii = $libc_cv_test_cxxflags_finput_charset_ascii"
>  
> +conftest_code="
> +extern int not_exist (void);
> +
> +inline int make_unique (void)
> +{
> +  /* Static variables in inline functions and classes
> +     generate STB_GNU_UNIQUE symbols.  */
> +  static int unique;
> +  return ++unique;
> +}
> +
> +int foo (void)
> +{
> +  return make_unique () + not_exist ();
> +}
> +"
> +
> +
> +cat > conftest.cc <<EOF
> +$conftest_code
> +EOF
> +
> +saved_CXX="$CXX"
> +CXX="$TEST_CXX"
> +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for STB_GNU_UNIQUE in testing" >&5
> +printf %s "checking for STB_GNU_UNIQUE in testing... " >&6; }
> +if test ${libc_cv_test_stb_gnu_unique+y}
> +then :
> +  printf %s "(cached) " >&6
> +else case e in #(
> +  e)     if { ac_try='${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc -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
> +
> +if $READELF -sW conftest | grep -q "UNIQUE.* _ZZ11make_uniquevE6unique"; then
> +  libc_cv_test_stb_gnu_unique=yes
> +else
> +  libc_cv_test_stb_gnu_unique=no
> +fi
> +
> +    else
> +      libc_cv_test_stb_gnu_unique=no
> +    fi ;;
> +esac
> +fi
> +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_test_stb_gnu_unique" >&5
> +printf "%s\n" "$libc_cv_test_stb_gnu_unique" >&6; }
> +
> +CXX="$saved_CXX"
> +
> +rm -f conftest*
> +config_vars="$config_vars
> +have-test-stb-gnu-unique = $libc_cv_test_stb_gnu_unique"
> +
>  { 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 bc6babe548..e331557350 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1600,6 +1600,39 @@ LIBC_TRY_TEST_CXX_OPTION([-finput-charset=ascii],
>  LIBC_CONFIG_VAR(test-config-cxxflags-finput-charset-ascii,
>  		$libc_cv_test_cxxflags_finput_charset_ascii)
>  
> +conftest_code="
> +extern int not_exist (void);
> +
> +inline int make_unique (void)
> +{
> +  /* Static variables in inline functions and classes
> +     generate STB_GNU_UNIQUE symbols.  */
> +  static int unique;
> +  return ++unique;
> +}
> +
> +int foo (void)
> +{
> +  return make_unique () + not_exist ();
> +}
> +"
> +
> +dnl Check if TEST_CXX supports STB_GNU_UNIQUE.
> +LIBC_TRY_TEST_CXX_COMMAND([for STB_GNU_UNIQUE],
> +  [$conftest_code],
> +  [-c],
> +  libc_cv_test_stb_gnu_unique,
> +  [
> +if $READELF -sW conftest | grep -q "UNIQUE.*
> _ZZ11make_uniquevE6unique"; then

Please do LC_ALL=C like in other uses to be safe. No need to resend for
that, OK with it fixed.

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

> +  libc_cv_test_stb_gnu_unique=yes
> +else
> +  libc_cv_test_stb_gnu_unique=no
> +fi
> +  ],
> +  [libc_cv_test_stb_gnu_unique=no],
> +)
> +LIBC_CONFIG_VAR([have-test-stb-gnu-unique], [$libc_cv_test_stb_gnu_unique])
> +
>  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 3c17688f19..e8fc6bd65f 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -505,11 +505,15 @@ tests += \
>    valgrind-test \
>    # tests
>  tests-cxx = \
> -  tst-dlopen-nodelete-reloc \
>    tst-nodelete \
>    tst-unique3 \
>    tst-unique4 \
>    # tests-cxx
> +ifeq ($(have-test-stb-gnu-unique), yes)
> +tests-cxx += \
> +  tst-dlopen-nodelete-reloc \
> +  # tests-cxx
> +endif
>  
>  tests += $(if $(CXX),$(tests-cxx))
>  
> @@ -1042,6 +1046,15 @@ modules-names += \
>    # modules-names
>  
>  modules-names-cxx = \
> +  tst-nodelete-rtldmod \
> +  tst-nodelete-uniquemod \
> +  tst-nodelete-zmod \
> +  tst-unique3lib \
> +  tst-unique3lib2 \
> +  tst-unique4lib \
> +  # modules-names-cxx
> +ifeq ($(have-test-stb-gnu-unique), yes)
> +modules-names-cxx += \
>    tst-dlopen-nodelete-reloc-mod1 \
>    tst-dlopen-nodelete-reloc-mod2 \
>    tst-dlopen-nodelete-reloc-mod3 \
> @@ -1059,13 +1072,8 @@ modules-names-cxx = \
>    tst-dlopen-nodelete-reloc-mod15 \
>    tst-dlopen-nodelete-reloc-mod16 \
>    tst-dlopen-nodelete-reloc-mod17 \
> -  tst-nodelete-rtldmod \
> -  tst-nodelete-uniquemod \
> -  tst-nodelete-zmod \
> -  tst-unique3lib \
> -  tst-unique3lib2 \
> -  tst-unique4lib \
>    # modules-names-cxx
> +endif
>  
>  modules-names += \
>    $(if $(CXX),$(modules-names-cxx)) \


More information about the Libc-alpha mailing list