x86-64: Check relocations with -z nocopyreloc
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 24 Aug 2017 13:34:19 +0000 (06:34 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 24 Aug 2017 13:34:38 +0000 (06:34 -0700)
commit7073b5b9edc9e06974bd733b7e4b3845d6d6f690
treee732f58dcdb8352c0fd8f288e529993ece2fd312
parent5b5f4e6f8cd250e07ec98278f7223e57b3d3bb0c
x86-64: Check relocations with -z nocopyreloc

On x86-64, when -z nocopyreloc is used to build executable, relocations
may overflow at run-time or may not be resolved without PIC.  This patch
checks these conditions and issues an error with suggestion for -fPIC.

bfd/

PR ld/22001
* elf64-x86-64.c (elf_x86_64_relocate_section): Check for
R_X86_64_PC32 relocation run-time overflow and unresolvable
R_X86_64_32S relocation with -z nocopyreloc.

ld/

PR ld/22001
* testsuite/ld-i386/i386.exp: Run -z nocopyreloc tests.
* testsuite/ld-x86-64/x86-64.exp: Likewise.
* ld/testsuite/ld-i386/pr22001-1a.c: New file.
* ld/testsuite/ld-i386/pr22001-1b.c: Likewise.
* ld/testsuite/ld-i386/pr22001-1c.S: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1a.c: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1a.err: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1b.c: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1b.err: Likewise.
* ld/testsuite/ld-x86-64/pr22001-1c.c: Likewise.
13 files changed:
bfd/ChangeLog
bfd/elf64-x86-64.c
ld/ChangeLog
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/pr22001-1a.c [new file with mode: 0644]
ld/testsuite/ld-i386/pr22001-1b.c [new file with mode: 0644]
ld/testsuite/ld-i386/pr22001-1c.S [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr22001-1a.c [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr22001-1a.err [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr22001-1b.c [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr22001-1b.err [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr22001-1c.c [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp