commit:     7b3646267bbca9cf13930a89c16157e1b666782f
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 24 17:24:55 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jul 24 17:24:55 2025 +0000
URL:        
https://gitweb.gentoo.org/proj/toolchain/binutils-patches.git/commit/?id=7b364626

9999: drop patch merged upstream

Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...006-strip-Properly-handle-LLVM-IR-bitcode.patch | 541 ---------------------
 1 file changed, 541 deletions(-)

diff --git a/9999/0006-strip-Properly-handle-LLVM-IR-bitcode.patch 
b/9999/0006-strip-Properly-handle-LLVM-IR-bitcode.patch
deleted file mode 100644
index 1d2ab13..0000000
--- a/9999/0006-strip-Properly-handle-LLVM-IR-bitcode.patch
+++ /dev/null
@@ -1,541 +0,0 @@
-https://inbox.sourceware.org/binutils/[email protected]/
-
-From 080651084a14bee1bcc5f0fcfa7071d1428cd6c6 Mon Sep 17 00:00:00 2001
-Message-ID: 
<080651084a14bee1bcc5f0fcfa7071d1428cd6c6.1753329792.git....@gentoo.org>
-From: "H.J. Lu" <[email protected]>
-Date: Wed, 23 Jul 2025 20:58:40 -0700
-Subject: [PATCH] strip: Properly handle LLVM IR bitcode
-
-commit 717a38e9a02109fcbcb18bb2ec3aa251e2ad0a0d
-Author: H.J. Lu <[email protected]>
-Date:   Sun May 4 05:12:46 2025 +0800
-
-    strip: Add GCC LTO IR support
-
-added "-R .gnu.lto_.*" to strip to remove the GCC LTO sections.  When
-"-R .gnu.lto_.*" is used, the plugin target is ignored so that the LTO
-sections are stripped as the regular sections.  It works for the non-fat
-GCC LTO IR since the GCC LTO IR is stored in the regular sections.  When
-the plugin target is ignored, the GCC LTO IR can be recognized as the
-normal object files.  But it doesn't work for the non-fat LLVM IR which
-is stored in a standalone file.
-
-1. Add bfd_check_format_matches_lto and bfd_check_format_lto to take an
-argument, lto_sections_removed, to indicate if LTO sections should be
-ignored.
-2. Update strip to always enable the plugin target so that the plugin
-target is enabled when checking for bfd_archive.
-3. Update strip to ignore the plugin target for bfd_object when all LTO
-sections should be removed.  If the object is unknown, copy it as an
-unknown file without any messages.
-4. Treat the "-R .llvm.lto" strip option as removing all LTO sections.
-
-bfd/
-
-       PR binutils/33198
-       * format.c (bfd_check_format_lto): New function.
-       (bfd_check_format): Call bfd_check_format_matches_lto.
-       (bfd_check_format_matches): Renamed to ...
-       (bfd_check_format_matches_lto): This.  Add an argument,
-       lto_sections_removed, to indicate if LTO sections should be
-       removed and don't match the plugin target if lto_sections_removed
-       is true.
-       (bfd_check_format_matches): Call bfd_check_format_matches_lto.
-       * bfd-in2.h: Regenerated.
-
-binutils/
-
-       PR binutils/33198
-       * objcopy.c (copy_archive): Call bfd_check_format_lto, instead
-       of bfd_check_format, and pass lto_sections_removed.  Remove the
-       non-fatal message on unknown element since it will be copied as
-       an unknown file.
-       (copy_file): Don't check lto_sections_removed when enabling LTO
-       plugin in strip.
-       (copy_file): Ignore plugin target first if all LTO sections should
-       be removed.  Try with plugin target next if ignoring plugin target
-       fails to match the format.
-       (strip_main): Also set lto_sections_removed for -R .llvm.lto.
-       * testsuite/binutils-all/x86-64/pr33198.c: New file.
-       * testsuite/binutils-all/x86-64/x86-64.exp (run_pr33198_test):
-       New.
-       Run binutils/33198 tests.
-       * testsuite/lib/binutils-common.exp (llvm_plug_opt): New.
-       (CLANG_FOR_TARGET): New.  Set to "clang" for native build if
-       "clang -v" reports "clang version".
-
-Signed-off-by: H.J. Lu <[email protected]>
----
- bfd/bfd-in2.h                                 |   7 +
- bfd/format.c                                  |  84 ++++++++--
- binutils/objcopy.c                            |  40 +++--
- .../testsuite/binutils-all/x86-64/pr33198.c   |   4 +
- .../testsuite/binutils-all/x86-64/x86-64.exp  | 158 ++++++++++++++++++
- binutils/testsuite/lib/binutils-common.exp    |  27 +++
- 6 files changed, 299 insertions(+), 21 deletions(-)
- create mode 100644 binutils/testsuite/binutils-all/x86-64/pr33198.c
-
-diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
-index b013ef954da..2ff3e930bfa 100644
---- a/bfd/bfd-in2.h
-+++ b/bfd/bfd-in2.h
-@@ -2903,8 +2903,15 @@ bool generic_core_file_matches_executable_p
-    (bfd *core_bfd, bfd *exec_bfd);
- 
- /* Extracted from format.c.  */
-+bool bfd_check_format_lto (bfd *abfd, bfd_format format,
-+    bool lto_sections_removed);
-+
- bool bfd_check_format (bfd *abfd, bfd_format format);
- 
-+bool bfd_check_format_matches_lto
-+   (bfd *abfd, bfd_format format, char ***matching,
-+    bool lto_sections_removed);
-+
- bool bfd_check_format_matches
-    (bfd *abfd, bfd_format format, char ***matching);
- 
-diff --git a/bfd/format.c b/bfd/format.c
-index a909b70fe81..f3a0774af08 100644
---- a/bfd/format.c
-+++ b/bfd/format.c
-@@ -56,16 +56,19 @@ extern const size_t _bfd_target_vector_entries;
- 
- /*
- FUNCTION
--      bfd_check_format
-+      bfd_check_format_lto
- 
- SYNOPSIS
--      bool bfd_check_format (bfd *abfd, bfd_format format);
-+      bool bfd_check_format_lto (bfd *abfd, bfd_format format,
-+                                 bool lto_sections_removed);
- 
- DESCRIPTION
-       Verify if the file attached to the BFD @var{abfd} is compatible
-       with the format @var{format} (i.e., one of <<bfd_object>>,
-       <<bfd_archive>> or <<bfd_core>>).
- 
-+      If LTO_SECTION_REMOVED is true, ignore plugin target.
-+
-       If the BFD has been set to a specific target before the
-       call, only the named target and format combination is
-       checked. If the target has not been set, or has been set to
-@@ -99,10 +102,31 @@ DESCRIPTION
-       itself.
- */
- 
-+bool
-+bfd_check_format_lto (bfd *abfd, bfd_format format,
-+                    bool lto_sections_removed)
-+{
-+  return bfd_check_format_matches_lto (abfd, format, NULL,
-+                                     lto_sections_removed);
-+}
-+
-+
-+/*
-+FUNCTION
-+      bfd_check_format
-+
-+SYNOPSIS
-+      bool bfd_check_format (bfd *abfd, bfd_format format);
-+
-+DESCRIPTION
-+      Similar to bfd_check_format_plugin, except plugin target isn't
-+      ignored.
-+*/
-+
- bool
- bfd_check_format (bfd *abfd, bfd_format format)
- {
--  return bfd_check_format_matches (abfd, format, NULL);
-+  return bfd_check_format_matches_lto (abfd, format, NULL, false);
- }
- 
- struct bfd_preserve
-@@ -407,11 +431,12 @@ bfd_set_lto_type (bfd *abfd ATTRIBUTE_UNUSED)
- 
- /*
- FUNCTION
--      bfd_check_format_matches
-+      bfd_check_format_matches_lto
- 
- SYNOPSIS
--      bool bfd_check_format_matches
--        (bfd *abfd, bfd_format format, char ***matching);
-+      bool bfd_check_format_matches_lto
-+        (bfd *abfd, bfd_format format, char ***matching,
-+         bool lto_sections_removed);
- 
- DESCRIPTION
-       Like <<bfd_check_format>>, except when it returns FALSE with
-@@ -423,10 +448,14 @@ DESCRIPTION
- 
-       When done with the list that @var{matching} points to, the caller
-       should free it.
-+
-+      If LTO_SECTION_REMOVED is true, ignore plugin target.
- */
- 
- bool
--bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
-+bfd_check_format_matches_lto (bfd *abfd, bfd_format format,
-+                            char ***matching,
-+                            bool lto_sections_removed ATTRIBUTE_UNUSED)
- {
-   extern const bfd_target binary_vec;
-   const bfd_target * const *target;
-@@ -495,8 +524,13 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, 
char ***matching)
-   if (!bfd_preserve_save (abfd, &preserve, NULL))
-     goto err_ret;
- 
--  /* If the target type was explicitly specified, just check that target.  */
--  if (!abfd->target_defaulted)
-+  /* If the target type was explicitly specified, just check that target.
-+     If LTO_SECTION_REMOVED is true, don't match the plugin target.  */
-+  if (!abfd->target_defaulted
-+#if BFD_SUPPORTS_PLUGINS
-+      && (!lto_sections_removed || !bfd_plugin_target_p (abfd->xvec))
-+#endif
-+     )
-     {
-       if (bfd_seek (abfd, 0, SEEK_SET) != 0)  /* rewind! */
-       goto err_ret;
-@@ -540,10 +574,12 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, 
char ***matching)
-        searching.  Don't match the plugin target if we have another
-        alternative since we want to properly set the input format
-        before allowing a plugin to claim the file.  Also, don't
--       check the default target twice.  */
-+       check the default target twice.   If LTO_SECTION_REMOVED is
-+       true, don't match the plugin target.  */
-       if (*target == &binary_vec
- #if BFD_SUPPORTS_PLUGINS
--        || (match_count != 0 && bfd_plugin_target_p (*target))
-+        || ((lto_sections_removed || match_count != 0)
-+            && bfd_plugin_target_p (*target))
- #endif
-         || (!abfd->target_defaulted && *target == save_targ))
-       continue;
-@@ -795,6 +831,32 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, 
char ***matching)
-   return false;
- }
- 
-+/*
-+FUNCTION
-+      bfd_check_format_matches
-+
-+SYNOPSIS
-+      bool bfd_check_format_matches
-+        (bfd *abfd, bfd_format format, char ***matching);
-+
-+DESCRIPTION
-+      Like <<bfd_check_format>>, except when it returns FALSE with
-+      <<bfd_errno>> set to <<bfd_error_file_ambiguously_recognized>>.  In that
-+      case, if @var{matching} is not NULL, it will be filled in with
-+      a NULL-terminated list of the names of the formats that matched,
-+      allocated with <<malloc>>.
-+      Then the user may choose a format and try again.
-+
-+      When done with the list that @var{matching} points to, the caller
-+      should free it.
-+*/
-+
-+bool
-+bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching)
-+{
-+  return bfd_check_format_matches_lto (abfd, format, matching, false);
-+}
-+
- /*
- FUNCTION
-       bfd_set_format
-diff --git a/binutils/objcopy.c b/binutils/objcopy.c
-index 2ca04e84d47..905ce917708 100644
---- a/binutils/objcopy.c
-+++ b/binutils/objcopy.c
-@@ -3741,10 +3741,13 @@ copy_archive (bfd *ibfd, bfd *obfd, const char 
*output_target,
-       l->obfd = NULL;
-       list = l;
- 
-+#if BFD_SUPPORTS_PLUGINS
-+      /* Ignore plugin target if all LTO sections should be removed.  */
-+      ok_object = bfd_check_format_lto (this_element, bfd_object,
-+                                      lto_sections_removed);
-+#else
-       ok_object = bfd_check_format (this_element, bfd_object);
--      if (!ok_object)
--      bfd_nonfatal_message (NULL, this_element, NULL,
--                            _("Unable to recognise the format of file"));
-+#endif
- 
-       /* PR binutils/3110: Cope with archives
-        containing multiple target types.  */
-@@ -3880,9 +3883,8 @@ copy_file (const char *input_filename, const char 
*output_filename, int ofd,
-     }
- 
- #if BFD_SUPPORTS_PLUGINS
--  /* Enable LTO plugin in strip unless all LTO sections should be
--     removed.  */
--  if (is_strip && !target && !lto_sections_removed)
-+  /* Enable LTO plugin in strip.  */
-+  if (is_strip && !target)
-     target = "plugin";
- #endif
- 
-@@ -3980,7 +3982,21 @@ copy_file (const char *input_filename, const char 
*output_filename, int ofd,
-                        input_arch))
-       status = 1;
-     }
--  else if (bfd_check_format_matches (ibfd, bfd_object, &obj_matching))
-+  else if (
-+#if BFD_SUPPORTS_PLUGINS
-+         /* Ignore plugin target first if all LTO sections should be
-+            removed.  Try with plugin target next if ignoring plugin
-+            target fails to match the format.  */
-+         bfd_check_format_matches_lto (ibfd, bfd_object, &obj_matching,
-+                                       lto_sections_removed)
-+         || (lto_sections_removed
-+             && bfd_check_format_matches_lto (ibfd, bfd_object,
-+                                              &obj_matching, false))
-+#else
-+         bfd_check_format_matches_lto (ibfd, bfd_object, &obj_matching,
-+                                       false)
-+#endif
-+         )
-     {
-       bfd *obfd;
-     do_copy:
-@@ -5036,9 +5052,13 @@ strip_main (int argc, char *argv[])
- #if BFD_SUPPORTS_PLUGINS
-   /* Check if all GCC LTO sections should be removed, assuming all LTO
-      sections will be removed with -R .gnu.lto_.*.  * Remove .gnu.lto_.*
--     sections will also remove .gnu.debuglto_.  sections.  */
--  lto_sections_removed = !!find_section_list (".gnu.lto_.*", false,
--                                            SECTION_CONTEXT_REMOVE);
-+     sections will also remove .gnu.debuglto_.  sections.  LLVM IR
-+     bitcode is stored in .llvm.lto section which will be removed with
-+     -R .llvm.lto.  */
-+  lto_sections_removed = (!!find_section_list (".gnu.lto_.*", false,
-+                                             SECTION_CONTEXT_REMOVE)
-+                        || !!find_section_list (".llvm.lto", false,
-+                                             SECTION_CONTEXT_REMOVE));
- #endif
- 
-   i = optind;
-diff --git a/binutils/testsuite/binutils-all/x86-64/pr33198.c 
b/binutils/testsuite/binutils-all/x86-64/pr33198.c
-new file mode 100644
-index 00000000000..cd0130cacdf
---- /dev/null
-+++ b/binutils/testsuite/binutils-all/x86-64/pr33198.c
-@@ -0,0 +1,4 @@
-+void
-+foo (void)
-+{
-+}
-diff --git a/binutils/testsuite/binutils-all/x86-64/x86-64.exp 
b/binutils/testsuite/binutils-all/x86-64/x86-64.exp
-index 05c73047b60..ab1aa50a9a1 100644
---- a/binutils/testsuite/binutils-all/x86-64/x86-64.exp
-+++ b/binutils/testsuite/binutils-all/x86-64/x86-64.exp
-@@ -96,3 +96,161 @@ if {[catch "system \"bzip2 -dc $t > $tempfile\""] != 0} {
-       }
-     }
- }
-+
-+proc run_pr33198_test { fat strip_flags } {
-+    global srcdir
-+    global subdir
-+    global llvm_plug_opt
-+    global AR
-+    global CLANG_FOR_TARGET
-+    global NM
-+    global READELF
-+    global STRIP
-+
-+    set test pr33198
-+    set testname "${test}${fat} with $strip_flags"
-+
-+    if { [istarget "x86_64-*-linux*-gnux32"] \
-+       || ![info exists CLANG_FOR_TARGET]
-+       || [string match "" $llvm_plug_opt] } then {
-+      untested $testname
-+      return
-+    }
-+
-+    set src $srcdir/$subdir/${test}.c
-+    set obj tmpdir/${test}${fat}.o
-+    set archive tmpdir/${test}${fat}.a
-+    set CLANG_CFLAGS "-c -O2 -flto"
-+    if { "$fat" == "-fat" } {
-+      append CLANG_CFLAGS " -ffat-lto-objects"
-+    }
-+
-+    append strip_flags " --strip-unneeded $llvm_plug_opt"
-+
-+    set cmd "$CLANG_FOR_TARGET $CLANG_CFLAGS -o $obj $src"
-+    send_log "$cmd\n"
-+    verbose "$cmd" 1
-+    catch "exec $cmd" got
-+    if ![string match "" $got] then {
-+      send_log "$got\n"
-+      verbose "$got" 1
-+      fail "$testname ($obj)"
-+      return
-+    }
-+
-+    set cmd "$NM $llvm_plug_opt $obj\n"
-+    send_log "$cmd\n"
-+    verbose "$cmd" 1
-+    catch "exec $cmd" got
-+    if ![regexp "0+ T foo" $got] then {
-+      send_log "$got\n"
-+      verbose "$got" 1
-+      fail "$testname ($obj)"
-+      return
-+    }
-+
-+    pass "$testname ($obj)"
-+
-+    set cmd "$STRIP $strip_flags $obj -o ${obj}.strip"
-+    send_log "$cmd\n"
-+    verbose "$cmd" 1
-+    catch "exec $cmd" got
-+    if ![string match "" $got] then {
-+      send_log "$got\n"
-+      verbose "$got" 1
-+      fail "$testname (strip $obj)"
-+      return
-+    }
-+
-+    set cmd "$NM $llvm_plug_opt ${obj}.strip"
-+    send_log "$cmd\n"
-+    verbose "$cmd" 1
-+    catch "exec $cmd" got
-+    if ![regexp "0+ T foo" $got] then {
-+      send_log "$got\n"
-+      verbose "$got" 1
-+      fail "$testname (strip $obj)"
-+      return
-+    }
-+
-+    if { "$fat" == "-fat" } {
-+      set cmd "$READELF -SW ${obj}.strip"
-+      send_log "$cmd\n"
-+      verbose "$cmd" 1
-+      catch "exec $cmd" got
-+      if [regexp "\.llvm\.lto *LLVM_LTO *" $got] then {
-+          send_log "$got\n"
-+          verbose "$got" 1
-+          fail "$testname (strip $obj)"
-+          return
-+      }
-+    }
-+
-+    pass "$testname (strip $obj)"
-+
-+    set cmd "$AR $llvm_plug_opt -s -r -c $archive $obj"
-+    send_log "$cmd\n"
-+    verbose "$cmd" 1
-+    catch "exec $cmd" got
-+    if ![string match "" $got] then {
-+      send_log "$got\n"
-+      verbose "$got" 1
-+      fail "$testname ($archive)"
-+      return
-+    }
-+
-+    set cmd "$NM $llvm_plug_opt $archive\n"
-+    send_log "$cmd\n"
-+    verbose "$cmd" 1
-+    catch "exec $cmd" got
-+    if ![regexp "0+ T foo" $got] then {
-+      send_log "$got\n"
-+      verbose "$got" 1
-+      fail "$testname ($archive)"
-+      return
-+    }
-+
-+    pass "$testname ($archive)"
-+
-+    set cmd "$STRIP $strip_flags $archive -o ${archive}.strip"
-+    send_log "$cmd\n"
-+    verbose "$cmd" 1
-+    catch "exec $cmd" got
-+    if ![string match "" $got] then {
-+      send_log "$got\n"
-+      verbose "$got" 1
-+      fail "$testname (strip $archive)"
-+      return
-+    }
-+
-+    set cmd "$NM $llvm_plug_opt ${archive}.strip"
-+    send_log "$cmd\n"
-+    verbose "$cmd" 1
-+    catch "exec $cmd" got
-+    if ![regexp "0+ T foo" $got] then {
-+      send_log "$got\n"
-+      verbose "$got" 1
-+      fail "$testname (strip $archive)"
-+      return
-+    }
-+
-+    if { "$fat" == "-fat" } {
-+      set cmd "$READELF -SW ${archive}.strip"
-+      send_log "$cmd\n"
-+      verbose "$cmd" 1
-+      catch "exec $cmd" got
-+      if [regexp "\.llvm\.lto *LLVM_LTO *" $got] then {
-+          send_log "$got\n"
-+          verbose "$got" 1
-+          fail "$testname (strip $archive)"
-+          return
-+      }
-+    }
-+
-+    pass "$testname (strip $archive)"
-+}
-+
-+run_pr33198_test "" "-R .gnu.lto_* -R .gnu.debuglto_* -R .llvm.lto -N 
__gnu_lto_v1"
-+run_pr33198_test "-fat" "-R .gnu.lto_* -R .gnu.debuglto_* -R .llvm.lto -N 
__gnu_lto_v1"
-+run_pr33198_test "" "-R .llvm.lto"
-+run_pr33198_test "-fat" "-R .llvm.lto"
-diff --git a/binutils/testsuite/lib/binutils-common.exp 
b/binutils/testsuite/lib/binutils-common.exp
-index b73b5558c27..7297f6d29d3 100644
---- a/binutils/testsuite/lib/binutils-common.exp
-+++ b/binutils/testsuite/lib/binutils-common.exp
-@@ -1811,3 +1811,30 @@ proc get_standard_section_names {} {
-     }
-     return
- }
-+
-+set llvm_plug_opt ""
-+if { [isnative] } then {
-+    if ![info exists CLANG_FOR_TARGET] then {
-+      catch "exec clang -v" got
-+      if [regexp "clang version" $got] then {
-+          set CLANG_FOR_TARGET clang
-+      }
-+    }
-+    if [info exists CLANG_FOR_TARGET] then {
-+      set llvm_plug_so [string trim [exec $CLANG_FOR_TARGET 
-print-file-name=LLVMgold.so]]
-+      if { $llvm_plug_so ne "LLVMgold.so" } then {
-+          set llvm_plug_opt "--plugin $llvm_plug_so"
-+      }
-+
-+      if { $llvm_plug_opt eq "" } then {
-+          # If it is still blank, try llvm-config --libdir.  Clang
-+          # searches CLANG_INSTALL_LIBDIR_BASENAME which corresponds
-+          # to this.
-+          catch "exec llvm-config --libdir" got
-+          if {[file isdirectory $got] \
-+              && [file isfile $got/LLVMgold.so]} then {
-+              set llvm_plug_opt "--plugin $got/LLVMgold.so"
-+          }
-+      }
-+    }
-+}
-
-base-commit: 673c91580993bc285d75aca2340ae172c7030953
--- 
-2.50.1
-

Reply via email to