binutils-gdb/ld/testsuite/ld-x86-64
Alan Modra 0e5fabeb2c Rewrite relro adjusting code
The linker tries to put the end of the last section in the relro
segment exactly on a page boundary, because the relro segment itself
must end on a page boundary.  If for any reason this can't be done,
padding is inserted.  Since the end of the relro segment is typically
between .got and .got.plt, padding effectively increases the size of
the GOT.  This isn't nice for targets and code models with limited GOT
addressing.

The problem with the current code is that it doesn't cope very well
with aligned sections in the relro segment.  When making .got aligned
to a 256 byte boundary for PowerPC64, I found that often the initial
alignment attempt failed and the fallback attempt to be less than
adequate.  This is a particular problem for PowerPC64 since the
distance between .got and .plt affects the size of plt call stubs,
leading to "stubs don't match calculated size" errors.

So this rewrite takes a direct approach to calculating a new relro
base.  Starting from the last section in the segment, we calculate
where it must start to position its end on the boundary, or as near as
possible considering alignment requirements.  The new start then
becomes the goal for the previous section to end, and so on for all
sections.  This of course ignores the possibility that user scripts
will place . = ALIGN(xxx); in the relro segment, or provide section
address expressions.  In those cases we might fail, but the old code
probably did too, and a fallback is provided.

ld/
	* ldexp.h (struct ldexp_control): Delete dataseg.min_base.  Add
	data_seg.relro_offset.
	* ldexp.c (fold_binary <DATA_SEGMENT_ALIGN>): Don't set min_base.
	(fold_binary <DATA_SEGMENT_RELRO_END>): Do set relro_offset.
	* ldlang.c (lang_size_sections): Rewrite code adjusting relro
	segment base to line up last section on page boundary.
ld/testsuite/
	* ld-x86-64/pr18176.d: Update.
2015-04-22 23:19:59 +09:30
..
32bit.s
64bit.s
abs-k1om.d
abs-l1om.d
abs.d
bnd-branch-1.d
bnd-branch-1.s
bnd-ifunc-1.d
bnd-ifunc-1.s
bnd-ifunc-2.d
bnd-ifunc-2.s
bnd-plt-1.d
compressed1.d Use nm/readelf with "failif" 2015-02-19 04:45:27 -08:00
compressed1.s
copyreloc-lib.c
copyreloc-main1.rd
copyreloc-main2.rd
copyreloc-main.out
copyreloc-main.S
discarded1.d
discarded1.s
discarded1.t
dummy.s
dwarfreloc1.s
dwarfreloc2.s
dwarfreloc.exp
dwarfreloc.rd
export-class.exp
foo.s
gotplt1.d
gotplt1.s
hidden1.d
hidden1.s
hidden2.d
hidden2.s
hidden3.d
hidden3.s
hidden4.d Replace SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL 2015-04-11 07:56:48 -07:00
hidden4.s Replace SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL 2015-04-11 07:56:48 -07:00
hidden5.d Replace SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL 2015-04-11 07:56:48 -07:00
hidden5.s Replace SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL 2015-04-11 07:56:48 -07:00
ia32-1.d
ia32-2.d
ia32-3.d
ilp32-1.d
ilp32-2.d
ilp32-3.d
ilp32-4-nacl.d
ilp32-4.d Don't hardcode offset of .shstrtab section 2015-04-20 09:55:47 -07:00
ilp32-4.s
ilp32-5.d
ilp32-5.s
ilp32-6.d
ilp32-6.s
ilp32-7.d
ilp32-7.s
ilp32-8.d
ilp32-8.s
ilp32-9.d
ilp32-9.s
ilp32-10.d
ilp32-10.s
ilp32-11.d
ilp32-11.s
incompatible.l
lea1.s
lea1a.d
lea1b.d
lea1c.d
lea1d.d
lea1e.d
lea1f.d
lea1g.d
lea1h.d
lea1i.d
lea1j.d
lea1k.d
lea1l.d
line.exp
lp64-1.d
lp64-2.d
lp64-3.d
mixed1a.s
mixed1b.s
mixed2a.s
mixed2b.s
mov1.s
mov1a.d
mov1b.d
mov1c.d
mov1d.d
mpx1.out
mpx1a.c
mpx1a.rd
mpx1b.c
mpx1c.c
mpx1c.rd
mpx2.out
mpx2a.c
mpx2a.rd
mpx2b.c
mpx2c.c
mpx2c.rd
mpx3.dd
mpx3a.s
mpx3b.s
mpx4.dd
mpx4a.s
mpx4b.s
mpx.exp
nogot1.d
nogot1.s
nogot2.d
nogot2.s
pcrel8.d
pcrel16.d
pie1.d Use nm/readelf with "failif" 2015-02-19 04:45:27 -08:00
pie1.s
plt-lib.c
plt-main1.c
plt-main1.rd
plt-main2.c
plt-main2.rd
plt-main3.c
plt-main3.rd
plt-main4.c
plt-main4.rd
plt-main5.c
plt-main-bnd.dd
plt-main.out
plt-main.rd
plt-nacl.pd
plt-pic.s
plt.pd
plt.s
pltlib.s
pr12570a.d
pr12570a.s
pr12570b.d
pr12570b.s
pr12718.d
pr12718.s
pr12921.d
pr12921.s
pr13082-1.s
pr13082-1a.d
pr13082-1b.d
pr13082-2.s
pr13082-2a.d
pr13082-2b.d
pr13082-3.s
pr13082-3a.d
pr13082-3b.d
pr13082-4.s
pr13082-4a.d
pr13082-4b.d
pr13082-5.s
pr13082-5a.d
pr13082-5b.d
pr13082-6.s
pr13082-6a.d
pr13082-6b.d
pr13947.d
pr13947.s
pr14207.d
pr14207.s
pr14215.d
pr14215.s
pr17306a.s
pr17306b.s
pr17618.d
pr17618.s
pr17689.out
pr17689.rd
pr17689a.c
pr17689b.S
pr17709-nacl.rd Add extern_protected_data and set it for x86 2015-04-10 11:06:34 -07:00
pr17709.rd Add extern_protected_data and set it for x86 2015-04-10 11:06:34 -07:00
pr17709a.s Add extern_protected_data and set it for x86 2015-04-10 11:06:34 -07:00
pr17709b.s Add extern_protected_data and set it for x86 2015-04-10 11:06:34 -07:00
pr17827.rd
pr17935-1.d
pr17935-1.s
pr17935-2.d
pr17935-2.s
pr18160.d Don't run ld-x86-64/pr18160.d for x86_64-*-nacl* 2015-03-27 14:40:43 -07:00
pr18160.s Skip gc-sections if relocation is incompatible 2015-03-26 08:22:55 -07:00
pr18160.t Skip gc-sections if relocation is incompatible 2015-03-26 08:22:55 -07:00
pr18176.d Rewrite relro adjusting code 2015-04-22 23:19:59 +09:30
pr18176.s Add a testcase for PR ld/18176 2015-04-01 04:24:24 -07:00
pr18176.t Add a testcase for PR ld/18176 2015-04-01 04:24:24 -07:00
protected1.d
protected1.s
protected2-k1om.d
protected2-l1om.d
protected2.d
protected2.s
protected3-k1om.d
protected3-l1om.d
protected3.d Add extern_protected_data and set it for x86 2015-04-10 11:06:34 -07:00
protected3.s Add extern_protected_data and set it for x86 2015-04-10 11:06:34 -07:00
protected4.d
protected4.s
protected5.d
protected5.s
protected6.s Check GOTOFF reloc against protected data on x86 2015-04-10 14:02:23 -07:00
protected6a.d Replace SYMBOLIC_BIND with SYMBOL_REFERENCES_LOCAL 2015-04-11 07:56:48 -07:00
protected6b.d Add -z noextern-protected-data to ld for ELF/x86 2015-04-14 04:13:11 -07:00
protected7.s Check GOTOFF reloc against protected data on x86 2015-04-10 14:02:23 -07:00
protected7a.d Check GOTOFF reloc against protected data on x86 2015-04-10 14:02:23 -07:00
protected7b.d Check GOTOFF reloc against protected data on x86 2015-04-10 14:02:23 -07:00
simple.c
split-by-file1.s
split-by-file2.s
split-by-file-nacl.rd Don't hardcode offset of .shstrtab section 2015-04-20 09:55:47 -07:00
split-by-file.rd Don't hardcode offset of .shstrtab section 2015-04-20 09:55:47 -07:00
start.s
tlsbin-nacl.rd
tlsbin.dd
tlsbin.rd
tlsbin.s
tlsbin.sd
tlsbin.td
tlsbindesc-nacl.rd
tlsbindesc.dd
tlsbindesc.rd
tlsbindesc.s
tlsbindesc.sd
tlsbindesc.td
tlsbinpic.s
tlsdesc-nacl.pd
tlsdesc-nacl.rd Properly place the NULL STT_FILE symbol revistited 2015-02-18 00:31:52 +10:30
tlsdesc.dd
tlsdesc.pd
tlsdesc.rd Properly place the NULL STT_FILE symbol revistited 2015-02-18 00:31:52 +10:30
tlsdesc.s
tlsdesc.sd
tlsdesc.td
tlsg.s
tlsg.sd
tlsgd1.dd
tlsgd1.s
tlsgd2.d
tlsgd2.s
tlsgd3.d
tlsgd3.s
tlsgd4.dd
tlsgd4.s
tlsgd5.dd
tlsgd5a.s
tlsgd5b.s
tlsgd6.dd
tlsgd6a.s
tlsgd6b.s
tlsgd7.dd
tlsgd7.s
tlsgd8.dd
tlsgd8.s
tlsgdesc-nacl.rd
tlsgdesc.dd
tlsgdesc.rd
tlsgdesc.s
tlsie1.dd
tlsie1.s
tlsie2.d
tlsie2.s
tlsie3.d
tlsie3.s
tlsie4.dd
tlsie4.s
tlsld1.dd
tlsld1.s
tlsld2.dd
tlsld2.s
tlsld3.dd
tlsld3.s
tlsle1.d
tlsle1.s
tlslib.s
tlspic1.s
tlspic2.s
tlspic-nacl.rd Properly place the NULL STT_FILE symbol revistited 2015-02-18 00:31:52 +10:30
tlspic.dd
tlspic.rd Properly place the NULL STT_FILE symbol revistited 2015-02-18 00:31:52 +10:30
tlspic.sd
tlspic.td
tlspie1.d
tlspie1.s
undefined.s
unique1.d
unique1.s
x86-64-64-export-class.rd
x86-64-x32-export-class.rd
x86-64-x32.rd
x86-64.exp Add -z noextern-protected-data to ld for ELF/x86 2015-04-14 04:13:11 -07:00