[binutils-gdb] aarch64: bugfix when finding 1st bfd input with GNU property

Matthieu Longo mlongo@sourceware.org
Mon Dec 2 15:22:28 GMT 2024


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ddbd1a4c98794de8a66d86dcfd8139e7a25088d2

commit ddbd1a4c98794de8a66d86dcfd8139e7a25088d2
Author: Matthieu Longo <matthieu.longo@arm.com>
Date:   Wed Nov 6 17:59:46 2024 +0000

    aarch64: bugfix when finding 1st bfd input with GNU property
    
    The current implementation of searching the first input BFD with GNU
    properties has a bug. The search was not filtering on object inputs
    belonging to the output link unit only, but was also including dynamic
    objects, BFD plugins, and linker-created files.
    This means that the initial initialization of the output properties
    were skewed, and warnings on input files that should have been emitted
    were not.
    
    This patch fixes the filtering to exclude the object input files not
    belonging to the output link unit, not having the same ELF class, and
    not the same target architecture.

Diff:
---
 bfd/elfxx-aarch64.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c
index 896497a7812..c01e0ab6599 100644
--- a/bfd/elfxx-aarch64.c
+++ b/bfd/elfxx-aarch64.c
@@ -707,11 +707,16 @@ _bfd_aarch64_elf_find_1st_bfd_input_with_gnu_property (
   bool *has_gnu_property)
 {
   BFD_ASSERT (has_gnu_property);
+  const struct elf_backend_data *obfd = get_elf_backend_data (info->output_bfd);
   bfd *pbfd = info->input_bfds;
   bfd *prev = NULL;
   for (; pbfd != NULL; pbfd = pbfd->link.next)
     if (bfd_get_flavour (pbfd) == bfd_target_elf_flavour
-	&& bfd_count_sections (pbfd) != 0)
+	&& bfd_count_sections (pbfd) != 0
+	&& (pbfd->flags & (DYNAMIC | BFD_PLUGIN | BFD_LINKER_CREATED)) == 0
+	&& (obfd->elf_machine_code
+	    == get_elf_backend_data (pbfd)->elf_machine_code)
+	&& (obfd->s->elfclass == get_elf_backend_data (pbfd)->s->elfclass))
       {
 	/* Does the input have a list of GNU properties ? */
 	if (elf_properties (pbfd) != NULL)


More information about the Binutils-cvs mailing list