[2.45 PATCH 1/3] strip: Don't check target_defaulted in input BFD

H.J. Lu hjl.tools@gmail.com
Sat Aug 30 22:35:32 GMT 2025


On Sat, Aug 30, 2025 at 3:16 PM Sam James <sam@gentoo.org> wrote:
>
> From: "H.J. Lu" <hjl.tools@gmail.com>
>
> 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 nor default.  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 nor default.
>         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
>         tests.
>
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> (cherry picked from commit 8e885fece150ee97e5b0e78363e7fe9888ae9c29)

Should we backport Alan's cleanup patches?

> ---
>  binutils/objcopy.c                            |  17 +++++----
>  .../binutils-all/x86-64/pr33230.obj.bz2       | Bin 0 -> 411 bytes
>  .../testsuite/binutils-all/x86-64/x86-64.exp  |  33 ++++++++++++++++++
>  3 files changed, 44 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..e90117af90b 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,8 @@ 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
> +                          || strcmp (input_target, "default") == 0);
>
>    if (size < 1)
>      {
> @@ -3979,7 +3984,7 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
>         }
>
>        if (!copy_archive (ibfd, obfd, output_target, force_output_target,
> -                        input_arch))
> +                        input_arch, target_defaulted))
>         status = 1;
>      }
>    else if (
> @@ -4034,7 +4039,7 @@ copy_file (const char *input_filename, const char *output_filename, int ofd,
>        else
>  #endif
>         {
> -         if (! copy_object (ibfd, obfd, input_arch))
> +         if (! copy_object (ibfd, obfd, input_arch, target_defaulted))
>             status = 1;
>
>           /* PR 17512: file: 0f15796a.
> diff --git a/binutils/testsuite/binutils-all/x86-64/pr33230.obj.bz2 b/binutils/testsuite/binutils-all/x86-64/pr33230.obj.bz2
> new file mode 100644
> index 0000000000000000000000000000000000000000..6309a2ad810bce05aea0ef594832ee2b974c87c2
> GIT binary patch
> literal 411
> zcmV;M0c8F{T4*^jL0KkKS!8+Sk^li+|L*_({7vNNd=N{;8bH5q-f+MGKmb61KmY+i
> zAONrdRtq92i5^oYsiuaS0000027uE*Xw5+s^%)u`sir}ufEqLa02%?H002m$Ca0)9
> zAk#shXwyNU0NR0|27qW3&Q&S^)HcYH35Blu3_)HA)`6CZi~vSKkYJ@)SUQK6P)>9D
> zF^y~~*G?x_1vd8WaOee5gP%uQK`XMsG0Bf+<eIG@BErL(v?ORj7J)CfU8FVxVp|Y_
> zOCZ6v#chH!nhT90hIo5kz2|)K+E?dTEkd<^U(6r5`IAGO9N{Ch*6DHz>z2e9dqHN}
> zDTtL;P{Ni@z>HvG$wP?DXiCJ28VRJS5wwbp$9gh}Cb*4^`j$`xt?@{9ZNj0%9TX`I
> z;RB26zDJixQAmr$c@;#H6Jw_Zx7<&9$~aJc3HSjvc3lt$$A^xz^p*h$k3%s=Vh|lY
> zJnCyBBs0i-<ugb`1%XqMqzomB>VhnV#RwND3<#?Y10YvgX|NP`NFhIe7ji{7P>^JK
> F<dVJ@tX2R3
>
> literal 0
> HcmV?d00001
>
> diff --git a/binutils/testsuite/binutils-all/x86-64/x86-64.exp b/binutils/testsuite/binutils-all/x86-64/x86-64.exp
> index ab1aa50a9a1..a3fe6b13a7c 100644
> --- a/binutils/testsuite/binutils-all/x86-64/x86-64.exp
> +++ b/binutils/testsuite/binutils-all/x86-64/x86-64.exp
> @@ -254,3 +254,36 @@ run_pr33198_test "" "-R .gnu.lto_* -R .gnu.debuglto_* -R .llvm.lto -N __gnu_lto_
>  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"
> +
> +set t $srcdir/$subdir/pr33230.obj.bz2
> +# We need to strip the ".bz2", but can leave the dirname.
> +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} {
> +  untested "bzip2 -dc ($testname)"
> +} else {
> +    set cmd "$STRIP $obj -o ${obj}.strip"
> +    send_log "$cmd\n"
> +    verbose "$cmd" 1
> +    catch "exec $cmd" got
> +    if [regexp "Unable to recognise the format" $got] then {
> +       pass "$testname"
> +    } else {
> +       send_log "$got\n"
> +       verbose "$got" 1
> +       fail "$testname"
> +    }
> +    set cmd "$STRIP --input-target=default $obj -o ${obj}.strip"
> +    send_log "$cmd\n"
> +    verbose "$cmd" 1
> +    catch "exec $cmd" got
> +    if [regexp "Unable to recognise the format" $got] then {
> +       pass "$testname"
> +    } else {
> +       send_log "$got\n"
> +       verbose "$got" 1
> +       fail "$testname (--input-target=default)"
> +    }
> +}
> --
> 2.51.0
>


-- 
H.J.


More information about the Binutils mailing list