02e2aef89b
Linker can't optimize R_386_GOT32 and R_386_GOT32X relocations if addend isn't 0. It isn't valid to convert movl foo@GOT+1(%ecx), %eax to leal foo@GOTOFF+1(%ecx), %eax nor to convert movq foo@GOTPCREL+1(%rip), %rax to leaq foo(%rip), %rax for x86-64. We should check if addend is 0 before optimizing R_386_GOT32 and R_386_GOT32X relocations. Testcases are added for i386 and x86-64. bfd/ * elf32-i386.c (elf_i386_convert_load): Skip if addend isn't 0. (elf_i386_relocate_section): Skip R_386_GOT32X optimization if addend isn't 0. ld/testsuite/ * ld-i386/i386.exp: Run mov2a, mov2b and mov3. * ld-i386/mov2.s: New file. * ld-i386/mov2a.d: Likewise. * ld-i386/mov2b.d: Likewise. * ld-i386/mov3.d: Likewise. * ld-i386/mov3.s: Likewise. * ld-x86-64/mov2.s: Likewise. * ld-x86-64/mov2a.d: Likewise. * ld-x86-64/mov2b.d: Likewise. * ld-x86-64/mov2c.d: Likewise. * ld-x86-64/mov2d.d: Likewise. * ld-x86-64/x86-64.exp: Run mov2a, mov2b, mov2c and mov2d. |
||
---|---|---|
.. | ||
config | ||
ld-aarch64 | ||
ld-alpha | ||
ld-arm | ||
ld-auto-import | ||
ld-avr | ||
ld-bootstrap | ||
ld-cdtest | ||
ld-checks | ||
ld-cris | ||
ld-crx | ||
ld-cygwin | ||
ld-d10v | ||
ld-discard | ||
ld-elf | ||
ld-elfcomm | ||
ld-elfvers | ||
ld-elfvsb | ||
ld-elfweak | ||
ld-fastcall | ||
ld-frv | ||
ld-gc | ||
ld-h8300 | ||
ld-i386 | ||
ld-ia64 | ||
ld-ifunc | ||
ld-libs | ||
ld-linkonce | ||
ld-m68hc11 | ||
ld-m68k | ||
ld-mep | ||
ld-metag | ||
ld-mips-elf | ||
ld-misc | ||
ld-mmix | ||
ld-mn10300 | ||
ld-nds32 | ||
ld-nios2 | ||
ld-pe | ||
ld-pie | ||
ld-plugin | ||
ld-powerpc | ||
ld-s390 | ||
ld-scripts | ||
ld-selective | ||
ld-sh | ||
ld-shared | ||
ld-size | ||
ld-sparc | ||
ld-spu | ||
ld-srec | ||
ld-tic6x | ||
ld-tilegx | ||
ld-tilepro | ||
ld-undefined | ||
ld-unique | ||
ld-v850 | ||
ld-vax-elf | ||
ld-versados | ||
ld-visium | ||
ld-vxworks | ||
ld-x86-64 | ||
ld-xc16x | ||
ld-xstormy16 | ||
ld-xtensa | ||
lib | ||
ChangeLog | ||
ChangeLog-2004 | ||
ChangeLog-2005 | ||
ChangeLog-2006 | ||
ChangeLog-2007 | ||
ChangeLog-2008 | ||
ChangeLog-2009 | ||
ChangeLog-2010 | ||
ChangeLog-2011 | ||
ChangeLog-2012 | ||
ChangeLog-2013 | ||
ChangeLog-2014 | ||
ChangeLog-9303 |