binutils-gdb/ld/testsuite/ld-i386
H.J. Lu dd7e64d45b Optimize out i386/x86-64 JUMP_SLOT relocation
When there are both PLT and GOT references to the same function symbol,
linker will create a GOTPLT slot for PLT entry and a GOT slot for GOT
reference.  A run-time JUMP_SLOT relocation is created to update the
GOTPLT slot and a run-time GLOB_DAT relocation is created to update the
GOT slot.  Both JUMP_SLOT and GLOB_DAT relocations will apply the same
symbol value to GOTPLT and GOT slots, respectively, at run-time.

This optimization combines GOTPLT and GOT slots into a single GOT slot
and removes the run-time JUMP_SLOT relocation.  It replaces the regular
PLT entry:

	indirect jump	[GOTPLT slot]
	push		relocation index
	jump		PLT0

with an GOT PLT entry with an indirect jump via the GOT slot:

	indirect jump	[GOT slot]
	nop

and resolves PLT reference to the GOT PLT entry.

We must avoid this optimization if pointer equality is needed since
we don't clear symbol value in this case and the dynamic linker won't
update the GOT slot.  Otherwise, the resulting binary will get into an
infinite loop at run-time.

bfd/

	* elf32-i386.c (elf_i386_got_plt_entry): New.
	(elf_i386_pic_got_plt_entry): Likewise.
	(elf_i386_link_hash_entry): Add plt_got.
	(elf_i386_link_hash_table): Likewise.
	(elf_i386_link_hash_newfunc): Initialize plt_got.offset to -1.
	(elf_i386_get_local_sym_hash): Likewise.
	(elf_i386_check_relocs): Create the GOT PLT if there are both
	PLT and GOT references when the regular PLT is used.
	(elf_i386_allocate_dynrelocs): Use the GOT PLT if there are
	both PLT and GOT references unless pointer equality is needed.
	(elf_i386_relocate_section): Also check the GOT PLT when
	resolving R_386_PLT32.
	(elf_i386_finish_dynamic_symbol): Use the GOT PLT if it is
	available.

	* elf64-x86-64.c (elf_x86_64_link_hash_entry): Add plt_got.
	(elf_x86_64_link_hash_table): Likewise.
	(elf_x86_64_link_hash_newfunc): Initialize plt_got.offset to -1.
	(elf_x86_64_get_local_sym_hash): Likewise.
	(elf_x86_64_check_relocs): Create the GOT PLT if there are both
	PLT and GOT references when the regular PLT is used.
	(elf_x86_64_allocate_dynrelocs): Use the GOT PLT if there are
	both PLT and GOT references unless pointer equality is needed.
	(elf_x86_64_relocate_section): Also check the GOT PLT when
	resolving R_X86_64_PLT32.
	(elf_x86_64_finish_dynamic_symbol): Use the GOT PLT if it is
	available.

ld/

	* emulparams/elf_i386.sh (TINY_READONLY_SECTION): New.
	* emulparams/elf_x86_64.sh (TINY_READONLY_SECTION): Add .plt.got.

ld/testsuite/

	* ld-i386/i386.exp: Add run-time relocation tests for plt-main.
	* ld-i386/plt-main.rd: New file.
	* ld-x86-64/plt-main-bnd.dd: Likewise.
	* ld-x86-64/plt-main.rd: Likewise.
	* ld-x86-64/x86-64.exp: Add run-time relocation tests for
	plt-main.
