Correct _bfd_elf_section_for_symbol
Alan Modra
amodra@gmail.com
Tue Oct 21 11:32:35 GMT 2025
This function was added in commit 2f0c68f23bb3 as part of the compact
EH support. By the comments it looks like the code was copied from
bfd_elf_reloc_symbol_deleted_p without sufficient editing, and would
only work for local syms due to the discarded_section test left in
place for global syms. Fix that, and remove the discard param.
* elf-bfd.h (_bfd_elf_section_for_symbol): Update prototype.
* elf-eh-frame.c (_bfd_elf_parse_eh_frame_entry): Adjust.
* elflink.c (_bfd_elf_section_for_symbol): Remove "discard".
Don't test for discarded_section.
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 5d19529d972..a2b3eb0fa9f 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -2612,7 +2612,7 @@ extern bool _bfd_elf_create_dynamic_sections
extern bool _bfd_elf_create_got_section
(bfd *, struct bfd_link_info *);
extern asection *_bfd_elf_section_for_symbol
- (struct elf_reloc_cookie *, unsigned long, bool);
+ (struct elf_reloc_cookie *, unsigned long);
extern struct elf_link_hash_entry *_bfd_elf_define_linkage_sym
(bfd *, struct bfd_link_info *, asection *, const char *);
extern void _bfd_elf_init_1_index_section
diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
index 4eda3c991bb..62cba84f458 100644
--- a/bfd/elf-eh-frame.c
+++ b/bfd/elf-eh-frame.c
@@ -555,7 +555,7 @@ _bfd_elf_parse_eh_frame_entry (struct bfd_link_info *info,
if (r_symndx == STN_UNDEF)
return false;
- text_sec = _bfd_elf_section_for_symbol (cookie, r_symndx, false);
+ text_sec = _bfd_elf_section_for_symbol (cookie, r_symndx);
if (text_sec == NULL)
return false;
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 3f3ea2cce51..c7a5a52f1dd 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -142,8 +142,7 @@ get_ext_sym_hash_from_cookie (struct elf_reloc_cookie *cookie, unsigned long r_s
asection *
_bfd_elf_section_for_symbol (struct elf_reloc_cookie *cookie,
- unsigned long r_symndx,
- bool discard)
+ unsigned long r_symndx)
{
struct elf_link_hash_entry *h;
@@ -151,28 +150,15 @@ _bfd_elf_section_for_symbol (struct elf_reloc_cookie *cookie,
if (h != NULL)
{
- if ((h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- && discarded_section (h->root.u.def.section))
+ if (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
return h->root.u.def.section;
else
return NULL;
}
- /* It's not a relocation against a global symbol,
- but it could be a relocation against a local
- symbol for a discarded section. */
- asection *isec;
- Elf_Internal_Sym *isym;
-
- /* Need to: get the symbol; get the section. */
- isym = &cookie->locsyms[r_symndx];
- isec = bfd_section_from_elf_index (cookie->abfd, isym->st_shndx);
- if (isec != NULL
- && discard ? discarded_section (isec) : 1)
- return isec;
-
- return NULL;
+ Elf_Internal_Sym *isym = &cookie->locsyms[r_symndx];
+ return bfd_section_from_elf_index (cookie->abfd, isym->st_shndx);
}
/* Define a symbol in a dynamic linkage section. */
--
Alan Modra
More information about the Binutils
mailing list