[binutils-gdb] ld: Cleanup sframe_decoder_init_func_bfdinfo use of reloc cookie

Jens Remus jremus@sourceware.org
Mon Mar 10 12:18:43 GMT 2025


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

commit 28704396ababc06741fbe97b36e6d6e736553849
Author: Jens Remus <jremus@linux.ibm.com>
Date:   Mon Mar 10 13:14:08 2025 +0100

    ld: Cleanup sframe_decoder_init_func_bfdinfo use of reloc cookie
    
    The loop did set cookie->rel to the i-th relocation twice.  At the
    beginning using the loop counter.  At the end by incrementing.  One
    approach is sufficient.
    
    Change cookie to pointer-to-const, replace cookie->rel by rel,
    initialize before the loop and increment at the end, and merge the
    two assertions (for cookie->rel) into one.
    
    While at it change sec to pointer-to-const.
    
    bfd/
            * elf-sframe.c (sframe_decoder_init_func_bfdinfo): Cleanup use
            of relocation cookie.
    
    Signed-off-by: Jens Remus <jremus@linux.ibm.com>

Diff:
---
 bfd/elf-sframe.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/bfd/elf-sframe.c b/bfd/elf-sframe.c
index 67ed874e025..97e00734515 100644
--- a/bfd/elf-sframe.c
+++ b/bfd/elf-sframe.c
@@ -98,12 +98,13 @@ sframe_decoder_set_func_reloc_index (struct sframe_dec_info *sfd_info,
 
 static bool
 sframe_decoder_init_func_bfdinfo (bfd *abfd,
-				  asection *sec,
+				  const asection *sec,
 				  struct sframe_dec_info *sfd_info,
-				  struct elf_reloc_cookie *cookie)
+				  const struct elf_reloc_cookie *cookie)
 {
   unsigned int fde_count;
   unsigned int func_bfdinfo_size, i;
+  const Elf_Internal_Rela *rel;
 
   fde_count = sframe_decoder_get_num_fidx (sfd_info->sfd_ctx);
   sfd_info->sfd_fde_count = fde_count;
@@ -118,19 +119,17 @@ sframe_decoder_init_func_bfdinfo (bfd *abfd,
   if ((sec->flags & SEC_LINKER_CREATED) && cookie->rels == NULL)
     return true;
 
+  BFD_ASSERT (cookie->rels + fde_count == cookie->relend);
+  rel = cookie->rels;
   for (i = 0; i < fde_count; i++)
     {
-      cookie->rel = cookie->rels + i;
-      BFD_ASSERT (cookie->rel < cookie->relend);
       /* Bookkeep the relocation offset and relocation index of each function
 	 for later use.  */
-      sframe_decoder_set_func_r_offset (sfd_info, i, cookie->rel->r_offset);
-      sframe_decoder_set_func_reloc_index (sfd_info, i,
-					   (cookie->rel - cookie->rels));
+      sframe_decoder_set_func_r_offset (sfd_info, i, rel->r_offset);
+      sframe_decoder_set_func_reloc_index (sfd_info, i, i);
 
-      cookie->rel++;
+      rel++;
     }
-  BFD_ASSERT (cookie->rel == cookie->relend);
 
   return true;
 }


More information about the Binutils-cvs mailing list