old-cross-binutils/ld/testsuite/ld-ifunc
H.J. Lu bae420ef26 Optimize x86 GOT32X/GOTPCRELX relocations
R_386_GOT32X, R_X86_64_GOTPCRELX and R_X86_64_REX_GOTPCRELX relocations
retrieve the symbol address via its GOT slot.  If the symbol address is
known at the link-time, we can use it directly by changing instruction
encoding.  Indirect branch can only be converted to PC relative direct
branch.  MOV can be changed to LEA or encoded differently with signed
address.  The subset of binary operations can be encoded only with
signed address.

If undefined weak symbol is resolved to zero link-time, we can use it
as address.  Zero addresss can't used with PC relative direct branch
when PIC is true since the current PC is unknown.  In 64-bit, 32-bit
relocation for PC relatiave direct branch to zero may also overflow.

If this optimization causes relocation overflow, --no-relax can be used
to work around it.

bfd/

	PR ld/19609
	* elf32-i386.c (elf_i386_convert_load): Convert to R_386_32 for
	load with locally bound symbols if PIC is false or there is no
	base register.  Optimize branch to 0 if PIC is false.
	(elf_i386_relocate_section): Don't generate dynamic relocations
	against undefined weak symbols if PIC is false.
	* elf64-x86-64.c (elf_x86_64_convert_load): Disable optimization
	if we can't estimate relocation overflow with --no-relax.
	Convert to R_X86_64_32S/R_X86_64_32 for load with locally bound
	symbols if PIC is false.  Optimize branch to 0 if PIC is false.
	(elf_x86_64_relocate_section): Don't generate dynamic relocations
	against undefined weak symbols if PIC is false.

