binutils-gdb/ld/testsuite/ld-scripts
Andrew Burgess eab62f2f01 ld: Fix issue where PROVIDE overrides defined symbol
In a linker script, a sequence like this:

  foo = ADDR (.some_section);
  bar = foo;
  PROVIDE (foo = 0);

will result in 'bar = ADDR (.some_section)' and 'foo = 0', which seems
like incorrect behaviour, foo is clearly defined elsewhere, and so the
PROVIDE should not trigger.

The problem is that an expression like this:

    foo = ADDR (.some_section);

can't be evaluated until a late phase of the linker, due to the need
for the section '.some_section' to have been placed, then the PROVIDE
was being marked as being used during an earlier phase.  At the end of
the link, both lines:

    foo = ADDR (.some_section);
    PROVIDE (foo = 0);

are active, and this causes the final value of 'foo' to be 0.

The solution proposed in this commit is that, during earlier phases of
the linker, when we see the expression 'foo = ADDR (.some_section);',
instead of ignoring the expression, we create a "fake" definition of
'foo'.  The existence of this "fake" definition prevents the PROVIDE
from being marked used, and during the final phase the real definition
of 'foo' will replace the "fake" definition.

The new test provide-6 covers the exact case described above.  The
provide-7 test is similar to the above, but using constant
expressions, this was never broken, but is added here to increase
coverage.

The provide-8 case also didn't fail before this commit, but I did
manage to break this case during development of this patch.  This case
was only covered by a mmix test before, so I've added this here to
increase coverage.

ld/ChangeLog:

	* ldexp.c (exp_fold_tree_1): Rework condition underwhich provide
	nodes are ignored in the tree walk, and move the location at which
	we change provide nodes into provided nodes.
	(exp_init_os): Add etree_provided.
	* testsuite/ld-scripts/provide-6.d: New file.
	* testsuite/ld-scripts/provide-6.t: New file.
	* testsuite/ld-scripts/provide-7.d: New file.
	* testsuite/ld-scripts/provide-7.t: New file.
	* testsuite/ld-scripts/provide-8.d: New file.
	* testsuite/ld-scripts/provide-8.t: New file.
