diff -up glibc-2.39/Makeconfig.74~ glibc-2.39/Makeconfig --- glibc-2.39/Makeconfig.74~ 2024-04-18 16:39:26.102289336 +0200 +++ glibc-2.39/Makeconfig 2024-04-18 16:39:26.162289984 +0200 @@ -381,6 +381,15 @@ relro-LDFLAGS = -Wl,-z,relro LDFLAGS.so += $(relro-LDFLAGS) LDFLAGS-rtld += $(relro-LDFLAGS) +ifeq (yes,$(have-hash-style)) +# For the time being we unconditionally use 'both'. At some time we +# should declare statically linked code as 'out of luck' and compile +# with --hash-style=gnu only. +hashstyle-LDFLAGS = -Wl,--hash-style=both +LDFLAGS.so += $(hashstyle-LDFLAGS) +LDFLAGS-rtld += $(hashstyle-LDFLAGS) +endif + # Linker options to enable and disable DT_RELR. ifeq ($(have-dt-relr),yes) dt-relr-ldflag = -Wl,-z,pack-relative-relocs diff -up glibc-2.39/config.make.in.74~ glibc-2.39/config.make.in --- glibc-2.39/config.make.in.74~ 2024-01-31 01:34:58.000000000 +0100 +++ glibc-2.39/config.make.in 2024-04-18 16:39:26.162289984 +0200 @@ -70,6 +70,7 @@ have-libaudit = @have_libaudit@ have-libcap = @have_libcap@ have-cc-with-libunwind = @libc_cv_cc_with_libunwind@ bind-now = @bindnow@ +have-hash-style = @libc_cv_hashstyle@ have-cxx-thread_local = @libc_cv_cxx_thread_local@ have-loop-to-function = @libc_cv_cc_loop_to_function@ have-textrel_ifunc = @libc_cv_textrel_ifunc@ diff -up glibc-2.39/configure.74~ glibc-2.39/configure --- glibc-2.39/configure.74~ 2024-04-18 16:39:25.826286363 +0200 +++ glibc-2.39/configure 2024-04-18 16:40:52.127216895 +0200 @@ -655,6 +655,7 @@ libc_cv_cc_submachine libc_cv_cc_nofma libc_cv_mtls_descriptor libc_cv_has_glob_dat +libc_cv_hashstyle libc_cv_fpie libc_cv_z_execstack ASFLAGS_config @@ -6974,6 +6975,32 @@ fi printf "%s\n" "$libc_cv_fpie" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --hash-style option" >&5 +$as_echo_n "checking for --hash-style option... " >&6; } +if ${libc_cv_hashstyle+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + libc_cv_hashstyle=yes +else + libc_cv_hashstyle=no +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_hashstyle" >&5 +$as_echo "$libc_cv_hashstyle" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLOB_DAT reloc" >&5 printf %s "checking for GLOB_DAT reloc... " >&6; } diff -up glibc-2.39/configure.ac.74~ glibc-2.39/configure.ac --- glibc-2.39/configure.ac.74~ 2024-04-18 16:39:25.826286363 +0200 +++ glibc-2.39/configure.ac 2024-04-18 16:39:26.166290027 +0200 @@ -1267,6 +1267,22 @@ LIBC_TRY_CC_OPTION([-fpie], [libc_cv_fpi AC_SUBST(libc_cv_fpie) +AC_CACHE_CHECK(for --hash-style option, + libc_cv_hashstyle, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then + libc_cv_hashstyle=yes +else + libc_cv_hashstyle=no +fi +rm -f conftest*]) +AC_SUBST(libc_cv_hashstyle) + AC_CACHE_CHECK(for GLOB_DAT reloc, libc_cv_has_glob_dat, [dnl cat > conftest.c <