2014-11-25 05:05:39 -08:00
..
abs.d
abs.s
alloc.d bfd/ 2010-04-22 01:51:01 +00:00
alloc.s
alloc.t bfd/ 2012-04-03 16:01:38 +00:00
combreloc.d
combreloc.s
compressed1.d Add testcases for PR ld/11817. 2010-07-15 00:42:23 +00:00
compressed1.s Add testcases for PR ld/11817. 2010-07-15 00:42:23 +00:00
discarded1.d Check if .got.plt section is discarded before using it. 2010-08-13 20:50:27 +00:00
discarded1.s Check if .got.plt section is discarded before using it. 2010-08-13 20:50:27 +00:00
discarded1.t Check if .got.plt section is discarded before using it. 2010-08-13 20:50:27 +00:00
emit-relocs-nacl.rd bfd/ 2012-04-03 16:01:38 +00:00
emit-relocs.rd bfd/ 2012-04-03 16:01:38 +00:00
emit-relocs.s
export-class.exp Update copyright years 2014-03-05 22:16:15 +10:30
hidden1.d
hidden1.s
hidden2.d bfd/ 2012-04-03 16:01:38 +00:00
hidden2.s
hidden3.d
hidden3.s
i386-export-class.rd * ld-elf/export-class.sd: New test. 2012-08-28 20:29:19 +00:00
i386-export-class.xd * ld-elf/export-class.sd: New test. 2012-08-28 20:29:19 +00:00
i386.exp Optimize out i386/x86-64 JUMP_SLOT relocation 2014-11-25 05:05:39 -08:00
lea1.s Convert mov to lea for loading local function address 2012-08-31 04:26:17 +00:00
lea1a.d Convert mov to lea for loading local function address 2012-08-31 04:26:17 +00:00
lea1b.d Convert mov to lea for loading local function address 2012-08-31 04:26:17 +00:00
lea1c.d Convert mov to lea for loading local function address 2012-08-31 04:26:17 +00:00
lea1d.d Convert mov to lea in size_dynamic_sections 2012-08-31 20:41:41 +00:00
lea1e.d Convert mov to lea in size_dynamic_sections 2012-08-31 20:41:41 +00:00
lea1f.d Convert mov to lea in size_dynamic_sections 2012-08-31 20:41:41 +00:00
mov1.s Don't optimize relocation against _DYNAMIC 2012-09-01 02:50:14 +00:00
mov1a.d Don't optimize relocation against _DYNAMIC 2012-09-01 02:50:14 +00:00
mov1b.d Don't optimize relocation against _DYNAMIC 2012-09-01 02:50:14 +00:00
nogot1.d Don't allocate .got.plt section if there are no GOT nor PLT entries. 2010-07-14 00:30:57 +00:00
nogot1.s Remove GOTOFF in ld-i386/nogot1.s. 2010-09-24 06:09:31 +00:00
nogot2.d Add 2 tests for PR ld/11812. 2010-10-01 04:47:02 +00:00
nogot2.s Add 2 tests for PR ld/11812. 2010-10-01 04:47:02 +00:00
pcrel8.d
pcrel8.s
pcrel16.d bfd/ 2012-04-03 16:01:38 +00:00
pcrel16.s
pcrel16abs.d bfd/ 2012-04-03 16:01:38 +00:00
pcrel16abs.s
plt-lib.c Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main1.c Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main1.rd Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main2.c Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main2.rd Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main3.c Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main3.rd Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main4.c Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main4.rd Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main5.c Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main.out Add function and function pointer tests for i386 2014-11-21 08:45:02 -08:00
plt-main.rd Optimize out i386/x86-64 JUMP_SLOT relocation 2014-11-25 05:05:39 -08:00
plt-nacl.pd bfd/ 2012-04-03 16:01:38 +00:00
plt-pic-nacl.pd bfd/ 2012-04-03 16:01:38 +00:00
plt-pic.pd bfd/ 2012-04-03 16:01:38 +00:00
plt-pic.s bfd/ 2012-04-03 16:01:38 +00:00
plt.pd bfd/ 2012-04-03 16:01:38 +00:00
plt.s bfd/ 2012-04-03 16:01:38 +00:00
pltlib.s bfd/ 2012-04-03 16:01:38 +00:00
pr12570a.d Always create PLT eh_frame section for i386/x86-64 2012-05-22 14:05:21 +00:00
pr12570a.s Always create PLT eh_frame section for i386/x86-64 2012-05-22 14:05:21 +00:00
pr12570b.d Always create PLT eh_frame section for i386/x86-64 2012-05-22 14:05:21 +00:00
pr12570b.s Always create PLT eh_frame section for i386/x86-64 2012-05-22 14:05:21 +00:00
pr12627.d Add a testcase for PR ld/12627. 2011-04-04 16:36:29 +00:00
pr12627.s Add a testcase for PR ld/12627. 2011-04-04 16:36:29 +00:00
pr12627.t bfd/ 2012-04-03 16:01:38 +00:00
pr12718.d Don't align text/data/bss sections for ELF 2013-05-31 17:27:28 +00:00
pr12718.s Add testcases for PR ld/12718. 2011-05-01 13:38:22 +00:00
pr12921.d bfd/ 2012-06-06 10:50:18 +00:00
pr12921.s Add testcases for PR ld/12921. 2011-06-24 14:03:15 +00:00
pr13302.d Restore R_386_IRELATIVE and R_X86_64_IRELATIVE 2012-03-09 16:28:38 +00:00
pr13302.s Replace IRELATIVE relocations with RELATIVE in .rel.dyn. 2011-10-21 19:37:15 +00:00
pr14215.d Don't hardcode .got.plt into DATA_SEGMENT_RELRO_END evaluation 2012-06-11 13:23:51 +00:00
pr14215.s Don't hardcode .got.plt into DATA_SEGMENT_RELRO_END evaluation 2012-06-11 13:23:51 +00:00
pr17057.d Update elf_i386_compute_jump_table_size 2014-07-15 13:09:55 -07:00
pr17057.s Update elf_i386_compute_jump_table_size 2014-07-15 13:09:55 -07:00
pr17306a.s Use bfd_is_abs_section to check discarded input section 2014-08-27 07:59:48 -07:00
pr17306b.s Use bfd_is_abs_section to check discarded input section 2014-08-27 07:59:48 -07:00
protected1.d
protected1.s
protected2.d
protected2.s
protected3.d Don't hard code expected output. 2010-07-13 17:42:29 +00:00
protected3.s
protected4.d Handle relocation against protected function for -Bsymbolic 2012-03-20 18:16:38 +00:00
protected4.s Handle relocation against protected function for -Bsymbolic 2012-03-20 18:16:38 +00:00
protected5.d Handle relocation against protected function for -Bsymbolic 2012-03-20 18:16:38 +00:00
protected5.s Handle relocation against protected function for -Bsymbolic 2012-03-20 18:16:38 +00:00
reloc.d bfd/ 2012-04-03 16:01:38 +00:00
reloc.s
tlsbin-nacl.rd ld/testsuite/ 2012-07-02 18:20:31 +00:00
tlsbin.dd bfd/ 2012-04-03 16:01:38 +00:00
tlsbin.rd ld/ 2012-06-15 15:13:41 +00:00
tlsbin.s
tlsbin.sd bfd/ 2012-04-03 16:01:38 +00:00
tlsbin.td bfd/ 2012-04-03 16:01:38 +00:00
tlsbindesc-nacl.rd Update x86 nacl tests for section alignment change 2013-06-04 16:08:51 +00:00
tlsbindesc.dd Don't align text/data/bss sections for ELF 2013-05-31 17:27:28 +00:00
tlsbindesc.rd Don't align text/data/bss sections for ELF 2013-05-31 17:27:28 +00:00
tlsbindesc.s
tlsbindesc.sd bfd/ 2012-04-03 16:01:38 +00:00
tlsbindesc.td bfd/ 2012-04-03 16:01:38 +00:00
tlsbinpic.s
tlsdesc-nacl.rd ld/testsuite/ 2012-07-02 18:20:31 +00:00
tlsdesc.dd bfd/ 2012-04-03 16:01:38 +00:00
tlsdesc.rd ld/ 2012-06-15 15:13:41 +00:00
tlsdesc.s
tlsdesc.sd bfd/ 2012-04-03 16:01:38 +00:00
tlsdesc.td bfd/ 2012-04-03 16:01:38 +00:00
tlsg.s
tlsg.sd bfd/ 2012-04-03 16:01:38 +00:00
tlsgd1.dd
tlsgd1.s
tlsgd2.d bfd/ 2009-06-19 16:00:33 +00:00
tlsgd2.s bfd/ 2009-06-19 16:00:33 +00:00
tlsgdesc-nacl.rd ld/testsuite/ 2012-07-02 18:20:31 +00:00
tlsgdesc.dd bfd/ 2012-04-03 16:01:38 +00:00
tlsgdesc.rd ld/ 2012-06-15 15:13:41 +00:00
tlsgdesc.s
tlsie1.dd
tlsie1.s
tlsie2.d
tlsie2.s
tlsie3.d
tlsie3.s
tlsie4.d
tlsie4.s
tlsie5.d
tlsie5.s
tlsindntpoff.dd bfd/ 2012-04-03 16:01:38 +00:00
tlsindntpoff.s
tlsld1.dd
tlsld1.s
tlslib.s
tlsnopic1.s
tlsnopic2.s
tlsnopic-nacl.rd ld/testsuite/ 2012-07-02 18:20:31 +00:00
tlsnopic.dd Don't align text/data/bss sections for ELF 2013-05-31 17:27:28 +00:00
tlsnopic.rd ld/ 2012-06-15 15:13:41 +00:00
tlsnopic.sd bfd/ 2012-04-03 16:01:38 +00:00
tlspic1.s
tlspic2.s
tlspic-nacl.rd ld/testsuite/ 2012-07-02 18:20:31 +00:00
tlspic.dd Don't align text/data/bss sections for ELF 2013-05-31 17:27:28 +00:00
tlspic.rd ld/ 2012-06-15 15:13:41 +00:00
tlspic.sd bfd/ 2012-04-03 16:01:38 +00:00
tlspic.td bfd/ 2012-04-03 16:01:38 +00:00
tlspie1.d 2009-08-02 H.J. Lu <hongjiu.lu@intel.com> 2009-08-02 23:55:49 +00:00
tlspie1.s 2009-08-02 H.J. Lu <hongjiu.lu@intel.com> 2009-08-02 23:55:49 +00:00
tlspie2.d bfd/ 2012-04-03 16:01:38 +00:00
tlspie2.s Properly handle R_386_TLS_LDO_32 for PIE. 2011-04-08 16:14:49 +00:00
vxworks1-lib.dd
vxworks1-lib.nd
vxworks1-lib.rd ld/testsuite/ 2011-07-27 20:58:14 +00:00
vxworks1-lib.s
vxworks1-lib.td
vxworks1-static.d
vxworks1.dd
vxworks1.ld
vxworks1.rd
vxworks1.s
vxworks2-static.sd
vxworks2.s
vxworks2.sd
warn1.d
warn1.s
zero.s