]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit - bfd/elf64-x86-64.c
Check GOTOFF reloc against protected data on x86
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 10 Apr 2015 21:02:23 +0000 (14:02 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 10 Apr 2015 21:02:23 +0000 (14:02 -0700)
commit3d9499950a94df8577fa01ba98ec0d58f07fd9c0
tree4ec8ffff58a0fa7867665e53f261b04d9cc4d9c0
parent9ee417720b2f25c56a9738569b63f686cbc8584f
Check GOTOFF reloc against protected data on x86

R_386_GOTOFF/R_X86_64_GOTOFF64 relocation shouldn't be used against
protected data symbol on x86 since with copy relocation, address of
protected data defined in the shared library may be external.

This patch will break building shared libraries with protected data
symbols using GCCs older than GCC 5 without the bug fix for

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248

GCC backport request should be made in the GCC bug report above.

bfd/

PR ld/pr17709
* elf32-i386.c (elf_i386_relocate_section): Also check R_386_GOTOFF
against protected data symbol when building shared library.
* elf64-x86-64.c (elf_x86_64_relocate_section): Also check
R_X86_64_GOTOFF64 against protected data symbol when building
shared library.

ld/testsuite/

PR ld/pr17709
* ld-i386/protected6.d: New file.
* ld-i386/protected6.s: Likewise.
* ld-x86-64/protected6.d: Likewise.
* ld-x86-64/protected6.s: Likewise.
* ld-x86-64/protected7.d: Likewise.
* ld-x86-64/protected7.s: Likewise.
* ld-x86-64/protected7a.d: Likewise.
* ld-x86-64/protected7b.d: Likewise.
13 files changed:
bfd/ChangeLog
bfd/elf32-i386.c
bfd/elf64-x86-64.c
ld/testsuite/ChangeLog
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/protected6.d [new file with mode: 0644]
ld/testsuite/ld-i386/protected6.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/protected6.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/protected6.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/protected7.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/protected7a.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/protected7b.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp