From: H.J. Lu Date: Fri, 13 May 2016 17:59:32 +0000 (-0700) Subject: Don't convert GOTPCREL relocation against large section X-Git-Tag: users/ARM/embedded-gdb-2_26-branch-2016q1~6^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=823a9c16b36df994998b6cace24469bcf84d6030;p=thirdparty%2Fbinutils-gdb.git Don't convert GOTPCREL relocation against large section Backport from master bfd/ PR ld/20093 * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Don't convert GOTPCREL relocation against large section. ld/ PR ld/20093 * testsuite/ld-x86-64/pr20093-1.d: New file. * testsuite/ld-x86-64/pr20093-1.s: Likewise. * testsuite/ld-x86-64/pr20093-2.d: Likewise. * testsuite/ld-x86-64/pr20093-2.s: Likewise. * testsuite/ld-x86-64/x86-64.exp: Run pr20093-1 and pr20093-2. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e6c147dbfb1..8fafc2326fa 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,14 @@ +2016-05-15 H.J. Lu + + Backport from master + 2016-05-13 H.J. Lu + + PR ld/20093 + * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Don't convert + GOTPCREL relocation against large section. + + * elflink.c (bfd_elf_final_link): Likewise. + 2016-05-11 Alan Modra PR 20060 diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 764adc039de..7261405eaf1 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -3154,6 +3154,11 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec, continue; } + /* Don't convert GOTPCREL relocation against large section. */ + if (elf_section_data (tsec) != NULL + && (elf_section_flags (tsec) & SHF_X86_64_LARGE) != 0) + continue; + if (tsec->sec_info_type == SEC_INFO_TYPE_MERGE) { /* At this stage in linking, no SEC_MERGE symbol has been diff --git a/ld/ChangeLog b/ld/ChangeLog index c78293b602c..f3e2721cd28 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,15 @@ +2016-05-15 H.J. Lu + + Backport from master + 2016-05-13 H.J. Lu + + PR ld/20093 + * testsuite/ld-x86-64/pr20093-1.d: New file. + * testsuite/ld-x86-64/pr20093-1.s: Likewise. + * testsuite/ld-x86-64/pr20093-2.d: Likewise. + * testsuite/ld-x86-64/pr20093-2.s: Likewise. + * testsuite/ld-x86-64/x86-64.exp: Run pr20093-1 and pr20093-2. + 2016-05-11 Alan Modra PR 20060 diff --git a/ld/testsuite/ld-x86-64/pr20093-1.d b/ld/testsuite/ld-x86-64/pr20093-1.d new file mode 100644 index 00000000000..de814430717 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr20093-1.d @@ -0,0 +1,11 @@ +#as: --64 +#ld: -pie -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr20093-1.s b/ld/testsuite/ld-x86-64/pr20093-1.s new file mode 100644 index 00000000000..c86a21e4017 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr20093-1.s @@ -0,0 +1,11 @@ + .section .lbss,"aw",@nobits +foo1: + .space 1073741824 + .space 1073741824 + .space 1073741824 + .text + .globl _start + .type _start, @function +_start: + movq foo1@GOTPCREL(%rip), %rax + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/pr20093-2.d b/ld/testsuite/ld-x86-64/pr20093-2.d new file mode 100644 index 00000000000..de814430717 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr20093-2.d @@ -0,0 +1,11 @@ +#as: --64 +#ld: -pie -melf_x86_64 +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: +[ ]*[a-f0-9]+: 48 8b 05 ([0-9a-f]{2} ){4} * mov 0x[a-f0-9]+\(%rip\),%rax # [a-f0-9]+ <_DYNAMIC\+0x[a-f0-9]+> diff --git a/ld/testsuite/ld-x86-64/pr20093-2.s b/ld/testsuite/ld-x86-64/pr20093-2.s new file mode 100644 index 00000000000..cfbe9c235dd --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr20093-2.s @@ -0,0 +1,9 @@ + .largecomm foo1,1073741824,32 + .largecomm foo2,1073741824,32 + .largecomm foo3,1073741824,32 + .text + .globl _start + .type _start, @function +_start: + movq foo1@GOTPCREL(%rip), %rax + .size _start, .-_start diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index 378c13feb2b..ac115316cba 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -247,6 +247,8 @@ run_dump_test "pr14215" run_dump_test "pr14207" run_dump_test "gotplt1" run_dump_test "pie1" +run_dump_test "pr20093-1" +run_dump_test "pr20093-2" if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} { return