[binutils-gdb] aarch64: refactoring _bfd_aarch64_elf_link_setup_gnu_properties (part 4)

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


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

commit d350b1501777553d6742bc5eb2982efc5103b84d
Author: Matthieu Longo <matthieu.longo@arm.com>
Date:   Thu Nov 14 17:08:27 2024 +0000

    aarch64: refactoring _bfd_aarch64_elf_link_setup_gnu_properties (part 4)
    
    Move the code related to the creation of the gnu.note section to a
    separate function: _bfd_aarch64_elf_create_gnu_property_section

Diff:
---
 bfd/elfxx-aarch64.c | 49 +++++++++++++++++++++++++++----------------------
 1 file changed, 27 insertions(+), 22 deletions(-)

diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c
index 6660dfc114d..9a27988b1c4 100644
--- a/bfd/elfxx-aarch64.c
+++ b/bfd/elfxx-aarch64.c
@@ -724,16 +724,40 @@ _bfd_aarch64_elf_find_1st_bfd_input_with_gnu_property (
   return prev;
 }
 
+/* Create a GNU property section for the given bfd input.  */
+static void
+_bfd_aarch64_elf_create_gnu_property_section (struct bfd_link_info *info,
+					      bfd *ebfd)
+{
+  asection *sec;
+  sec = bfd_make_section_with_flags (ebfd,
+				     NOTE_GNU_PROPERTY_SECTION_NAME,
+				     (SEC_ALLOC
+				      | SEC_LOAD
+				      | SEC_IN_MEMORY
+				      | SEC_READONLY
+				      | SEC_HAS_CONTENTS
+				      | SEC_DATA));
+  if (sec == NULL)
+    info->callbacks->einfo (
+      _("%F%P: failed to create GNU property section\n"));
+
+  unsigned align = (bfd_get_mach (ebfd) & bfd_mach_aarch64_ilp32) ? 2 : 3;
+  if (!bfd_set_section_alignment (sec, align))
+    info->callbacks->einfo (_("%F%pA: failed to align section\n"),
+			    sec);
+
+  elf_section_type (sec) = SHT_NOTE;
+}
+
 /* Find the first input bfd with GNU property and merge it with GPROP.  If no
    such input is found, add it to a new section at the last input.  Update
    GPROP accordingly.  */
 bfd *
 _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info)
 {
-  asection *sec;
   bfd *pbfd;
   elf_property *prop;
-  unsigned align;
 
   struct elf_aarch64_obj_tdata *tdata = elf_aarch64_tdata (info->output_bfd);
   uint32_t outprop = tdata->gnu_property_aarch64_feature_1_and;
@@ -762,26 +786,7 @@ _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info)
       /* If no GNU property node was found, create the GNU property note
 	 section.  */
       if (!has_gnu_property)
-	{
-	  sec = bfd_make_section_with_flags (ebfd,
-					     NOTE_GNU_PROPERTY_SECTION_NAME,
-					     (SEC_ALLOC
-					      | SEC_LOAD
-					      | SEC_IN_MEMORY
-					      | SEC_READONLY
-					      | SEC_HAS_CONTENTS
-					      | SEC_DATA));
-	  if (sec == NULL)
-	    info->callbacks->einfo (
-	      _("%F%P: failed to create GNU property section\n"));
-
-          align = (bfd_get_mach (ebfd) & bfd_mach_aarch64_ilp32) ? 2 : 3;
-	  if (!bfd_set_section_alignment (sec, align))
-	    info->callbacks->einfo (_("%F%pA: failed to align section\n"),
-				    sec);
-
-	  elf_section_type (sec) = SHT_NOTE;
-	}
+	_bfd_aarch64_elf_create_gnu_property_section (info, ebfd);
     }
 
   pbfd = _bfd_elf_link_setup_gnu_properties (info);


More information about the Binutils-cvs mailing list