From: Jan Beulich Date: Fri, 24 Oct 2025 13:10:09 +0000 (+0200) Subject: bfd: simplify _bfd_merged_section_offset() interface X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2dbe10f66e86324f2b0d379de8a7ecf15da3ac9;p=thirdparty%2Fbinutils-gdb.git 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 --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;