[PATCH] strip: Don't check target_defaulted in input BFD

H.J. Lu hjl.tools@gmail.com
Thu Jul 31 01:49:08 GMT 2025


On Wed, Jul 30, 2025 at 6:27 PM Alan Modra <amodra@gmail.com> wrote:
>
> On Wed, Jul 30, 2025 at 05:44:45PM -0700, H.J. Lu wrote:
> > On Wed, Jul 30, 2025 at 5:16 PM Alan Modra <amodra@gmail.com> wrote:
> > >
> > > On Wed, Jul 30, 2025 at 09:02:51AM -0700, H.J. Lu wrote:
> > > > The target_defaulted field in BFD is set to true if the target isn't
> > > > specified.  After
> > > >
> > > > commit 717a38e9a02109fcbcb18bb2ec3aa251e2ad0a0d
> > > > Author: H.J. Lu <hjl.tools@gmail.com>
> > > > Date:   Sun May 4 05:12:46 2025 +0800
> > > >
> > > >     strip: Add GCC LTO IR support
> > > >
> > > > the target is set to "plugin" if BFD supports plugin when the target
> > > > isn't specified.  Update strip to check the input target, instead of
> > > > the target_defaulted field in input BFD.
> > > >
> > > >       PR binutils/33230
> > > >       * objcopy.c (copy_object): Add a bool argument, target_defaulted,
> > > >       to indicate if the input target isn't specified.  Check it
> > > >       instead of ibfd->target_defaulted.
> > > >       (copy_archive): Add a bool argument, target_defaulted, and pass
> > > >       it to copy_object.
> > > >       (copy_file): Set target_defaulted to true if the input target
> > > >       isn't specified and pass it to copy_archive and copy_object.
> > > >       * testsuite/binutils-all/x86-64/pr33230.obj.bz2: New file.
> > > >       * testsuite/binutils-all/x86-64/x86-64.exp: Run PR binutils/33230
> > > >       test.
> > > >
> > > > Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> > > > ---
> > > >  binutils/objcopy.c                            |  16 ++++++++-----
> > > >  .../binutils-all/x86-64/pr33230.obj.bz2       | Bin 0 -> 411 bytes
> > > >  .../testsuite/binutils-all/x86-64/x86-64.exp  |  22 ++++++++++++++++++
> > > >  3 files changed, 32 insertions(+), 6 deletions(-)
> > > >  create mode 100644 binutils/testsuite/binutils-all/x86-64/pr33230.obj.bz2
> > > >
> > > > diff --git a/binutils/objcopy.c b/binutils/objcopy.c
> > > > index 905ce917708..eccb110f3a6 100644
> > > > --- a/binutils/objcopy.c
> > > > +++ b/binutils/objcopy.c
> > > > @@ -2661,7 +2661,8 @@ set_long_section_mode (bfd *output_bfd, bfd *input_bfd, enum long_section_name_h
> > > >     Returns TRUE upon success, FALSE otherwise.  */
> > > >
> > > >  static bool
> > > > -copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
> > > > +copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch,
> > > > +          bool target_defaulted)
> > > >  {
> > > >    bfd_vma start;
> > > >    long symcount;
> > > > @@ -2812,7 +2813,7 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
> > > >        imach = 0;
> > > >      }
> > > >    if (!bfd_set_arch_mach (obfd, iarch, imach)
> > > > -      && (ibfd->target_defaulted
> > > > +      && (target_defaulted
> > > >         || bfd_get_arch (ibfd) != bfd_get_arch (obfd)))
> > > >      {
> > > >        if (bfd_get_arch (ibfd) == bfd_arch_unknown)
> > > > @@ -3615,7 +3616,8 @@ fail:
> > > >  static bool
> > > >  copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
> > > >             bool force_output_target,
> > > > -           const bfd_arch_info_type *input_arch)
> > > > +           const bfd_arch_info_type *input_arch,
> > > > +           bool target_defaulted)
> > > >  {
> > > >    struct name_list
> > > >      {
> > > > @@ -3772,7 +3774,8 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
> > > >  #endif
> > > >        if (ok_object)
> > > >       {
> > > > -       ok = copy_object (this_element, output_element, input_arch);
> > > > +       ok = copy_object (this_element, output_element, input_arch,
> > > > +                         target_defaulted);
> > > >
> > > >         if (!ok && bfd_get_arch (this_element) == bfd_arch_unknown)
> > > >           /* Try again as an unknown object file.  */
> > > > @@ -3872,6 +3875,7 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
> > > >    char **core_matching;
> > > >    off_t size = get_file_size (input_filename);
> > > >    const char *target = input_target;
> > > > +  bool target_defaulted = !input_target;
> > >
> > > This ought to be !input_target || strcmp (input_target, "default").
> >
> > It should be "!input_target || strcmp (input_target, "default") == 0".
>
> Yes, I typoed that.  The tests need some tweaking as they both fail
> with --enable-targets=all.
>

Like this?

diff --git a/binutils/testsuite/binutils-all/x86-64/x86-64.exp
b/binutils/testsuite/binutils-all/x86-64/x86-64.exp
index a3fe6b13a7c..89f12fe15a6 100644
--- a/binutils/testsuite/binutils-all/x86-64/x86-64.exp
+++ b/binutils/testsuite/binutils-all/x86-64/x86-64.exp
@@ -261,7 +261,10 @@ set test $subdir/[file tail $t]
 set testname [file rootname $test]
 verbose $testname
 set obj tmpdir/pr33230.o
-if {[catch "system \"bzip2 -dc $t > $obj\""] != 0} {
+catch "exec $STRIP --help" got
+if { [regexp "elf64-littleaarch64" $got] } {
+  untested "$testname"
+} elseif { [catch "system \"bzip2 -dc $t > $obj\""] != 0 } {
   untested "bzip2 -dc ($testname)"
 } else {
     set cmd "$STRIP $obj -o ${obj}.strip"

-- 
H.J.


More information about the Binutils mailing list