Fix sparc TLS call relaxation when the delay slot sets up %o0.
authorDavid S. Miller <davem@redhat.com>
Wed, 19 Oct 2011 00:32:25 +0000 (00:32 +0000)
committerDavid S. Miller <davem@redhat.com>
Wed, 19 Oct 2011 00:32:25 +0000 (00:32 +0000)
commitabd242a90836b535b2f98be634e16c70012a3c5d
treecc8a899c08c32ce0693497c6fc2f96264706d761
parent01b701aae6a81fc07a867fc3746587000aaa8c50
Fix sparc TLS call relaxation when the delay slot sets up %o0.

bfd/

PR binutils/13301
* elfxx-sparc.c (sparc_elf_find_reloc_at_ofs): New function.
(_bfd_sparc_elf_relocate_section): Always move the __tls_get_addr
call delay slot instruction forward 4 bytes when performing
relaxation.

gold/

PR binutils/13301
* sparc.cc (Target_sparc::Relocate::reloc_adjust_addr_): New
member to track relocation locations that have moved during TLS
reloc optimizations.
(Target_sparc::Relocate::Relocate): Initialize to NULL.
(Target_sparc::Relocate::relocate): Adjust view down by 4
bytes if it matches reloc_adjust_addr_.
(Target_sparc::Relocate::relocate_tls): Always move the
__tls_get_addr call delay slot instruction forward 4 bytes when
performing relaxation.

ld/testsuite/

* ld-sparc/tlssunbin32.dd: Update for TLS call relaxation fix
for PR 13301.
* ld-sparc/tlssunbin64.dd: Likewise.
* ld-sparc/tlssunpic32.dd: Likewise.
* ld-sparc/tlssunpic64.dd: Likewise.
bfd/ChangeLog
bfd/elfxx-sparc.c
gold/ChangeLog
gold/sparc.cc
ld/testsuite/ChangeLog
ld/testsuite/ld-sparc/tlssunbin32.dd
ld/testsuite/ld-sparc/tlssunbin64.dd
ld/testsuite/ld-sparc/tlssunpic32.dd
ld/testsuite/ld-sparc/tlssunpic64.dd