From: Alan Modra Date: Tue, 2 May 2017 12:26:43 +0000 (+0930) Subject: PR 21384, --dynamic-list regression with f02cb058 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=73ec947d59c511411377ad51ef792a5fcdd3f0cc;p=binutils-gdb.git PR 21384, --dynamic-list regression with f02cb058 The commit to "Always descend into output section statements in lang_do_assignments" meant that linker script symbols were not bfd_link_hash_new when ld called bfd_elf_record_link_assignment. This patch corrects that problem by testing h->non_elf instead. PR 21384 * elflink.c (bfd_elf_link_mark_dynamic_symbol): Test h->non_elf rather than h->root.type == bfd_link_hash_new. (bfd_elf_record_link_assignment): Similarly, call bfd_elf_link_mark_dynamic_symbol when h->non_elf. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index dff6a593594..c62cf1388bd 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2017-05-02 Alan Modra + + PR 21384 + * elflink.c (bfd_elf_link_mark_dynamic_symbol): Test h->non_elf + rather than h->root.type == bfd_link_hash_new. + (bfd_elf_record_link_assignment): Similarly, call + bfd_elf_link_mark_dynamic_symbol when h->non_elf. + 2017-04-29 Alan Modra PR 21432 diff --git a/bfd/elflink.c b/bfd/elflink.c index 4af4b1cd3d3..9acc06901b9 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -580,7 +580,7 @@ bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info, && (ELF_ST_TYPE (sym->st_info) == STT_OBJECT || ELF_ST_TYPE (sym->st_info) == STT_COMMON)))) || (d != NULL - && h->root.type == bfd_link_hash_new + && h->non_elf && (*d->match) (&d->head, NULL, h->root.root.string))) h->dynamic = 1; } @@ -623,6 +623,14 @@ bfd_elf_record_link_assignment (bfd *output_bfd, } } + /* Symbols defined in a linker script but not referenced anywhere + else will have non_elf set. */ + if (h->non_elf) + { + bfd_elf_link_mark_dynamic_symbol (info, h, NULL); + h->non_elf = 0; + } + switch (h->root.type) { case bfd_link_hash_defined: @@ -639,8 +647,6 @@ bfd_elf_record_link_assignment (bfd *output_bfd, bfd_link_repair_undef_list (&htab->root); break; case bfd_link_hash_new: - bfd_elf_link_mark_dynamic_symbol (info, h, NULL); - h->non_elf = 0; break; case bfd_link_hash_indirect: /* We had a versioned symbol in a dynamic library. We make the