mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
ELF: Properly handle section symbols
When defining the section symbol, __start_FOO, for the section FOO: 1. Treat the common symbol, __start_FOO, in input object file as definition. 2. Clear verinfo.verdef. bfd/ PR ld/26094 * elflink.c (bfd_elf_define_start_stop): Handle common symbols. Clear verinfo.verdef. ld/ PR ld/26094 * testsuite/ld-elf/pr26094-1.ver: New fike. * testsuite/ld-elf/pr26094-1a.c: Likewise. * testsuite/ld-elf/pr26094-1a.rd: Likewise. * testsuite/ld-elf/pr26094-1b.c: Likewise. * testsuite/ld-elf/pr26094-1b.rd: Likewise. * testsuite/ld-elf/pr26094-1c.c: Likewise. * testsuite/ld-elf/shared.exp: Run ld/26094 tests.
This commit is contained in:
@ -14802,12 +14802,16 @@ bfd_elf_define_start_stop (struct bfd_link_info *info,
|
||||
|
||||
h = elf_link_hash_lookup (elf_hash_table (info), symbol,
|
||||
FALSE, FALSE, TRUE);
|
||||
/* NB: Common symbols will be turned into definition later. */
|
||||
if (h != NULL
|
||||
&& (h->root.type == bfd_link_hash_undefined
|
||||
|| h->root.type == bfd_link_hash_undefweak
|
||||
|| ((h->ref_regular || h->def_dynamic) && !h->def_regular)))
|
||||
|| ((h->ref_regular || h->def_dynamic)
|
||||
&& !h->def_regular
|
||||
&& h->root.type != bfd_link_hash_common)))
|
||||
{
|
||||
bfd_boolean was_dynamic = h->ref_dynamic || h->def_dynamic;
|
||||
h->verinfo.verdef = NULL;
|
||||
h->root.type = bfd_link_hash_defined;
|
||||
h->root.u.def.section = sec;
|
||||
h->root.u.def.value = 0;
|
||||
|
Reference in New Issue
Block a user