From: Nick Clifton Date: Mon, 16 Oct 2023 15:11:49 +0000 (+0100) Subject: Fix: GNU-ld: ARM: Issues when trying to set target output architecture X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fd00374fc73e990b2a1b97a1bab431e0466f5efc;p=binutils-gdb.git Fix: GNU-ld: ARM: Issues when trying to set target output architecture PR 28910 * elf32-arm.c (elf32_arm_merge_private_bfd_data): Do not set output flags if the input flags have not been set. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 2731d85db5c..1b9d13add25 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2023-10-16 Nick Clifton + + PR 28910 + * elf32-arm.c (elf32_arm_merge_private_bfd_data): Do not set + output flags if the input flags have not been set. + 2023-10-09 Nick Clifton PR 30950 diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 18c30dbef86..2e5084978e2 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -20672,16 +20672,17 @@ elf32_arm_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info) if (!elf_flags_init (obfd)) { - /* If the input is the default architecture and had the default - flags then do not bother setting the flags for the output - architecture, instead allow future merges to do this. If no - future merges ever set these flags then they will retain their - uninitialised values, which surprise surprise, correspond - to the default values. */ - if (bfd_get_arch_info (ibfd)->the_default - && elf_elfheader (ibfd)->e_flags == 0) + /* If the input has no flags set, then do not set the output flags. + This will allow future bfds to determine the desired output flags. + If no input bfds have any flags set, then neither will the output bfd. + + Note - we used to restrict this test to when the input architecture + variant was the default variant, but this does not allow for + linker scripts which override the default. See PR 28910 for an + example. */ + if (in_flags == 0) return true; - + elf_flags_init (obfd) = true; elf_elfheader (obfd)->e_flags = in_flags;