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.
This commit is contained in:
Nick Clifton
2023-10-16 16:11:49 +01:00
parent a79e9a07a0
commit fd00374fc7
2 changed files with 16 additions and 9 deletions

View File

@@ -1,3 +1,9 @@
2023-10-16 Nick Clifton <nickc@redhat.com>
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 <nickc@redhat.com>
PR 30950

View File

@@ -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)
return true;
/* 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;