[binutils-gdb] bfd: simplify _bfd_merged_section_offset() interface

Jan Beulich jbeulich@sourceware.org
Fri Oct 24 13:14:42 GMT 2025


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

commit f2dbe10f66e86324f2b0d379de8a7ecf15da3ac9
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Oct 24 15:10:09 2025 +0200

    bfd: simplify _bfd_merged_section_offset() interface
    
    As sec_info is now hanging off of sec, there's no need for the extra 3rd
    parameter anymore; all callers pass as 2nd argument the address of a
    section pointer that sec_info can be fetched from.

Diff:
---
 bfd/elf-m10300.c      | 1 -
 bfd/elf.c             | 4 ++--
 bfd/elf32-nds32.c     | 6 ++----
 bfd/elf32-ppc.c       | 3 +--
 bfd/elf32-rl78.c      | 3 +--
 bfd/elf32-rx.c        | 4 +---
 bfd/elf64-alpha.c     | 1 -
 bfd/elf64-ia64-vms.c  | 1 -
 bfd/elflink.c         | 5 +----
 bfd/elfnn-ia64.c      | 4 +---
 bfd/elfnn-loongarch.c | 4 +---
 bfd/elfnn-riscv.c     | 3 +--
 bfd/elfxx-mips.c      | 4 ++--
 bfd/libbfd-in.h       | 2 +-
 bfd/libbfd.h          | 2 +-
 bfd/merge.c           | 6 ++----
 16 files changed, 17 insertions(+), 36 deletions(-)

diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c
index 86b91822a32..9a6870877f1 100644
--- a/bfd/elf-m10300.c
+++ b/bfd/elf-m10300.c
@@ -3393,7 +3393,6 @@ mn10300_elf_relax_section (bfd *abfd,
 		symval += irel->r_addend;
 
 	      symval = _bfd_merged_section_offset (abfd, & sym_sec,
-						   sym_sec->sec_info,
 						   symval);
 
 	      if (ELF_ST_TYPE (isym->st_info) != STT_SECTION)
diff --git a/bfd/elf.c b/bfd/elf.c
index 9ad2cf8e216..9999b09a9eb 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -13259,7 +13259,7 @@ _bfd_elf_rela_local_sym (bfd *abfd,
       && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
     {
       rel->r_addend =
-	_bfd_merged_section_offset (abfd, psec, sec->sec_info,
+	_bfd_merged_section_offset (abfd, psec,
 				    sym->st_value + rel->r_addend);
       if (sec != *psec)
 	{
@@ -13289,7 +13289,7 @@ _bfd_elf_rel_local_sym (bfd *abfd,
   if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
     return sym->st_value + addend;
 
-  return _bfd_merged_section_offset (abfd, psec, sec->sec_info,
+  return _bfd_merged_section_offset (abfd, psec,
 				     sym->st_value + addend);
 }
 
diff --git a/bfd/elf32-nds32.c b/bfd/elf32-nds32.c
index 29e4fbc8dce..5ca99ee9e62 100644
--- a/bfd/elf32-nds32.c
+++ b/bfd/elf32-nds32.c
@@ -7489,7 +7489,6 @@ calculate_offset (bfd *abfd, asection *sec, Elf_Internal_Rela *irel,
 	{
 	  sym_sec = h->root.u.def.section;
 	  symval = _bfd_merged_section_offset (abfd, &sym_sec,
-					       sym_sec->sec_info,
 					       h->root.u.def.value);
 	  symval = symval + sym_sec->output_section->vma
 		   + sym_sec->output_offset;
@@ -8629,11 +8628,11 @@ nds32_elf_rela_local_sym (bfd *abfd, Elf_Internal_Sym *sym,
     {
       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
 	rel->r_addend =
-	  _bfd_merged_section_offset (abfd, psec, sec->sec_info,
+	  _bfd_merged_section_offset (abfd, psec,
 				      sym->st_value + rel->r_addend);
       else
 	rel->r_addend =
-	  _bfd_merged_section_offset (abfd, psec, sec->sec_info,
+	  _bfd_merged_section_offset (abfd, psec,
 				      sym->st_value) + rel->r_addend;
 
       if (sec != *psec)
@@ -8707,7 +8706,6 @@ calculate_memory_address (bfd *abfd, Elf_Internal_Rela *irel,
 	{
 	  sym_sec = h->root.u.def.section;
 	  symval = _bfd_merged_section_offset (abfd, &sym_sec,
-					       sym_sec->sec_info,
 					       h->root.u.def.value);
 	  symval = symval + sym_sec->output_section->vma
 		   + sym_sec->output_offset;
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index ef38202ca76..900b5a76880 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -6382,8 +6382,7 @@ ppc_elf_relax_section (bfd *abfd,
 		toff += irel->r_addend;
 
 	      toff
-		= _bfd_merged_section_offset (abfd, &tsec, tsec->sec_info,
-					      toff);
+		= _bfd_merged_section_offset (abfd, &tsec, toff);
 
 	      if (sym_type != STT_SECTION
 		  && r_type != R_PPC_PLTREL24)
diff --git a/bfd/elf32-rl78.c b/bfd/elf32-rl78.c
index b32cbd39f76..98131e0cd84 100644
--- a/bfd/elf32-rl78.c
+++ b/bfd/elf32-rl78.c
@@ -1890,8 +1890,7 @@ rl78_offset_for_reloc (bfd *			abfd,
 	    {
 	      if ((ssec->flags & SEC_MERGE)
 		  && ssec->sec_info_type == SEC_INFO_TYPE_MERGE)
-		symval = _bfd_merged_section_offset (abfd, & ssec,
-						     ssec->sec_info, symval);
+		symval = _bfd_merged_section_offset (abfd, & ssec, symval);
 	    }
 
 	  /* Now make the offset relative to where the linker is putting it.  */
diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c
index 83f6984e3e2..3aeb80bf1fb 100644
--- a/bfd/elf32-rx.c
+++ b/bfd/elf32-rx.c
@@ -1807,9 +1807,7 @@ rx_offset_for_reloc (bfd *		      abfd,
 	    {
 	      if ((ssec->flags & SEC_MERGE)
 		  && ssec->sec_info_type == SEC_INFO_TYPE_MERGE)
-		symval = _bfd_merged_section_offset (abfd, & ssec,
-						     ssec->sec_info,
-						     symval);
+		symval = _bfd_merged_section_offset (abfd, & ssec, symval);
 	    }
 
 	  /* Now make the offset relative to where the linker is putting it.  */
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index fc8c18dfe8c..b193f9166ee 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -4261,7 +4261,6 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 		  msec = sec;
 		  ent->addend =
 		    _bfd_merged_section_offset (output_bfd, &msec,
-						sec->sec_info,
 						sym->st_value + ent->addend);
 		  ent->addend -= sym->st_value;
 		  ent->addend += msec->output_section->vma
diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c
index 79bf2ee60a3..65498ee4fb9 100644
--- a/bfd/elf64-ia64-vms.c
+++ b/bfd/elf64-ia64-vms.c
@@ -3472,7 +3472,6 @@ elf64_ia64_relocate_section (bfd *output_bfd,
 		      msec = sym_sec;
 		      dynent->addend =
 			_bfd_merged_section_offset (output_bfd, &msec,
-						    msec->sec_info,
 						    sym->st_value
 						    + dynent->addend);
 		      dynent->addend -= sym->st_value;
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 28027339ccf..b7380ef34e3 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -3438,7 +3438,6 @@ _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
       h->root.u.def.value =
 	_bfd_merged_section_offset (output_bfd,
 				    &h->root.u.def.section,
-				    sec->sec_info,
 				    h->root.u.def.value);
     }
 
@@ -11485,9 +11484,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd)
 	  else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
 		   && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
 	    isym->st_value =
-	      _bfd_merged_section_offset (output_bfd, &isec,
-					  isec->sec_info,
-					  isym->st_value);
+	      _bfd_merged_section_offset (output_bfd, &isec, isym->st_value);
 	}
 
       *ppsection = isec;
diff --git a/bfd/elfnn-ia64.c b/bfd/elfnn-ia64.c
index 849946d65f9..2ff82919350 100644
--- a/bfd/elfnn-ia64.c
+++ b/bfd/elfnn-ia64.c
@@ -557,8 +557,7 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec,
 	   if (symtype == STT_SECTION)
 	     toff += irel->r_addend;
 
-	   toff = _bfd_merged_section_offset (abfd, &tsec, tsec->sec_info,
-					      toff);
+	   toff = _bfd_merged_section_offset (abfd, &tsec, toff);
 
 	   if (symtype != STT_SECTION)
 	     toff += irel->r_addend;
@@ -3867,7 +3866,6 @@ elfNN_ia64_relocate_section (bfd *output_bfd,
 		      msec = sym_sec;
 		      dynent->addend =
 			_bfd_merged_section_offset (output_bfd, &msec,
-						    msec->sec_info,
 						    sym->st_value
 						    + dynent->addend);
 		      dynent->addend -= sym->st_value;
diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index 7cdf006e2aa..e579babc7ec 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -6016,9 +6016,7 @@ loongarch_elf_relax_section (bfd *abfd, asection *sec,
 	   if (symtype == STT_SECTION)
 	     symval += rel->r_addend;
 
-	   symval = _bfd_merged_section_offset (abfd, &sym_sec,
-						sym_sec->sec_info,
-						symval);
+	   symval = _bfd_merged_section_offset (abfd, &sym_sec, symval);
 
 	   if (symtype != STT_SECTION)
 	     symval += rel->r_addend;
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
index 76618942103..dd5268b7d16 100644
--- a/bfd/elfnn-riscv.c
+++ b/bfd/elfnn-riscv.c
@@ -5621,8 +5621,7 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,
 	   if (symtype == STT_SECTION)
 	     symval += rel->r_addend;
 
-	   symval = _bfd_merged_section_offset (abfd, &sym_sec,
-						sym_sec->sec_info, symval);
+	   symval = _bfd_merged_section_offset (abfd, &sym_sec, symval);
 
 	   if (symtype != STT_SECTION)
 	     symval += rel->r_addend;
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index d8a66db769d..12b66b0bdb1 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -4546,10 +4546,10 @@ mips_elf_resolve_got_page_ref (void **refp, void *data)
       if (sec->flags & SEC_MERGE)
 	{
 	  if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
-	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, sec->sec_info,
+	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec,
 						 isym->st_value + ref->addend);
 	  else
-	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, sec->sec_info,
+	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec,
 						 isym->st_value) + ref->addend;
 	}
       else
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index f2c243f1d40..5a0a6696b51 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -707,7 +707,7 @@ extern bool _bfd_write_merged_section
 /* Find an offset within a modified SEC_MERGE section.  */
 
 extern bfd_vma _bfd_merged_section_offset
-  (bfd *, asection **, void *, bfd_vma) ATTRIBUTE_HIDDEN;
+  (bfd *, asection **, bfd_vma) ATTRIBUTE_HIDDEN;
 
 /* Tidy up when done.  */
 
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 106bd344669..3e1f1ec0fea 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -713,7 +713,7 @@ extern bool _bfd_write_merged_section
 /* Find an offset within a modified SEC_MERGE section.  */
 
 extern bfd_vma _bfd_merged_section_offset
-  (bfd *, asection **, void *, bfd_vma) ATTRIBUTE_HIDDEN;
+  (bfd *, asection **, bfd_vma) ATTRIBUTE_HIDDEN;
 
 /* Tidy up when done.  */
 
diff --git a/bfd/merge.c b/bfd/merge.c
index 83e5d895626..6f068b6117b 100644
--- a/bfd/merge.c
+++ b/bfd/merge.c
@@ -1104,12 +1104,10 @@ _bfd_write_merged_section (bfd *output_bfd, asection *sec)
 
 bfd_vma
 _bfd_merged_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED, asection **psec,
-			    void *psecinfo, bfd_vma offset)
+			    bfd_vma offset)
 {
-  struct sec_merge_sec_info *secinfo;
   asection *sec = *psec;
-
-  secinfo = (struct sec_merge_sec_info *) psecinfo;
+  struct sec_merge_sec_info *secinfo = sec->sec_info;
 
   if (!secinfo)
     return offset;


More information about the Binutils-cvs mailing list