]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit - bfd/elf64-x86-64.c
Check run-time R_X86_64_32 relocation overflow
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 20 Apr 2016 18:10:21 +0000 (11:10 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 20 Apr 2016 18:10:38 +0000 (11:10 -0700)
commit338c190a92871c063847caef51bdc066372d4550
treede16361f5e3786665f3e4d55473860224f784656
parent6c739336e5aadd6670909059fba889f50caa9cea
Check run-time R_X86_64_32 relocation overflow

Since elf_x86_64_check_relocs is called after opening all input files,
we can detect dynamic R_X86_64_32 relocation overflow there.

bfd/

PR ld/19969
* elf64-x86-64.c (check_relocs_failed): New.
(elf_x86_64_need_pic): Moved before elf_x86_64_check_relocs.
Support relocation agaist local symbol.  Set check_relocs_failed.
(elf_x86_64_check_relocs): Use elf_x86_64_need_pic.  Check
R_X86_64_32 relocation overflow.
(elf_x86_64_relocate_section): Skip if check_relocs failed.
Update one elf_x86_64_need_pic and remove one elf_x86_64_need_pic.

ld/

PR ld/19969
* testsuite/ld-x86-64/pr19969.d: New file.
* testsuite/ld-x86-64/pr19969a.S: Likewise.
* testsuite/ld-x86-64/pr19969b.S: Likewise.
* testsuite/ld-x86-64/x86-64.exp: Run pr19969 tests.
bfd/ChangeLog
bfd/elf64-x86-64.c
ld/ChangeLog
ld/testsuite/ld-x86-64/pr19969.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr19969a.S [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr19969b.S [new file with mode: 0644]
ld/testsuite/ld-x86-64/x86-64.exp