ld/

	PR ld/19609
	* testsuite/ld-i386/got1.dd: Updated.
	* testsuite/ld-i386/lea1c.d: Likewise.
	* testsuite/ld-i386/load1-nacl.d: Likewise.
	* testsuite/ld-i386/load1.d: Likewise.
	* testsuite/ld-i386/load4b.d: Likewise.
	* testsuite/ld-i386/load5b.d: Likewise.
	* testsuite/ld-i386/mov1b.d: Likewise.
	* testsuite/ld-x86-64/mov1b.d: Likewise.
	* testsuite/ld-x86-64/mov1d.d: Likewise.
	* 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-x86-64/gotpcrel1.dd: Likewise.
	* testsuite/ld-x86-64/lea1a.d: Likewise.
	* testsuite/ld-x86-64/lea1b.d: Likewise.
	* testsuite/ld-x86-64/lea1c.d: Likewise.
	* testsuite/ld-x86-64/lea1d.d: Likewise.
	* testsuite/ld-x86-64/lea1e.d: Likewise.
	* testsuite/ld-x86-64/lea1f.d: Likewise.
	* testsuite/ld-x86-64/mov1b.d: Likewise.
	* testsuite/ld-x86-64/mov1d.d: Likewise.
	* testsuite/ld-x86-64/pr13082-3b.d: Likewise.
	* testsuite/ld-x86-64/pr13082-4b.d: Likewise.
	* testsuite/ld-x86-64/lea1.s: Add tests for 32-bit registers.
	* testsuite/ld-i386/pr19609-1.s: New file.
	* testsuite/ld-i386/pr19609-1a.d: Likewise.
	* testsuite/ld-i386/pr19609-1b.d: Likewise.
	* testsuite/ld-i386/pr19609-1c.d: Likewise.
	* testsuite/ld-i386/pr19609-1d.d: Likewise.
	* testsuite/ld-i386/pr19609-1e.d: Likewise.
	* testsuite/ld-i386/pr19609-1f.d: Likewise.
	* testsuite/ld-i386/pr19609-1g.d: Likewise.
	* testsuite/ld-i386/pr19609-1h.d: Likewise.
	* testsuite/ld-i386/pr19609-1i.d: Likewise.
	* testsuite/ld-i386/pr19609-2.s: Likewise.
	* testsuite/ld-i386/pr19609-2a.d: Likewise.
	* testsuite/ld-i386/pr19609-2b.d: Likewise.
	* testsuite/ld-i386/pr19609-2c.d: Likewise.
	* testsuite/ld-i386/undefweak.s: Likewise.
	* testsuite/ld-i386/undefweaka.d: Likewise.
	* testsuite/ld-i386/undefweakb.d: Likewise.
	* testsuite/ld-x86-64/pr13082-3c.d: Likewise.
	* testsuite/ld-x86-64/pr13082-3d.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1.s: Likewise.
	* testsuite/ld-x86-64/pr19609-1a.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1b.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1c.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1d.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1e.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1f.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1g.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1h.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1i.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1j.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1k.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1l.d: Likewise.
	* testsuite/ld-x86-64/pr19609-1m.d: Likewise.
	* testsuite/ld-x86-64/pr19609-2.s: Likewise.
	* testsuite/ld-x86-64/pr19609-2a.d: Likewise.
	* testsuite/ld-x86-64/pr19609-2b.d: Likewise.
	* testsuite/ld-x86-64/pr19609-2c.d: Likewise.
	* testsuite/ld-x86-64/pr19609-2d.d: Likewise.
	* testsuite/ld-x86-64/pr19609-3.s: Likewise.
	* testsuite/ld-x86-64/pr19609-3a.d: Likewise.
	* testsuite/ld-x86-64/pr19609-3b.d: Likewise.
	* testsuite/ld-x86-64/pr19609-4.s: Likewise.
	* testsuite/ld-x86-64/pr19609-4a.d: Likewise.
	* testsuite/ld-x86-64/pr19609-4b.d: Likewise.
	* testsuite/ld-x86-64/pr19609-4c.d: Likewise.
	* testsuite/ld-x86-64/pr19609-4d.d: Likewise.
	* testsuite/ld-x86-64/pr19609-4e.d: Likewise.
	* testsuite/ld-x86-64/pr19609-5.s: Likewise.
	* testsuite/ld-x86-64/pr19609-5a.d: Likewise.
	* testsuite/ld-x86-64/pr19609-5b.d: Likewise.
	* testsuite/ld-x86-64/pr19609-5c.d: Likewise.
	* testsuite/ld-x86-64/pr19609-5d.d: Likewise.
	* testsuite/ld-x86-64/pr19609-5e.d: Likewise.
	* testsuite/ld-x86-64/pr19609-6.s: Likewise.
	* testsuite/ld-x86-64/pr19609-6a.d: Likewise.
	* testsuite/ld-x86-64/pr19609-6b.d: Likewise.
	* testsuite/ld-x86-64/pr19609-6c.d: Likewise.
	* testsuite/ld-x86-64/pr19609-6d.d: Likewise.
	* testsuite/ld-x86-64/pr19609-7.s: Likewise.
	* testsuite/ld-x86-64/pr19609-7a.d: Likewise.
	* testsuite/ld-x86-64/pr19609-7b.d: Likewise.
	* testsuite/ld-x86-64/pr19609-7c.d: Likewise.
	* testsuite/ld-x86-64/pr19609-7d.d: Likewise.
	* testsuite/ld-i386/i386.exp: Run undefweak tests and tests for
	PR ld/19609.
	* testsuite/ld-x86-64/x86-64.exp: Run pr13082-3c, pr13082-3d
	and tests for PR ld/19609.
