old-cross-binutils/ld/testsuite
H.J. Lu 233cc9c13a Don't generate PLT for IFUNC GOT/pointer reference
If a backend supports it, PLT entry isn't needed when all references
to a STT_GNU_IFUNC symbols are done via GOT or static function pointers.
For GOT entries, We generate dynamic R_*_GLOB_DAT relocations for
preemptable symbols and R_*_IRELATIVE relocations for non-preemptable
symbols to update them with real function address.  For static pointer
pointers, we generate dynamic pointer relocations and store them in:

1. .rel[a].ifunc section in PIC object.
2. .rel[a].got section in dynamic executable.
3. .rel[a].iplt section in static executable.

We don't allocate GOT entry if it isn't used.

bfd/

	PR ld/20253
	* elf-bfd.h (_bfd_elf_allocate_ifunc_dyn_relocs): Add an
	bfd_boolean argument.
	* elf-ifunc.c (_bfd_elf_create_ifunc_sections): Replace
	"shared object" with "PIC object" in comments.
	(_bfd_elf_allocate_ifunc_dyn_relocs): Updated.  Replace
	"shared object" with "PIC object" in comments.  Avoid PLT if
	requested.  Generate dynamic relocations for non-GOT references.
	Make room for the special first entry in PLT and allocate PLT
	entry only for PLT and PC-relative references.  Store dynamic
	GOT relocations in .rel[a].iplt section for static executables.
	If PLT isn't used, always use GOT for symbol value.  Don't
	allocate GOT entry if it isn't used.
	* elf32-i386.c (elf_i386_check_relocs): Increment PLT reference
	count only in the code section.  Allocate dynamic pointer
	relocation against STT_GNU_IFUNC symbol in the non-code section.
	(elf_i386_adjust_dynamic_symbol): Increment PLT reference count
	only for PC-relative references.
	(elf_i386_allocate_dynrelocs): Pass TRUE to
	_bfd_elf_allocate_ifunc_dyn_relocs.
	(elf_i386_relocate_section): Allow R_386_GOT32/R_386_GOT32X
	relocations against STT_GNU_IFUNC symbols without PLT.  Generate
	dynamic pointer relocation against STT_GNU_IFUNC symbol in
	the non-code section and store it in the proper REL section.
	Don't allow non-pointer relocation against STT_GNU_IFUNC symbol
	without PLT.
	(elf_i386_finish_dynamic_symbol): Generate dynamic
	R_386_IRELATIVE and R_386_GLOB_DAT GOT relocations against
	STT_GNU_IFUNC symbols without PLT.
	(elf_i386_finish_dynamic_sections): Don't handle local
	STT_GNU_IFUNC symbols here.
	(elf_i386_output_arch_local_syms): Handle local STT_GNU_IFUNC
	symbols here.
	(elf_backend_output_arch_local_syms): New.
	* elf32-x86-64.c (elf_i386_check_relocs): Increment PLT reference
	count only in the code section.  Allocate dynamic pointer
	relocation against STT_GNU_IFUNC symbol in the non-code section.
	(elf_x86_64_adjust_dynamic_symbol): Increment PLT reference
	count only for PC-relative references.
	(elf_x86_64_allocate_dynrelocs): Pass TRUE to
	_bfd_elf_allocate_ifunc_dyn_relocs.
	(elf_x86_64_relocate_section): Allow R_X86_64_GOTPCREL,
	R_X86_64_GOTPCRELX, R_X86_64_REX_GOTPCRELX and
	R_X86_64_GOTPCREL64 relocations against STT_GNU_IFUNC symbols
	without PLT.  Generate dynamic pointer relocation against
	STT_GNU_IFUNC symbol in the non-code section and store it in
	the proper RELA section.  Don't allow non-pointer relocation
	against STT_GNU_IFUNC symbol without PLT.
	(elf_x86_64_finish_dynamic_symbol): Generate dynamic
	R_X86_64_IRELATIVE and R_X86_64_GLOB_DAT GOT relocations against
	STT_GNU_IFUNC symbols without PLT.
	(elf_x86_64_finish_dynamic_sections): Don't handle local
	STT_GNU_IFUNC symbols here.
	(elf_x86_64_output_arch_local_syms): Handle local STT_GNU_IFUNC
	symbols here.
	(elf_backend_output_arch_local_syms): New.
	* elfnn-aarch64.c (elfNN_aarch64_allocate_ifunc_dynrelocs):
	Pass FALSE to _bfd_elf_allocate_ifunc_dyn_relocs.

