binutils-gdb/ld/testsuite
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
..
config Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-aarch64 Revert "ABS32" 2016-02-24 15:01:07 +00:00
ld-alpha Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-arm Remove support for creating ARM NOREAD sections. 2016-02-04 11:57:57 +00:00
ld-auto-import Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-avr Copyright update for binutils 2016-01-01 23:00:01 +10: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 Copyright update for binutils 2016-01-01 23:00:01 +10:30
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 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-elf Properly implement STT_COMMON 2016-02-26 05:01:34 -08:00
ld-elfcomm Properly implement STT_COMMON 2016-02-26 05:01:34 -08:00
ld-elfvers Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-elfvsb Copyright update for binutils 2016-01-01 23:00:01 +10:30
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 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-h8300 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-i386 Optimize x86 GOT32X/GOTPCRELX relocations 2016-02-26 09:39:24 -08:00
ld-ia64 Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-ifunc Optimize x86 GOT32X/GOTPCRELX relocations 2016-02-26 09:39:24 -08: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 Make linker assigned symbol dynamic only for shared object 2016-02-23 05:19:03 -08: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
ld-pe Fix linker testsuite failures for arm-pe targets. 2016-01-20 15:41:06 +00:00
ld-pie Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-plugin Skip linker plugin tests if the linker has not been configured to support plugins. 2016-01-18 11:23:44 +00:00
ld-powerpc Copyright update for binutils 2016-01-01 23:00:01 +10:30
ld-s390 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-scripts Fix linker testsuite failures for arm-pe targets. 2016-01-20 15:41:06 +00:00
ld-selective Copyright update for binutils 2016-01-01 23:00:01 +10:30
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 Copyright update for binutils 2016-01-01 23:00:01 +10:30
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 Copyright update for binutils 2016-01-01 23:00:01 +10:30
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 Optimize x86 GOT32X/GOTPCRELX relocations 2016-02-26 09:39:24 -08: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
lib m68hc11/12 and xgate config.sub weirdness 2016-01-17 12:13:43 +10:30
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012
ChangeLog-2013
ChangeLog-2014
ChangeLog-2015 binutils ChangeLog rotation 2016-01-01 22:59:17 +10:30
ChangeLog-9303