LD: Always make a SEGMENT_START expression section-relative
authorMaciej W. Rozycki <macro@mips.com>
Fri, 14 Sep 2018 19:22:56 +0000 (20:22 +0100)
committerMaciej W. Rozycki <macro@linux-mips.org>
Fri, 14 Sep 2018 19:22:56 +0000 (20:22 +0100)
commit6057dc97e4df5ca9692ddd948798eaa543c74cc7
tree4ac5b59f61ba9a6cb89a0aca6b5a344e24de2550
parenta000f8817b32eadd4aeadf9185634350a59e6649
LD: Always make a SEGMENT_START expression section-relative

Fix an issue with the SEGMENT_START builtin function where its result is
absolute when taken from the default supplied, and section-relative when
taken from a `-T' command-line override.  This is against documentation,
inconsistent and unexpected, and with PIE executables gives an incorrect
result with the `__executable_start' symbol.

Make the result of SEGMENT_START always section-relative then.

ld/
* ldexp.c (fold_binary): Always make the result of SEGMENT_START
section-relative.
* testsuite/ld-scripts/segment-start.d: New test.
* testsuite/ld-scripts/segment-start.ld: New test linker script.
* testsuite/ld-scripts/segment-start.s: New test source.
* testsuite/ld-scripts/script.exp: Run the new test.
ld/ChangeLog
ld/ldexp.c
ld/testsuite/ld-scripts/script.exp
ld/testsuite/ld-scripts/segment-start.d [new file with mode: 0644]
ld/testsuite/ld-scripts/segment-start.ld [new file with mode: 0644]
ld/testsuite/ld-scripts/segment-start.s [new file with mode: 0644]