[binutils-gdb] Don't convert GOTPCREL relocation against large section

H.J.Lu hjl@sourceware.org
Fri May 13 18:08:00 GMT 2016


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=2168b2688ae343a61c467450068503295a5e3deb

commit 2168b2688ae343a61c467450068503295a5e3deb
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri May 13 10:59:32 2016 -0700

    Don't convert GOTPCREL relocation against large section
    
    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:
---
 bfd/ChangeLog                      |  8 +++++++-
 bfd/elf64-x86-64.c                 |  5 +++++
 ld/ChangeLog                       |  9 +++++++++
 ld/testsuite/ld-x86-64/pr20093-1.d | 11 +++++++++++
 ld/testsuite/ld-x86-64/pr20093-1.s | 11 +++++++++++
 ld/testsuite/ld-x86-64/pr20093-2.d | 11 +++++++++++
 ld/testsuite/ld-x86-64/pr20093-2.s |  9 +++++++++
 ld/testsuite/ld-x86-64/x86-64.exp  |  2 ++
 8 files changed, 65 insertions(+), 1 deletion(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index f13c248..9583ebd 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,8 +1,14 @@
+2016-05-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/20093
+	* elf64-x86-64.c (elf_x86_64_convert_load_reloc): Don't convert
+	GOTPCREL relocation against large section.
+
 2016-05-13  Alan Modra  <amodra@gmail.com>
 
 	* elf-m10300.c (_bfd_mn10300_elf_finish_dynamic_sections): Use
 	linker dynamic sections in calculating size and address of
-	* dynamic tags rather than using output sections.  Remove asserts.
+	dynamic tags rather than using output sections.  Remove asserts.
 	* elf32-arm.c (elf32_arm_finish_dynamic_sections): Likewise.
 	* elf32-cr16.c (_bfd_cr16_elf_finish_dynamic_sections): Likewise.
 	* elf32-cris.c (elf_cris_finish_dynamic_sections): Likewise.
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 0bcd59d..9fc884e 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -1806,6 +1806,11 @@ elf_x86_64_convert_load_reloc (bfd *abfd, asection *sec,
 	return TRUE;
     }
 
+  /* Don't convert GOTPCREL relocation against large section.  */
+  if (elf_section_data (tsec) !=  NULL
+      && (elf_section_flags (tsec) & SHF_X86_64_LARGE) != 0)
+    return TRUE;
+
   /* We can only estimate relocation overflow for R_X86_64_PC32.  */
   if (!to_reloc_pc32)
     goto convert;
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 6587105..13f8c0b 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2016-05-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	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-13  Alan Modra  <amodra@gmail.com>
 
 	* testsuite/ld-arm/arm-elf.exp: Adjust for arm-no-rel-plt now passing.
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 0000000..de81443
--- /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 0000000..c86a21e
--- /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 0000000..de81443
--- /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 0000000..cfbe9c2
--- /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 d3990d0..3f4d737 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -267,6 +267,8 @@ run_dump_test "pr19807-2c"
 run_dump_test "pr19807-2d"
 run_dump_test "pr19807-2e"
 run_dump_test "pr19969"
+run_dump_test "pr20093-1"
+run_dump_test "pr20093-2"
 
 if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
     return



More information about the Binutils-cvs mailing list