From: Matthieu Longo Date: Fri, 14 Nov 2025 18:44:46 +0000 (+0000) Subject: OAv2 merge: create a section for object attributes X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ea2dc5006a8d57065f04fe63350cb0db8aa769e;p=thirdparty%2Fbinutils-gdb.git OAv2 merge: create a section for object attributes bfd copies object attributes to the output BFD only if the input BFD — used to store the merge result— contains an object attribute section. bfd_linear_find_first_with_obj_attrs() returns an input BFD that may or may not already include such a section. If no object attributes section is found, the merge process must create one. This patch implements create_object_attributes_section(), which constructs the missing section with the appropriate flags, type, and alignment. The implementation is adapted from _bfd_elf_link_create_gnu_property_sec() in bfd/elf-properties.c. The code preserves the different alignment requirements for 32-bit and 64-bit ELF formats, although the rationale for this distinction remains unclear in the original source and patch history. --- diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c index b9b8abd5017..4b943376016 100644 --- a/bfd/elf-attrs.c +++ b/bfd/elf-attrs.c @@ -796,10 +796,24 @@ static asection * create_object_attributes_section (struct bfd_link_info *info, bfd *abfd) { - (void) info; - (void) abfd; - /* TO IMPLEMENT */ - return NULL; + asection *sec; + const char *sec_name = get_elf_backend_data (abfd)->obj_attrs_section; + sec = bfd_make_section_with_flags (abfd, + sec_name, + (SEC_READONLY + | SEC_HAS_CONTENTS + | SEC_DATA)); + if (sec == NULL) + info->callbacks->fatal (_("%P: failed to create %s section\n"), sec_name); + + if (!bfd_set_section_alignment (sec, 2)) + info->callbacks->fatal (_("%pA: failed to align section\n"), sec); + + elf_section_type (sec) = get_elf_backend_data (abfd)->obj_attrs_section_type; + + bfd_set_section_size (sec, bfd_elf_obj_attr_size (abfd)); + + return sec; } /* Translate GNU properties that have object attributes v2 equivalents. */