ld/

	PR ld/20253
	* testsuite/ld-i386/i386.exp: Run PR ld/20253 tests.
	* testsuite/ld-i386/no-plt.exp: Likewise.
	* testsuite/ld-x86-64/no-plt.exp: Likewise.
	* testsuite/ld-i386/pr13302.d: Remove .rel.plt section.
	* testsuite/ld-ifunc/ifunc-13-i386.d: Likewise.
	* testsuite/ld-ifunc/ifunc-13-x86-64.d: Likewise.
	* testsuite/ld-ifunc/ifunc-15-i386.d: Likewise.
	* testsuite/ld-ifunc/ifunc-15-x86-64.d: Likewise.
	* testsuite/ld-x86-64/pr13082-5a.d: Likewise.
	* testsuite/ld-x86-64/pr13082-5b.d: Likewise.
	* testsuite/ld-x86-64/pr13082-6a.d: Likewise.
	* testsuite/ld-x86-64/pr13082-6b.d: Likewise.
	* testsuite/ld-i386/pr20244-2a.d: Remove .plt section.
	* testsuite/ld-ifunc/ifunc-21-i386.d: Likewise.
	* testsuite/ld-ifunc/ifunc-21-x86-64.d: Likewise.
	* testsuite/ld-ifunc/ifunc-22-i386.d: Likewise.
	* testsuite/ld-ifunc/ifunc-22-x86-64.d: Likewise.
	* testsuite/ld-i386/pr20244-2b.d: Updated.
	* testsuite/ld-i386/pr20244-2c.d: Likewise.
	* testsuite/ld-ifunc/ifunc-18a-i386.d: Likewise.
	* testsuite/ld-ifunc/ifunc-18a-x86-64.d: Likewise.
	* testsuite/ld-ifunc/ifunc-18b-i386.d: Likewise.
	* testsuite/ld-ifunc/ifunc-18b-x86-64.d: Likewise.
	* testsuite/ld-i386/pr20253-1a.c: New file.
	* testsuite/ld-i386/pr20253-1b.S: Likewise.
	* testsuite/ld-i386/pr20253-1c.S: Likewise.
	* testsuite/ld-i386/pr20253-1d.S: Likewise.
	* testsuite/ld-i386/pr20253-2a.c: Likewise.
	* testsuite/ld-i386/pr20253-2b.S: Likewise.
	* testsuite/ld-i386/pr20253-2c.S: Likewise.
	* testsuite/ld-i386/pr20253-2d.S: Likewise.
	* testsuite/ld-i386/pr20253-3.d: Likewise.
	* testsuite/ld-i386/pr20253-3.s: Likewise.
	* testsuite/ld-i386/pr20253-4.s: Likewise.
	* testsuite/ld-i386/pr20253-4a.d: Likewise.
	* testsuite/ld-i386/pr20253-4b.d: Likewise.
	* testsuite/ld-i386/pr20253-4c.d: Likewise.
	* testsuite/ld-i386/pr20253-5.d: Likewise.
	* testsuite/ld-i386/pr20253-5.s: Likewise.
	* testsuite/ld-ifunc/ifunc-23-x86.s: Likewise.
	* testsuite/ld-ifunc/ifunc-23a-x86.d: Likewise.
	* testsuite/ld-ifunc/ifunc-23b-x86.d: Likewise.
	* testsuite/ld-ifunc/ifunc-23c-x86.d: Likewise.
	* testsuite/ld-ifunc/ifunc-24-x86.s: Likewise.
	* testsuite/ld-ifunc/ifunc-24a-x86.d: Likewise.
	* testsuite/ld-ifunc/ifunc-24b-x86.d: Likewise.
	* testsuite/ld-ifunc/ifunc-24c-x86.d: Likewise.
	* testsuite/ld-ifunc/ifunc-25-x86.s: Likewise.
	* testsuite/ld-ifunc/ifunc-25a-x86.d: Likewise.
	* testsuite/ld-ifunc/ifunc-25b-x86.d: Likewise.
	* testsuite/ld-ifunc/ifunc-25c-x86.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1.s: Likewise.
	* testsuite/ld-x86-64/pr20253-1a.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1b.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1c.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1d.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1e.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1f.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1g.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1h.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1i.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1j.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1k.d: Likewise.
	* testsuite/ld-x86-64/pr20253-1l.d: Likewise.
	* testsuite/ld-x86-64/pr20253-2a.c: Likewise.
	* testsuite/ld-x86-64/pr20253-2b.S: Likewise.
	* testsuite/ld-x86-64/pr20253-2c.S: Likewise.
	* testsuite/ld-x86-64/pr20253-2d.S: Likewise.
	* testsuite/ld-x86-64/pr20253-3.d: Likewise.
	* testsuite/ld-x86-64/pr20253-3.s: Likewise.
	* testsuite/ld-x86-64/pr20253-4.s: Likewise.
	* testsuite/ld-x86-64/pr20253-4a.d: Likewise.
	* testsuite/ld-x86-64/pr20253-4b.d: Likewise.
	* testsuite/ld-x86-64/pr20253-4c.d: Likewise.
	* testsuite/ld-x86-64/pr20253-4d.d: Likewise.
	* testsuite/ld-x86-64/pr20253-4e.d: Likewise.
	* testsuite/ld-x86-64/pr20253-4f.d: Likewise.
	* testsuite/ld-x86-64/pr20253-5.s: Likewise.
	* testsuite/ld-x86-64/pr20253-5a.d: Likewise.
	* testsuite/ld-x86-64/pr20253-5b.d: Likewise.
	* testsuite/ld-ifunc/ifunc-18a-i386.d: Remove extra IRELATIVE
	relocation.
	* testsuite/ld-ifunc/ifunc-18a-x86-64.d: Likewise.
	* testsuite/ld-ifunc/ifunc-18b-i386.d: Likewise.
	* testsuite/ld-ifunc/ifunc-18b-x86-64.d: Likewise.
	* testsuite/ld-ifunc/ifunc-18a.s: Fix a typo.
	* testsuite/ld-x86-64/x86-64.exp: Run pr20253-1 tests.
