Delay converting linker script defined symbols from absolute
authorAlan Modra <amodra@gmail.com>
Thu, 17 Sep 2015 23:44:25 +0000 (09:14 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 18 Sep 2015 03:09:16 +0000 (12:39 +0930)
commit975f8a9e3144e4d3d3f391e907c8bf94b23dc8b6
tree1e0766556406a33ec0f6fcd83b270087ae88897f
parentb29b8669ad250df649a0f02c5575e7163a2cd9e4
Delay converting linker script defined symbols from absolute

Giving linker script symbols defined outside of output sections a
section-relative value early, leads to them being used in expressions
as if they were defined inside an output section.  This can mean loss
of the section VMA, and wrong results.

ld/
PR ld/18963
* ldexp.h (struct ldexp_control): Add rel_from_abs.
(ldexp_finalize_syms): Declare.
* ldexp.c (new_rel_from_abs): Keep absolute for expressions
outside of output section statements.  Set rel_from_abs.
(make_abs, exp_fold_tree, exp_fold_tree_no_dot): Clear rel_from_abs.
(struct definedness_hash_entry): Add final_sec, and comment.
(update_definedness): Set final_sec.
(set_sym_sections, ldexp_finalize_syms): New functions.
* ldlang.c (lang_process): Call ldexp_finalize_syms.
ld/testsuite
PR ld/18963
* ld-scripts/pr18963.d,
* ld-scripts/pr18963.t: New test.
* ld-scripts/expr.exp: Run it.
* ld-elf/provide-hidden-2.ld: Explicitly make "dot" absolute.
* ld-mips-elf/gp-hidden.sd: Don't care about _gp section.
* ld-mips-elf/no-shared-1-n32.d: Don't care about symbol shown at
start of .data section.
* ld-mips-elf/no-shared-1-n64.d: Likewise.
* ld-mips-elf/no-shared-1-o32.d: Likewise.
13 files changed:
ld/ChangeLog
ld/ldexp.c
ld/ldexp.h
ld/ldlang.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/provide-hidden-2.ld
ld/testsuite/ld-mips-elf/gp-hidden.sd
ld/testsuite/ld-mips-elf/no-shared-1-n32.d
ld/testsuite/ld-mips-elf/no-shared-1-n64.d
ld/testsuite/ld-mips-elf/no-shared-1-o32.d
ld/testsuite/ld-scripts/expr.exp
ld/testsuite/ld-scripts/pr18963.d [new file with mode: 0644]
ld/testsuite/ld-scripts/pr18963.t [new file with mode: 0644]