]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
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>
Mon, 21 May 2018 15:23:51 +0000 (08:23 -0700)
commit19dd615652084b2bfd81a0497864e193608037a0
tree574bb3691e83785f0e8e115c4fcf93180d299118
parent06c665f86ca98a7d65af8c804cfd1ced2e3319a3
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.

(cherry picked from commit 011b32fd4270fb7111ee1f63695ccd44562ee7df)
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