2016-06-18 09:17:25 -07:00
..
config Download source only on remote host 2016-04-29 06:52:55 -07:00
ld-aarch64 [AArch64] Also puts value in place for R_AARCH64_RELATIVE 2016-05-03 11:59:37 +01:00
ld-alpha Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-arc arc/nps400 : New cmem instructions and associated relocation 2016-04-14 17:16:46 +01:00
ld-arm Add support for Thumb-2 long branch veneers 2016-06-17 18:28:08 +01:00
ld-auto-import Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-avr Fix PR ld/20254 2016-06-15 12:47:46 +05:30
ld-bootstrap Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-cdtest Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-checks Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-cris ELF/LD: Avoid producing hidden and internal dynamic symbols 2016-04-05 15:14:54 +01:00
ld-crx Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-cygwin Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-d10v Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-discard [ARC] Fix ld testsuite failures. 2016-04-05 13:46:44 +02:00
ld-elf ld/testsuite/ld-elf/init-fini-arrays.d: Remove `ft32-*-*' xfail 2016-06-07 16:05:49 +01:00
ld-elfcomm Skip ELF STT_COMMON linker tests if shared libraries are not supported. 2016-05-03 10:44:35 +01:00
ld-elfvers Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-elfvsb Skip debug sections when estimating distances 2016-04-27 09:13:10 -07:00
ld-elfweak Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-fastcall Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-frv Make linker assigned symbol dynamic only for shared object 2016-02-23 05:19:03 -08:00
ld-gc Fix some AVR test failures. 2016-05-04 13:03:52 +01:00
ld-h8300 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-i386 Don't generate PLT for IFUNC GOT/pointer reference 2016-06-18 09:17:25 -07:00
ld-ia64 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-ifunc Don't generate PLT for IFUNC GOT/pointer reference 2016-06-18 09:17:25 -07:00
ld-libs Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-linkonce Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-m68hc11 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-m68k Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-mep Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-metag Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-mips-elf MIPS/BFD: Correctly handle `bfd_reloc_outofrange' with branches 2016-05-28 10:59:45 +01:00
ld-misc Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-mmix Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-mn10300 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-nds32 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-nios2 Add Nios II arch flags and compatibility tests 2015-07-01 15:55:28 -07:00
ld-pe Improve COFF/PE linker garbage collection by preventing the removal of sections containing exported symbols. 2016-03-22 12:25:08 +00:00
ld-pie Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-plugin Skip an archive element if not added by linker 2016-05-25 08:41:05 -07:00
ld-powerpc PowerPC VLE 2016-06-07 22:04:38 +09:30
ld-s390 Fix PLT first entry GOT operand calculation. 2016-06-07 16:47:10 +02:00
ld-scripts Hack crossref tests for powerpc64 2016-05-19 14:07:06 +09:30
ld-selective Fix some AVR test failures. 2016-05-04 13:03:52 +01:00
ld-sh Enhance GAS's .section directive so that it can take numeric values for the flags and type fields. (ELF only) 2016-02-15 11:11:46 +00:00
ld-shared Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-size Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-sparc Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-spu Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-srec [ARC] XFAIL S-Records tests for both little and big endian ARC target. 2016-06-13 16:15:58 +02:00
ld-tic6x Enhance GAS's .section directive so that it can take numeric values for the flags and type fields. (ELF only) 2016-02-15 11:11:46 +00:00
ld-tilegx Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-tilepro Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-undefined Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-unique LD/ELF: Unify STB_GNU_UNIQUE handling 2016-05-17 12:21:40 +01:00
ld-v850 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-vax-elf Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-versados Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-visium Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-vxworks Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-x86-64 Don't generate PLT for IFUNC GOT/pointer reference 2016-06-18 09:17:25 -07:00
ld-xc16x Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-xstormy16 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-xtensa Enhance GAS's .section directive so that it can take numeric values for the flags and type fields. (ELF only) 2016-02-15 11:11:46 +00:00
ld-z8k ld/testsuite/ld-z8k/test-ld.sh: Remove. Checked in by mistake. 2016-06-04 22:39:46 +02:00
lib [ARC] Fixed-linker-related-testsuite-for-ARC 2016-05-19 15:06:51 +02:00
ChangeLog-2004 Add copyright notices 2012-12-10 12:48:03 +00:00
ChangeLog-2005 Add copyright notices 2012-12-10 12:48:03 +00:00
ChangeLog-2006 Add copyright notices 2012-12-10 12:48:03 +00:00
ChangeLog-2007 Add copyright notices 2012-12-10 12:48:03 +00:00
ChangeLog-2008 Add copyright notices 2012-12-10 12:48:03 +00:00
ChangeLog-2009 Add copyright notices 2012-12-10 12:48:03 +00:00
ChangeLog-2010 Add copyright notices 2012-12-10 12:48:03 +00:00
ChangeLog-2011 Add copyright notices 2012-12-10 12:48:03 +00:00
ChangeLog-2012 Rotate binutils ChangeLog for 2013 2013-01-02 17:06:32 +00:00
ChangeLog-2013 New Year - binutils ChangeLog rotation 2014-01-08 05:32:12 -08:00
ChangeLog-2014 ChangeLog rotatation and copyright year update 2015-01-02 00:53:45 +10:30
ChangeLog-2015 binutils ChangeLog rotation 2016-01-01 22:59:17 +10:30
ChangeLog-9303 Add copyright notices 2012-12-10 12:48:03 +00:00