2016-02-26 09:39:24 -08:00
..
binutils.exp Copyright update for binutils 2016-01-01 23:00:01 +10:30
dummy.c Check incompatible existing default symbol definition 2014-01-21 15:42:51 -08:00
ifunc-1-local-x86.d Update IFUNC tests for x32 2016-02-17 13:05:06 -08:00
ifunc-1-local-x86.s bfd/ 2009-06-14 01:39:46 +00:00
ifunc-1-x86.d Update IFUNC tests for x32 2016-02-17 13:05:06 -08:00
ifunc-1-x86.s
ifunc-2-i386.d
ifunc-2-i386.s
ifunc-2-local-i386.d bfd/ 2009-06-14 01:39:46 +00:00
ifunc-2-local-i386.s bfd/ 2009-06-14 01:39:46 +00:00
ifunc-2-local-x86-64.d [x86-64] Omit dynamic sections symbols 2016-02-17 11:19:04 -08:00
ifunc-2-local-x86-64.s bfd/ 2009-06-14 01:39:46 +00:00
ifunc-2-x86-64.d [x86-64] Omit dynamic sections symbols 2016-02-17 11:19:04 -08:00
ifunc-2-x86-64.s
ifunc-3-x86.s
ifunc-3a-x86.d Update IFUNC tests for x32 2016-02-17 13:05:06 -08:00
ifunc-3b-x86.d
ifunc-4-local-x86.d bfd/ 2009-06-14 01:39:46 +00:00
ifunc-4-local-x86.s bfd/ 2009-06-14 01:39:46 +00:00
ifunc-4-x86.d
ifunc-4-x86.s
ifunc-4a-x86.d Don't return on STT_GNU_IFUNC symbol when stripping. 2009-11-09 14:37:16 +00:00
ifunc-5-i386.s
ifunc-5-local-i386.s bfd/ 2009-06-14 01:39:46 +00:00
ifunc-5-local-x86-64.s bfd/ 2009-06-14 01:39:46 +00:00
ifunc-5-x86-64.s
ifunc-5a-i386.d bfd/ 2009-06-02 17:31:42 +00:00
ifunc-5a-local-i386.d bfd/ 2009-06-14 01:39:46 +00:00
ifunc-5a-local-x86-64.d bfd/ 2009-06-14 01:39:46 +00:00
ifunc-5a-x86-64.d 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-5b-i386.d bfd/ 2009-06-02 17:31:42 +00:00
ifunc-5b-local-i386.d bfd/ 2009-06-14 01:39:46 +00:00
ifunc-5b-local-x86-64.d bfd/ 2009-06-14 01:39:46 +00:00
ifunc-5b-x86-64.d 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-5r-local-i386.d bfd/ 2009-07-16 14:23:12 +00:00
ifunc-5r-local-x86-64.d Add -mrelax-relocations= to x86 assembler 2016-02-03 08:25:15 -08:00
ifunc-6-i386.s bfd/ 2009-06-02 17:31:42 +00:00
ifunc-6-x86-64.s bfd/ 2009-06-02 17:31:42 +00:00
ifunc-6a-i386.d bfd/ 2009-06-02 17:31:42 +00:00
ifunc-6a-x86-64.d 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-6b-i386.d bfd/ 2009-06-02 17:31:42 +00:00
ifunc-6b-x86-64.d 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-7-i386.s bfd/ 2009-06-02 17:31:42 +00:00
ifunc-7-x86-64.s bfd/ 2009-06-02 17:31:42 +00:00
ifunc-7a-i386.d bfd/ 2009-06-02 17:31:42 +00:00
ifunc-7a-x86-64.d 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-7b-i386.d bfd/ 2009-06-02 17:31:42 +00:00
ifunc-7b-x86-64.d 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-8-i386.d 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-8-x86-64.d 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-8a-i386.s 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-8a-x86-64.s 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-8b-i386.s 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-8b-x86-64.s 2009-06-03 H.J. Lu <hongjiu.lu@intel.com> 2009-06-03 17:32:02 +00:00
ifunc-9-x86.d 2009-06-15 H.J. Lu <hongjiu.lu@intel.com> 2009-06-15 13:28:56 +00:00
ifunc-9-x86.s bfd/ 2009-06-14 22:13:30 +00:00
ifunc-10-i386.d Support garbage collection against STT_GNU_IFUNC symbols. 2010-07-13 16:59:14 +00:00
ifunc-10-i386.s Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-10-x86-64.d Support garbage collection against STT_GNU_IFUNC symbols. 2010-07-13 16:59:14 +00:00
ifunc-10-x86-64.s Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-11-i386.d Support garbage collection against STT_GNU_IFUNC symbols. 2010-07-13 16:59:14 +00:00
ifunc-11-i386.s Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-11-x86-64.d Support garbage collection against STT_GNU_IFUNC symbols. 2010-07-13 16:59:14 +00:00
ifunc-11-x86-64.s Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-12-i386.d Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-12-i386.s Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-12-x86-64.d Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-12-x86-64.s Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-13-i386.d Convert mov to lea in size_dynamic_sections 2012-08-31 20:41:41 +00:00
ifunc-13-x86-64.d Use .got.plt for IFUNC symbols if there are no GOT relocations. 2011-09-12 18:17:36 +00:00
ifunc-13a-i386.s * read.c (read_symbol_name): New function. Reads a symbol names. 2012-05-28 14:20:19 +00:00
ifunc-13a-x86-64.s Add missing "foo" after ".global" 2012-05-31 17:16:54 +00:00
ifunc-13b-i386.s Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-13b-x86-64.s Handle STT_GNU_IFUNC symols when building shared library. 2011-01-06 18:45:05 +00:00
ifunc-14a-i386.d Check local IFUNC calls 2012-12-13 21:07:16 +00:00
ifunc-14a-x86-64.d Check local IFUNC calls 2012-12-13 21:07:16 +00:00
ifunc-14a.s Skip local IFUNC symbols when checking dynamic relocs in read-only sections. 2011-04-21 22:25:39 +00:00
ifunc-14b-i386.d Check local IFUNC calls 2012-12-13 21:07:16 +00:00
ifunc-14b-x86-64.d Check local IFUNC calls 2012-12-13 21:07:16 +00:00
ifunc-14b.s Skip local IFUNC symbols when checking dynamic relocs in read-only sections. 2011-04-21 22:25:39 +00:00
ifunc-14c-i386.d Check local IFUNC calls 2012-12-13 21:07:16 +00:00
ifunc-14c-x86-64.d Check local IFUNC calls 2012-12-13 21:07:16 +00:00
ifunc-14c.s Properly adjust h->plt.refcount 2012-12-21 18:15:22 +00:00
ifunc-14d-i386.d Check local IFUNC calls 2012-12-13 21:07:16 +00:00
ifunc-14d-x86-64.d Check local IFUNC calls 2012-12-13 21:07:16 +00:00
ifunc-14e-i386.d Properly adjust h->plt.refcount 2012-12-21 18:15:22 +00:00
ifunc-14e-x86-64.d Properly adjust h->plt.refcount 2012-12-21 18:15:22 +00:00
ifunc-14f-i386.d Properly adjust h->plt.refcount 2012-12-21 18:15:22 +00:00
ifunc-14f-x86-64.d Properly adjust h->plt.refcount 2012-12-21 18:15:22 +00:00
ifunc-15-i386.d Use .got.plt for IFUNC symbols if there are no GOT relocations. 2011-09-12 18:17:36 +00:00
ifunc-15-i386.s * read.c (read_symbol_name): New function. Reads a symbol names. 2012-05-28 14:20:19 +00:00
ifunc-15-x86-64.d Use .got.plt for IFUNC symbols if there are no GOT relocations. 2011-09-12 18:17:36 +00:00
ifunc-15-x86-64.s Add missing "foo" after ".global" 2012-05-31 17:16:54 +00:00
ifunc-16-i386.d Put IRELATIVE relocations after JUMP_SLOT. 2011-10-21 15:13:37 +00:00
ifunc-16-x86-64.d Put IRELATIVE relocations after JUMP_SLOT. 2011-10-21 15:13:37 +00:00
ifunc-16-x86.s Put IRELATIVE relocations after JUMP_SLOT. 2011-10-21 15:13:37 +00:00
ifunc-17a-i386.d Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-17a-x86-64.d Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-17a.s Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-17b-i386.d Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-17b-x86-64.d Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-17b.s Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-18a-i386.d Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-18a-x86-64.d Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-18a.s Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-18b-i386.d Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-18b-x86-64.d Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-18b.s Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-19a-i386.d Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-19a-x86-64.d Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-19a.s Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-19b-i386.d Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-19b-x86-64.d Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-19b.s Also check local IFUNC references 2012-12-16 20:31:08 +00:00
ifunc-20-i386.d Check regular reference without non-GOT reference 2013-04-15 21:16:18 +00:00
ifunc-20-x86-64.d Check regular reference without non-GOT reference 2013-04-15 21:16:18 +00:00
ifunc-20.s Check regular reference without non-GOT reference 2013-04-15 21:16:18 +00:00
ifunc-21-i386.d Optimize x86 GOT32X/GOTPCRELX relocations 2016-02-26 09:39:24 -08:00
ifunc-21-i386.s Add ifunc tests for call, jmp, add, test 2015-09-03 04:03:13 -07:00
ifunc-21-x86-64.d Optimize x86 GOT32X/GOTPCRELX relocations 2016-02-26 09:39:24 -08:00
ifunc-21-x86-64.s Add ifunc tests for call, jmp, add, test 2015-09-03 04:03:13 -07:00
ifunc-22-i386.d Optimize x86 GOT32X/GOTPCRELX relocations 2016-02-26 09:39:24 -08:00
ifunc-22-i386.s Add ifunc tests for call, jmp, add, test 2015-09-03 04:03:13 -07:00
ifunc-22-x86-64.d Optimize x86 GOT32X/GOTPCRELX relocations 2016-02-26 09:39:24 -08:00
ifunc-22-x86-64.s Add ifunc tests for call, jmp, add, test 2015-09-03 04:03:13 -07:00
ifunc-common-1.out Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-common-1a.c Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-common-1b.c Properly handle common symbol and weak function 2012-09-19 00:53:30 +00:00
ifunc-lib.c Add ifunc-main IFUNC tests 2014-11-20 10:49:46 -08:00
ifunc-main.c Always load function pointer into a stack variable 2014-11-20 11:29:45 -08:00
ifunc-main.out Add ifunc-main IFUNC tests 2014-11-20 10:49:46 -08:00
ifunc.exp Copyright update for binutils 2016-01-01 23:00:01 +10:30
lib.c
pr16467.out Check incompatible existing default symbol definition 2014-01-21 15:42:51 -08:00
pr16467a.c Check incompatible existing default symbol definition 2014-01-21 15:42:51 -08:00
pr16467a.map Check incompatible existing default symbol definition 2014-01-21 15:42:51 -08:00
pr16467b.c Check incompatible existing default symbol definition 2014-01-21 15:42:51 -08:00
pr16467b.map Check incompatible existing default symbol definition 2014-01-21 15:42:51 -08:00
pr16467c.c Check incompatible existing default symbol definition 2014-01-21 15:42:51 -08:00
pr17154-i386.d Properly match PLT entry against .got.plt relocation 2014-07-16 10:57:49 -07:00
pr17154-x86-64.d [x86-64] Omit dynamic sections symbols 2016-02-17 11:19:04 -08:00
pr17154-x86.s Properly match PLT entry against .got.plt relocation 2014-07-16 10:57:49 -07:00
pr18808.out Skip IFUNC relocations in debug sections 2015-08-11 12:59:11 -07:00
pr18808a.c Skip IFUNC relocations in debug sections 2015-08-11 12:59:11 -07:00
pr18808b.c Skip IFUNC relocations in debug sections 2015-08-11 12:59:11 -07:00
pr18841.out Return reloc_class_ifunc for reloc against IFUNC 2015-08-18 09:50:08 -07:00
pr18841a.c Return reloc_class_ifunc for reloc against IFUNC 2015-08-18 09:50:08 -07:00
pr18841b.c Return reloc_class_ifunc for reloc against IFUNC 2015-08-18 09:50:08 -07:00
pr18841c.c Add another test for PR ld/18841 2015-08-18 10:43:47 -07:00
prog.c
test-1.c bfd/ 2009-07-21 21:37:26 +00:00
test-2.c bfd/ 2009-07-21 21:37:26 +00:00