commit: 71216534d200783579348d1223aa294c93d7684b Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Thu Oct 2 11:04:23 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Thu Oct 2 11:04:23 2025 +0000 URL: https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=71216534
16.0.0: drop GNU2 TLS patch until I can rebase Signed-off-by: Sam James <sam <AT> gentoo.org> ...fault-to-mtls-dialect-gnu2-if-appropriate.patch | 456 --------------------- 16.0.0/gentoo/README.history | 1 + 2 files changed, 1 insertion(+), 456 deletions(-) diff --git a/16.0.0/gentoo/86_all_PR120933-i386-default-to-mtls-dialect-gnu2-if-appropriate.patch b/16.0.0/gentoo/86_all_PR120933-i386-default-to-mtls-dialect-gnu2-if-appropriate.patch deleted file mode 100644 index dfd673c..0000000 --- a/16.0.0/gentoo/86_all_PR120933-i386-default-to-mtls-dialect-gnu2-if-appropriate.patch +++ /dev/null @@ -1,456 +0,0 @@ -From 06ade1197723d083766db2ea37af464492795b07 Mon Sep 17 00:00:00 2001 -Message-ID: <06ade1197723d083766db2ea37af464492795b07.1756358799.git....@gentoo.org> -From: Sam James <[email protected]> -Date: Sun, 24 Aug 2025 00:30:45 +0100 -Subject: [PATCH] i386: default to -mtls-dialect=gnu2 if appropriate - -GNU2 TLS descriptors were introduced in 2006 (r0-73091-g5bf5a10b1ccacf) -but were only opt-in with -mtls-dialect=gnu2. They are more efficient -and it's time to enable them by default. - -Builds on the --with-tls= machinery from r16-3355-g96a291c4bb0b8a. - -We achieve this for GNU/Linux IA-32/X86-64 targets by checking if ld emits -GLIBC_ABI_GNU2_TLS, using its presence to decide if we can default to --mtls-dialect=gnu2. - -For PR ld/33130, newer ld will add GLIBC_ABI_GNU2_TLS if either unconfigured -(auto mode) or if configured with --enable-gnu2-tls-tag. In auto mode, -GLIBC_ABI_GNU2_TLS is only added if glibc provides it. In explicit mode, the -user has asked for this behavior and binaries will depend on GLIBC_ABI_GNU2_TLS -and fixed glibc. Hence the presence of GLIBC_ABI_GNU2_TLS tells us if we can -safely default to GNU2 TLS descriptors. We added GLIBC_ABI_GNU2_TLS in glibc -to indicate that PR dynamic-link/33129 is fixed. - -If distributions wish to opt-out of this for systems which meet the above -conditions, they can either configure GCC using --with-tls=gnu, or configure -binutils with --disable-gnu2-tls-tag: if this is necessary, it is recommended -to use --with-tls=gnu instead, to avoid affecting the ecosystem negatively by -having unmarked binaries. - -Some implementation notes: -* The readelf check had to be moved earlier because we want - to set `with_tls` before `config.gcc` is processed (which has default - machinery for TLS). - -* The check doesn't really handle cross, but I don't see - this as a huge problem. The check is already opportunistic and if it - fails, it falls back to --with-tls=DIALECT if passed, and failing that, - the previous and safe default of 'gnu'. - -* The change is only made for glibc systems at this time. Enablement and testing - can be done for other libcs as future work. - -* In future, we may do the same thing for ARM if/when appropriate equivalent - machinery is added to glibc and bfd. This makes the separate position of - the check (not with some of the others) a bit more palatable IMO. - -gcc/ChangeLog: - PR target/120933 - * configure: Regenerate. - * configure.ac (gcc_cv_readelf): Move check earlier. - (gcc_cv_libc_x86_tlsdesc_call): Define to 'yes' if - glibc has the GLIBC_ABI_GNU2_TLS version tag and ld emits it. - (with_tls): Default to 'gnu2' if --with-tls is not passed and - gcc_cv_libc_x86_tlsdesc_call is 'yes'. ---- - gcc/configure | 217 +++++++++++++++++++++++++++++++---------------- - gcc/configure.ac | 112 ++++++++++++++++++------ - 2 files changed, 229 insertions(+), 100 deletions(-) - -diff --git a/gcc/configure b/gcc/configure -index 4a751d969bab..ba303469613c 100755 ---- a/gcc/configure -+++ b/gcc/configure -@@ -737,7 +737,6 @@ libgcc_visibility - ORIGINAL_DSYMUTIL_FOR_TARGET - gcc_cv_dsymutil - gcc_cv_otool --gcc_cv_readelf - gcc_cv_objdump - ORIGINAL_NM_FOR_TARGET - gcc_cv_nm -@@ -801,6 +800,7 @@ HAVE_AUTO_BUILD - extra_opt_files - extra_modes_file - NATIVE_SYSTEM_HEADER_DIR -+gcc_cv_readelf - objext - manext - LIBICONV_DEP -@@ -12927,6 +12927,145 @@ if test "x$enable_win32_utf8_manifest" != xno; then - host_extra_objs_mingw=utf8-mingw32.o - fi - -+ -+# Figure out what readelf we will be using. -+if ${gcc_cv_readelf+:} false; then : -+ -+else -+ -+if test -f $gcc_cv_binutils_srcdir/configure.ac \ -+ && test -f ../binutils/Makefile \ -+ && test x$build = x$host; then -+ # Single tree build which includes binutils. -+ gcc_cv_readelf=../binutils/readelf$build_exeext -+elif test -x readelf$build_exeext; then -+ gcc_cv_readelf=./readelf$build_exeext -+elif ( set dummy $READELF_FOR_TARGET; test -x $2 ); then -+ gcc_cv_readelf="$READELF_FOR_TARGET" -+else -+ # Extract the first word of "$READELF_FOR_TARGET", so it can be a program name with args. -+set dummy $READELF_FOR_TARGET; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if ${ac_cv_path_gcc_cv_readelf+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ case $gcc_cv_readelf in -+ [\\/]* | ?:[\\/]*) -+ ac_cv_path_gcc_cv_readelf="$gcc_cv_readelf" # Let the user override the test with a path. -+ ;; -+ *) -+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ ac_cv_path_gcc_cv_readelf="$as_dir/$ac_word$ac_exec_ext" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+ ;; -+esac -+fi -+gcc_cv_readelf=$ac_cv_path_gcc_cv_readelf -+if test -n "$gcc_cv_readelf"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_readelf" >&5 -+$as_echo "$gcc_cv_readelf" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ -+fi -+fi -+ -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what readelf to use" >&5 -+$as_echo_n "checking what readelf to use... " >&6; } -+if test "$gcc_cv_readelf" = ../binutils/readelf$build_exeext; then -+ # Single tree build which includes binutils. -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: newly built readelf" >&5 -+$as_echo "newly built readelf" >&6; } -+elif test x$gcc_cv_readelf = x; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -+$as_echo "not found" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_readelf" >&5 -+$as_echo "$gcc_cv_readelf" >&6; } -+fi -+ -+case $target in -+ i[34567]86-*-gnu* | x86_64-*-gnu* ) -+ # PR target/120933 -+ # For GNU/Linux targets, check if ld emits GLIBC_ABI_GNU2_TLS. For PR ld/33130, -+ # newer ld will add GLIBC_ABI_GNU2_TLS if either unconfigured (auto mode) or if -+ # configured with --enable-gnu2-tls-tag. In auto mode, GLIBC_ABI_GNU2_TLS -+ # is only added if glibc provides it. In explicit mode, the user has asked -+ # for this behavior and binaries will depend on GLIBC_ABI_GNU2_TLS and fixed -+ # glibc. Hence the presence of GLIBC_ABI_GNU2_TLS tells us if we can safely -+ # default to GNU2 TLS descriptors. -+ conftest_S=' -+ .section .text.startup,"ax",@progbits -+ .p2align 4 -+ .globl main -+ .type main, @function -+ main: -+ #ifdef __x86_64__ -+ leaq foo@TLSDESC(%rip), %rax -+ call *foo@TLSCALL(%rax) -+ movl %fs:(%rax), %eax -+ #else -+ leal ld@TLSDESC(%ebx), %eax -+ call *ld@TLSCALL(%eax) -+ addl %gs:0, %eax -+ #endif -+ ret -+ .size main, .-main -+ .section .note.GNU-stack,"",@progbits -+ ' -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking libc has GLIBC_ABI_GNU2_TLS symbol dep and ld emits it" >&5 -+$as_echo_n "checking libc has GLIBC_ABI_GNU2_TLS symbol dep and ld emits it... " >&6; } -+if ${gcc_cv_libc_x86_tlsdesc_call+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ -+ gcc_cv_libc_x86_tlsdesc_call=no -+ echo "$conftest_S" > conftest.S -+ if $CC $CFLAGS conftest.S -o conftest -shared > /dev/null 2>&1; then -+ if test x$gcc_cv_readelf != x; then -+ if $gcc_cv_readelf --version-info conftest 2>&1 \ -+ | grep "GLIBC_ABI_GNU2_TLS" > /dev/null 2>&1; then -+ gcc_cv_libc_x86_tlsdesc_call=yes -+ else -+ gcc_cv_libc_x86_tlsdesc_call=no -+ fi -+ fi -+ fi -+ rm -f conftest.* -+ -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_libc_x86_tlsdesc_call" >&5 -+$as_echo "$gcc_cv_libc_x86_tlsdesc_call" >&6; } -+ -+ # Set with_tls only if it's not already set via --with-tls=DIALECT -+ case "$gcc_cv_libc_x86_tlsdesc_call" in -+ yes) -+ with_tls=${with_tls:-gnu2} -+ ;; -+ *) -+ with_tls=${with_tls:-gnu} -+ ;; -+ esac -+ ;; -+esac -+ - # -------------------------------------------------------- - # Build, host, and target specific configuration fragments - # -------------------------------------------------------- -@@ -21484,7 +21623,7 @@ else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 21487 "configure" -+#line 21626 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -21590,7 +21729,7 @@ else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF --#line 21593 "configure" -+#line 21732 "configure" - #include "confdefs.h" - - #if HAVE_DLFCN_H -@@ -25419,78 +25558,6 @@ else - $as_echo "$gcc_cv_objdump" >&6; } - fi - --# Figure out what readelf we will be using. --if ${gcc_cv_readelf+:} false; then : -- --else -- --if test -f $gcc_cv_binutils_srcdir/configure.ac \ -- && test -f ../binutils/Makefile \ -- && test x$build = x$host; then -- # Single tree build which includes binutils. -- gcc_cv_readelf=../binutils/readelf$build_exeext --elif test -x readelf$build_exeext; then -- gcc_cv_readelf=./readelf$build_exeext --elif ( set dummy $READELF_FOR_TARGET; test -x $2 ); then -- gcc_cv_readelf="$READELF_FOR_TARGET" --else -- # Extract the first word of "$READELF_FOR_TARGET", so it can be a program name with args. --set dummy $READELF_FOR_TARGET; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 --$as_echo_n "checking for $ac_word... " >&6; } --if ${ac_cv_path_gcc_cv_readelf+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- case $gcc_cv_readelf in -- [\\/]* | ?:[\\/]*) -- ac_cv_path_gcc_cv_readelf="$gcc_cv_readelf" # Let the user override the test with a path. -- ;; -- *) -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_path_gcc_cv_readelf="$as_dir/$ac_word$ac_exec_ext" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done -- done --IFS=$as_save_IFS -- -- ;; --esac --fi --gcc_cv_readelf=$ac_cv_path_gcc_cv_readelf --if test -n "$gcc_cv_readelf"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_readelf" >&5 --$as_echo "$gcc_cv_readelf" >&6; } --else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } --fi -- -- --fi --fi -- --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what readelf to use" >&5 --$as_echo_n "checking what readelf to use... " >&6; } --if test "$gcc_cv_readelf" = ../binutils/readelf$build_exeext; then -- # Single tree build which includes binutils. -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: newly built readelf" >&5 --$as_echo "newly built readelf" >&6; } --elif test x$gcc_cv_readelf = x; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 --$as_echo "not found" >&6; } --else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_readelf" >&5 --$as_echo "$gcc_cv_readelf" >&6; } --fi -- - # Figure out what otool we will be using. - if ${gcc_cv_otool+:} false; then : - -diff --git a/gcc/configure.ac b/gcc/configure.ac -index 4532c5c22fe5..4c268d565d72 100644 ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -1886,6 +1886,93 @@ if test "x$enable_win32_utf8_manifest" != xno; then - host_extra_objs_mingw=utf8-mingw32.o - fi - -+ -+# Figure out what readelf we will be using. -+AS_VAR_SET_IF(gcc_cv_readelf,, [ -+if test -f $gcc_cv_binutils_srcdir/configure.ac \ -+ && test -f ../binutils/Makefile \ -+ && test x$build = x$host; then -+ # Single tree build which includes binutils. -+ gcc_cv_readelf=../binutils/readelf$build_exeext -+elif test -x readelf$build_exeext; then -+ gcc_cv_readelf=./readelf$build_exeext -+elif ( set dummy $READELF_FOR_TARGET; test -x $[2] ); then -+ gcc_cv_readelf="$READELF_FOR_TARGET" -+else -+ AC_PATH_PROG(gcc_cv_readelf, $READELF_FOR_TARGET) -+fi]) -+ -+AC_MSG_CHECKING(what readelf to use) -+if test "$gcc_cv_readelf" = ../binutils/readelf$build_exeext; then -+ # Single tree build which includes binutils. -+ AC_MSG_RESULT(newly built readelf) -+elif test x$gcc_cv_readelf = x; then -+ AC_MSG_RESULT(not found) -+else -+ AC_MSG_RESULT($gcc_cv_readelf) -+fi -+ -+case $target in -+changequote(,)dnl -+ i[34567]86-*-gnu* | x86_64-*-gnu* ) -+changequote([,])dnl -+ # PR target/120933 -+ # For GNU/Linux targets, check if ld emits GLIBC_ABI_GNU2_TLS. For PR ld/33130, -+ # newer ld will add GLIBC_ABI_GNU2_TLS if either unconfigured (auto mode) or if -+ # configured with --enable-gnu2-tls-tag. In auto mode, GLIBC_ABI_GNU2_TLS -+ # is only added if glibc provides it. In explicit mode, the user has asked -+ # for this behavior and binaries will depend on GLIBC_ABI_GNU2_TLS and fixed -+ # glibc. Hence the presence of GLIBC_ABI_GNU2_TLS tells us if we can safely -+ # default to GNU2 TLS descriptors. -+ conftest_S=' -+ .section .text.startup,"ax",@progbits -+ .p2align 4 -+ .globl main -+ .type main, @function -+ main: -+ #ifdef __x86_64__ -+ leaq foo@TLSDESC(%rip), %rax -+ call *foo@TLSCALL(%rax) -+ movl %fs:(%rax), %eax -+ #else -+ leal ld@TLSDESC(%ebx), %eax -+ call *ld@TLSCALL(%eax) -+ addl %gs:0, %eax -+ #endif -+ ret -+ .size main, .-main -+ .section .note.GNU-stack,"",@progbits -+ ' -+ -+ AC_CACHE_CHECK([libc has GLIBC_ABI_GNU2_TLS symbol dep and ld emits it], -+ gcc_cv_libc_x86_tlsdesc_call, [ -+ gcc_cv_libc_x86_tlsdesc_call=no -+ echo "$conftest_S" > conftest.S -+ if $CC $CFLAGS conftest.S -o conftest -shared > /dev/null 2>&1; then -+ if test x$gcc_cv_readelf != x; then -+ if $gcc_cv_readelf --version-info conftest 2>&1 \ -+ | grep "GLIBC_ABI_GNU2_TLS" > /dev/null 2>&1; then -+ gcc_cv_libc_x86_tlsdesc_call=yes -+ else -+ gcc_cv_libc_x86_tlsdesc_call=no -+ fi -+ fi -+ fi -+ rm -f conftest.* -+ ]) -+ -+ # Set with_tls only if it's not already set via --with-tls=DIALECT -+ case "$gcc_cv_libc_x86_tlsdesc_call" in -+ yes) -+ with_tls=${with_tls:-gnu2} -+ ;; -+ *) -+ with_tls=${with_tls:-gnu} -+ ;; -+ esac -+ ;; -+esac -+ - # -------------------------------------------------------- - # Build, host, and target specific configuration fragments - # -------------------------------------------------------- -@@ -2934,31 +3021,6 @@ else - AC_MSG_RESULT($gcc_cv_objdump) - fi - --# Figure out what readelf we will be using. --AS_VAR_SET_IF(gcc_cv_readelf,, [ --if test -f $gcc_cv_binutils_srcdir/configure.ac \ -- && test -f ../binutils/Makefile \ -- && test x$build = x$host; then -- # Single tree build which includes binutils. -- gcc_cv_readelf=../binutils/readelf$build_exeext --elif test -x readelf$build_exeext; then -- gcc_cv_readelf=./readelf$build_exeext --elif ( set dummy $READELF_FOR_TARGET; test -x $[2] ); then -- gcc_cv_readelf="$READELF_FOR_TARGET" --else -- AC_PATH_PROG(gcc_cv_readelf, $READELF_FOR_TARGET) --fi]) -- --AC_MSG_CHECKING(what readelf to use) --if test "$gcc_cv_readelf" = ../binutils/readelf$build_exeext; then -- # Single tree build which includes binutils. -- AC_MSG_RESULT(newly built readelf) --elif test x$gcc_cv_readelf = x; then -- AC_MSG_RESULT(not found) --else -- AC_MSG_RESULT($gcc_cv_readelf) --fi -- - # Figure out what otool we will be using. - AS_VAR_SET_IF(gcc_cv_otool,, [ - if test -x otool$build_exeext; then --- -2.51.0 - diff --git a/16.0.0/gentoo/README.history b/16.0.0/gentoo/README.history index 55a7b59..1c3d576 100644 --- a/16.0.0/gentoo/README.history +++ b/16.0.0/gentoo/README.history @@ -1,5 +1,6 @@ 15 ???? + - 86_all_PR120933-i386-default-to-mtls-dialect-gnu2-if-appropriate.patch + 88_all_sync_toplevel-2.patch + 89_all_PR81358-autolink-libatomic.patch