2018-01-11 17:35:35 +00:00
..
align-with-input.d
align-with-input.t
align.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
align.s
align.t Fix linker testsuite failures for arm-pe targets. 2016-01-20 15:41:06 +00:00
align2.t
align2a.d
align2a.s
align2b.d
align2b.s
align2c.d
align2c.s
align3.d Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
align3.t Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
align4.d Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
align4.t Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
align5.d Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
align5.t Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
alignof.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
alignof.s
alignof.t
assert.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
assert.s
assert.t
assert2.d
assert2.t
assign-loc.d rs6000 testsuite update 2017-07-12 19:31:26 +09:30
assign-loc.t
cross1.c
cross1.t Support different ld --hash-style in the ld testsuite 2017-08-07 22:10:51 +09:30
cross2.c
cross2.t Hack crossref tests for powerpc64 2016-05-19 14:07:06 +09:30
cross3.c
cross3.t Hack crossref tests for powerpc64 2016-05-19 14:07:06 +09:30
cross4.c
cross4.t Hack crossref tests for powerpc64 2016-05-19 14:07:06 +09:30
cross5.t Hack crossref tests for powerpc64 2016-05-19 14:07:06 +09:30
cross6.t Hack crossref tests for powerpc64 2016-05-19 14:07:06 +09:30
cross7.t Hack crossref tests for powerpc64 2016-05-19 14:07:06 +09:30
crossref.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
data.d
data.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
data.s
data.t
default-script.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
default-script.s
default-script.t
default-script1.d
default-script2.d
default-script3.d
default-script4.d
defined.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
defined.s
defined.t Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries. 2016-11-23 11:10:39 +00:00
defined2.d rs6000 testsuite update 2017-07-12 19:31:26 +09:30
defined2.t
defined3.d rs6000 testsuite update 2017-07-12 19:31:26 +09:30
defined3.t
defined4.d rs6000 testsuite update 2017-07-12 19:31:26 +09:30
defined4.s
defined4.t
defined5.d rs6000 testsuite update 2017-07-12 19:31:26 +09:30
defined5.s
defined5.t
defined6.d
defined6.s
defined6.t Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries. 2016-11-23 11:10:39 +00:00
dynamic-sections-1.s
dynamic-sections-2.s
dynamic-sections.d
dynamic-sections.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
dynamic-sections.t Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries. 2016-11-23 11:10:39 +00:00
empty-address-1.d
empty-address-1.s
empty-address-1.t
empty-address-2.s
empty-address-2a.d
empty-address-2a.t
empty-address-2b.d
empty-address-2b.t
empty-address-3.s
empty-address-3a.d
empty-address-3a.t
empty-address-3b.d
empty-address-3b.t
empty-address-3c.d
empty-address-3c.t
empty-address.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
empty-aligned.d
empty-aligned.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
empty-aligned.s
empty-aligned.t Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries. 2016-11-23 11:10:39 +00:00
empty-orphan.d
empty-orphan.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
empty-orphan.s
empty-orphan.t Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries. 2016-11-23 11:10:39 +00:00
exclude-file-1.d ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-1.map ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-1.t ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-2.d ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-2.map ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-2.t ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-3.d ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-3.map ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-3.t ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-4.d ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-4.map ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-4.t ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-5.d Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-5.map Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-5.t Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-6.d Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-6.map Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-6.t Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-7.d Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-7.map Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-7.t Make some improvements to how SORT_* specifiers and EXCLUDE_FILE specifiers are handled in the linker script grammar. 2017-07-28 13:01:10 +01:00
exclude-file-a.s ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file-b.s ld: Allow EXCLUDE_FILE to be used outside of the section list 2016-11-04 12:04:11 +00:00
exclude-file.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
expr.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
expr1.d
expr1.s
expr1.t
expr2.d rs6000 testsuite update 2017-07-12 19:31:26 +09:30
expr2.s
expr2.t
extern.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
extern.s
extern.t
fill.d LD/testsuite: Add 2**4 section alignment FILL script statement test 2017-07-19 13:11:59 +01:00
fill.t
fill16.d LD/testsuite: Add 2**4 section alignment FILL script statement test 2017-07-19 13:11:59 +01:00
fill16_0.s LD/testsuite: Add 2**4 section alignment FILL script statement test 2017-07-19 13:11:59 +01:00
fill16_1.s LD/testsuite: Add 2**4 section alignment FILL script statement test 2017-07-19 13:11:59 +01:00
fill16_2.s LD/testsuite: Add 2**4 section alignment FILL script statement test 2017-07-19 13:11:59 +01:00
fill_0.s
fill_1.s
fill_2.s
include-1.d
include-1.t
include-data.t
include-mem.t
include-ram.t
include-sections.t
include-subdata.t
include.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
include.s
log2.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
log2.s
log2.t
map-address.d
map-address.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
map-address.t
memory.t
memory_sym.t
overlay-size-map.d
overlay-size.d Fix RX and M68HC11 linker testsuite failures. 2016-06-28 12:43:14 +01:00
overlay-size.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
overlay-size.s
overlay-size.t
phdrs.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
phdrs.s
phdrs.t
phdrs2.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
phdrs2.s
phdrs2.t
phdrs3.d
phdrs3.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
phdrs3.t
phdrs3a.d Update linker tests after partial reversion of PR 20815 patch. 2016-11-28 17:51:57 +00:00
phdrs3a.t
pr14962-2.d Don't fudge p_vaddr when PHDR in segment 2016-12-13 09:37:37 +10:30
pr14962-2.t Correct script input section pattern 2016-05-09 17:07:33 +09:30
pr14962.d Don't fudge p_vaddr when PHDR in segment 2016-12-13 09:37:37 +10:30
pr14962.t
pr14962a.s
pr14962b.s
pr18963.d
pr18963.t
pr20302.d Don't run ld-scripts/pr20302 on linuxaout 2016-06-28 19:09:11 +09:30
pr22267.d ld: Don't allow '~' as the first char in symbol name 2017-10-09 04:17:24 -07:00
pr22267.s ld: Don't allow '~' as the first char in symbol name 2017-10-09 04:17:24 -07:00
pr22267.t ld: Don't allow '~' as the first char in symbol name 2017-10-09 04:17:24 -07:00
print-memory-usage-1.l Fix failing print-memory-usage-1 on Windows 2017-02-01 11:55:19 +05:30
print-memory-usage-1.s
print-memory-usage-1.t
print-memory-usage-2.l
print-memory-usage-2.t
print-memory-usage-3.l
print-memory-usage-3.s
print-memory-usage-3.t
print-memory-usage.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
print-memory-usage.t
provide-1.d
provide-1.s
provide-1.t
provide-2.d
provide-2.s
provide-2.t Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries. 2016-11-23 11:10:39 +00:00
provide-3.d ld: Find and run some tests using a wildcard pattern 2018-01-11 17:35:34 +00:00
provide-3.s
provide-3.t
provide-4.d ld: Find and run some tests using a wildcard pattern 2018-01-11 17:35:34 +00:00
provide-4.map ld: Find and run some tests using a wildcard pattern 2018-01-11 17:35:34 +00:00
provide-4.t Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries. 2016-11-23 11:10:39 +00:00
provide-5.d ld: Find and run some tests using a wildcard pattern 2018-01-11 17:35:34 +00:00
provide-5.map ld: Find and run some tests using a wildcard pattern 2018-01-11 17:35:34 +00:00
provide-5.s
provide-5.t
provide-6.d ld: Fix issue where PROVIDE overrides defined symbol 2018-01-11 17:35:35 +00:00
provide-6.t ld: Fix issue where PROVIDE overrides defined symbol 2018-01-11 17:35:35 +00:00
provide-7.d ld: Fix issue where PROVIDE overrides defined symbol 2018-01-11 17:35:35 +00:00
provide-7.t ld: Fix issue where PROVIDE overrides defined symbol 2018-01-11 17:35:35 +00:00
provide-8.d ld: Fix issue where PROVIDE overrides defined symbol 2018-01-11 17:35:35 +00:00
provide-8.t ld: Fix issue where PROVIDE overrides defined symbol 2018-01-11 17:35:35 +00:00
provide.exp ld: Find and run some tests using a wildcard pattern 2018-01-11 17:35:34 +00:00
region-alias-1.d
region-alias-1.t
region-alias-2.d
region-alias-2.t
region-alias-3.d
region-alias-3.t
region-alias-4.d
region-alias-4.t
rgn-at.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
rgn-at.s
rgn-at1.d
rgn-at1.t
rgn-at2.d Fix RX and M68HC11 linker testsuite failures. 2016-06-28 12:43:14 +01:00
rgn-at2.t
rgn-at3.d
rgn-at3.t
rgn-at4.d
rgn-at4.t
rgn-at5.d hppa -z relro again 2017-02-16 23:09:38 +10:30
rgn-at5.s
rgn-at5.t Correct script input section pattern 2016-05-09 17:07:33 +09:30
rgn-at6.d Fix RX and M68HC11 linker testsuite failures. 2016-06-28 12:43:14 +01:00
rgn-at6.s
rgn-at6.t
rgn-at7.d Fix RX and M68HC11 linker testsuite failures. 2016-06-28 12:43:14 +01:00
rgn-at7.t
rgn-at8.d Fix RX and M68HC11 linker testsuite failures. 2016-06-28 12:43:14 +01:00
rgn-at8.t
rgn-at9.d
rgn-at9.t
rgn-at10.d Testsuite fixes for hppa64-hpux 2017-02-25 19:13:34 +10:30
rgn-at10.s
rgn-at10.t
rgn-at11.d Testsuite fixes for hppa64-hpux 2017-02-25 19:13:34 +10:30
rgn-at11.s Re-enable rgn-at11 test for MIPS targets with adjusted section alignment. 2016-01-18 13:00:33 +00:00
rgn-at11.t
rgn-over.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
rgn-over.s
rgn-over1.d
rgn-over1.t
rgn-over2.d
rgn-over2.t
rgn-over3.d
rgn-over3.t
rgn-over4.d
rgn-over4.t
rgn-over5.d
rgn-over5.t
rgn-over6.d
rgn-over6.t
rgn-over7.d PR18452, ld allows overlapping sections 2016-03-30 17:50:03 +10:30
rgn-over7.t
rgn-over8-ok.d
rgn-over8.s
rgn-over8.t
sane1.d rs6000 testsuite update 2017-07-12 19:31:26 +09:30
sane1.t
script.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
script.s
script.t
scriptm.t
section-flags-1.s
section-flags-1.t
section-flags-2.s
section-flags-2.t
section-flags.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
section-match-1.d Fix spelling in comments in Assembler files (ld) 2016-11-27 15:07:26 +10:30
section-match-1.s
section-match-1.t Correct script input section pattern 2016-05-09 17:07:33 +09:30
section-match.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
size-1.d
size-1.s
size-1.t
size-2.d Testsuite fixes for hppa64-hpux 2017-02-25 19:13:34 +10:30
size-2.s
size-2.t Fix the linker so that it will not silently generate ELF binaries with invalid program headers. Fix readelf to report such invalid binaries. 2016-11-23 11:10:39 +00:00
size.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
sizeof.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
sizeof.s
sizeof.t
sort.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
sort.t
sort_b_a-1.d
sort_b_a-1.s
sort_b_a.d
sort_b_a.s
sort_b_a.t
sort_b_a_a-1.d
sort_b_a_a-2.d
sort_b_a_a-3.d
sort_b_a_a.t
sort_b_a_n-1.d
sort_b_a_n-2.d
sort_b_a_n-3.d
sort_b_a_n.t
sort_b_n-1.d
sort_b_n-1.s
sort_b_n.d
sort_b_n.s
sort_b_n.t
sort_b_n_a-1.d
sort_b_n_a-2.d
sort_b_n_a-3.d
sort_b_n_a.t
sort_b_n_n-1.d
sort_b_n_n-2.d
sort_b_n_n-3.d
sort_b_n_n.t
sort_n_a-a.s
sort_n_a-b.s
sort_no-1.d
sort_no-2.d
sort_no.t
sysroot-prefix-x.s
sysroot-prefix-y.s
sysroot-prefix.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
weak.exp Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
weak.t
weak1.s
weak2.s