summaryrefslogtreecommitdiff
path: root/ld/ChangeLog
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2017-11-27 13:40:43 +1030
committerAlan Modra <amodra@gmail.com>2017-11-28 22:57:00 +1030
commit165f707ac88916aedecc96fa518be8879704d6da (patch)
tree8ca3d6cbc5f8a0a0154ff5686e71a964a932966d /ld/ChangeLog
parentcd5b2babea487b0a71a14b593af98330efd8d73e (diff)
PR22471, undefined reference to linker-defined symbols
This patch processes linker script assignment statements before ld opens DT_NEEDED libraries, in order to define symbols like __bss_start that might also be defined by a library, falsely triggering an error about "DSO missing from command line". The initial value won't be correct when assigning a symbol from dot, and I make no attempt to handle all expressions. For example, an assignment like "_start_foo = ADDR (.foo)" isn't valid until sections are laid out, so won't define _start_foo early. What's here should be enough for most common scripts, and hopefully won't perturb fragile scripts. bfd/ PR 22471 * elflink.c (_bfd_elf_merge_symbol): Allow weak symbols to override early passes over linker script symbols. * linker.c (_bfd_generic_link_add_one_symbol): Allow symbols to override early passes over linker script symbols. Clear ldscript_def on symbol definitions. ld/ PR 22471 * ldexp.c (struct definedness_hash_entry): Delete "by_script". Make "iteration" an 8-bit field, and update mask in all uses. (definedness_newfunc): Don't init "by_script". (update_definedness): Test ldscript_def rather than by_script. (is_sym_value): Likewise. (fold_name <DEFINED>): Return a result for first phase. Test ldscript_def. (fold_name <NAME>): Return a result for first phase. * ldlang.c (open_input_bfds): Process all assignments, not just defsym. (lang_process): Increment lang_statement_iteration before open_input_bfds. * testsuite/ld-mips-elf/tlsdyn-o32-1.d: Adjust for larger .dynsym. * testsuite/ld-mips-elf/tlsdyn-o32-1.got: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-2.d: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-2.got: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-3.d: Likewise. * testsuite/ld-mips-elf/tlsdyn-o32-3.got: Likewise.
Diffstat (limited to 'ld/ChangeLog')
-rw-r--r--ld/ChangeLog22
1 files changed, 22 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 058318dfab..2b204543a6 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,27 @@
2017-11-28 Alan Modra <amodra@gmail.com>
+ PR 22471
+ * ldexp.c (struct definedness_hash_entry): Delete "by_script". Make
+ "iteration" an 8-bit field, and update mask in all uses.
+ (definedness_newfunc): Don't init "by_script".
+ (update_definedness): Test ldscript_def rather than by_script.
+ (is_sym_value): Likewise.
+ (fold_name <DEFINED>): Return a result for first phase. Test
+ ldscript_def.
+ (fold_name <NAME>): Return a result for first phase.
+ * ldlang.c (open_input_bfds): Process all assignments, not just
+ defsym.
+ (lang_process): Increment lang_statement_iteration before
+ open_input_bfds.
+ * testsuite/ld-mips-elf/tlsdyn-o32-1.d: Adjust for larger .dynsym.
+ * testsuite/ld-mips-elf/tlsdyn-o32-1.got: Likewise.
+ * testsuite/ld-mips-elf/tlsdyn-o32-2.d: Likewise.
+ * testsuite/ld-mips-elf/tlsdyn-o32-2.got: Likewise.
+ * testsuite/ld-mips-elf/tlsdyn-o32-3.d: Likewise.
+ * testsuite/ld-mips-elf/tlsdyn-o32-3.got: Likewise.
+
+2017-11-28 Alan Modra <amodra@gmail.com>
+
* ldexp.h (struct ldexp_control): Add "assign_src".
* ldexp.c (fold_trinary): Save and restore assign_src around
condition evaluation.