PR 21384, --dynamic-list regression with f02cb058
authorAlan Modra <amodra@gmail.com>
Tue, 2 May 2017 12:26:43 +0000 (21:56 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 2 May 2017 15:21:06 +0000 (00:51 +0930)
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.

bfd/ChangeLog
bfd/elflink.c

index dff6a5935945da20c972d1ab20acc2d2f1e73098..c62cf1388bd4c615019c883de9ce0b8ddd16bcfc 100644 (file)
@@ -1,3 +1,11 @@
+2017-05-02  Alan Modra  <amodra@gmail.com>
+
+       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  <amodra@gmail.com>
 
        PR 21432
index 4af4b1cd3d33c0b566349d545038accee4ffd51a..9acc06901b908a15418eea7b17d80eaabe9a06a3 100644 (file)
@@ -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