x86: Don't set eh->local_ref to 1 for linker defined symbols
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 18 May 2018 13:43:19 +0000 (06:43 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 18 May 2018 13:43:34 +0000 (06:43 -0700)
commit011b32fd4270fb7111ee1f63695ccd44562ee7df
tree110abd5acda6059b6296fa3ba26bfa65543ce9de
parent4bba0fb1c6d391a217c25e44398a7e1c7090155f
x86: Don't set eh->local_ref to 1 for linker defined symbols

Since symbols created by HIDDEN and PROVIDE_HIDDEN assignments in
linker script may be marked as defined, but not hidden, we can't
set eh->local_ref to 1 in _bfd_x86_elf_link_symbol_references_local.

Also R_386_GOT32X should be handled as just like R_386_GOT32 when
relocating a section.  The input R_386_GOT32X relocations, which
can be relaxed, should have been converted to R_386_PC32, R_386_32
or R_386_GOTOFF.

bfd/

PR ld/23189
* elf32-i386.c (elf_i386_relocate_section): Handle R_386_GOT32X
like R_386_GOT32.
* elfxx-x86.c (_bfd_x86_elf_link_symbol_references_local): Don't
set eh->local_ref to 1 for linker defined symbols.

ld/

PR ld/23189
* testsuite/ld-i386/i386.exp: Run pr23189.
* testsuite/ld-x86-64/x86-64.exp: Likewise.
* testsuite/ld-i386/pr23189.d: New file.
* testsuite/ld-i386/pr23189.s: Likewise.
* testsuite/ld-i386/pr23189.t: Likewise.
* testsuite/ld-x86-64/pr23189.d: Likewise.
* testsuite/ld-x86-64/pr23189.s: Likewise.
* testsuite/ld-x86-64/pr23189.t: Likewise.
12 files changed:
bfd/ChangeLog
bfd/elf32-i386.c
bfd/elfxx-x86.c
ld/ChangeLog
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/pr23189.d [new file with mode: 0644]
ld/testsuite/ld-i386/pr23189.s [new file with mode: 0644]
ld/testsuite/ld-i386/pr23189.t [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23189.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23189.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23189.t [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp