aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-i386
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-02-05 08:38:16 -0800
committerH.J. Lu <hjl.tools@gmail.com>2018-02-05 08:38:16 -0800
commitcd04836359da82ae1dc67e5a05565536f4427b51 (patch)
treefc72f6593a58e26174caadbfe9515204901fb318 /ld/testsuite/ld-i386
parentb8df6ca79e69678a07d3216b9b2b552fce27cda8 (diff)
downloadgdb-cd04836359da82ae1dc67e5a05565536f4427b51.zip
gdb-cd04836359da82ae1dc67e5a05565536f4427b51.tar.gz
gdb-cd04836359da82ae1dc67e5a05565536f4427b51.tar.bz2
x86: Remove the unused _GLOBAL_OFFSET_TABLE_
Since _GLOBAL_OFFSET_TABLE_ may be referenced implicitly on x86, checking ref_regular_nonweak leaves the unused _GLOBAL_OFFSET_TABLE_ in output. This patch checks explicit GOT references instead. ld-i386/discarded1.s and ld-x86-64/discarded1.s are updated to avoid linker optimization which removes GOT references. bfd/ PR ld/22782 * elf32-i386.c (elf_i386_check_relocs): Set got_referenced if _GLOBAL_OFFSET_TABLE_ is referenced or GOT is needed to resolve undefined weak symbol to 0. * elf64-x86-64.c (elf_x86_64_check_relocs): Set got_referenced if _GLOBAL_OFFSET_TABLE_ is referenced. * elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Check got_referenced instead of ref_regular_nonweak. Remove the unused _GLOBAL_OFFSET_TABLE_ from symbol table. * elfxx-x86.h (elf_x86_link_hash_table): Add got_referenced. ld/ PR ld/22782 * testsuite/ld-i386/discarded1.s: Replace mov with div. * testsuite/ld-x86-64/discarded1.s: Likewise. * testsuite/ld-i386/i386.exp: Run pr22782. * testsuite/ld-i386/load1-nacl.d: Updated for removing _GLOBAL_OFFSET_TABLE_ from output. * testsuite/ld-i386/load1.d: Likewise. * testsuite/ld-x86-64/load1a-nacl.d: Likewise. * testsuite/ld-x86-64/load1a.d: Likewise. * testsuite/ld-x86-64/load1b-nacl.d: Likewise. * testsuite/ld-x86-64/load1b.d: Likewise. * testsuite/ld-i386/pr22782.d: New file. * testsuite/ld-i386/pr22782.s: Likewise. * testsuite/ld-x86-64/pr22782.s: Likewise. * testsuite/ld-x86-64/pr22782a.d: Likewise. * testsuite/ld-x86-64/pr22782b.d: Likewise. * testsuite/ld-x86-64/x86-64.exp: Run pr22782a and pr22782b.
Diffstat (limited to 'ld/testsuite/ld-i386')
-rw-r--r--ld/testsuite/ld-i386/discarded1.s2
-rw-r--r--ld/testsuite/ld-i386/i386.exp1
-rw-r--r--ld/testsuite/ld-i386/load1-nacl.d84
-rw-r--r--ld/testsuite/ld-i386/load1.d84
-rw-r--r--ld/testsuite/ld-i386/pr22782.d10
-rw-r--r--ld/testsuite/ld-i386/pr22782.s15
6 files changed, 111 insertions, 85 deletions
diff --git a/ld/testsuite/ld-i386/discarded1.s b/ld/testsuite/ld-i386/discarded1.s
index 9b20c87..21e5cb7 100644
--- a/ld/testsuite/ld-i386/discarded1.s
+++ b/ld/testsuite/ld-i386/discarded1.s
@@ -2,7 +2,7 @@
.globl _start
.type _start, @function
_start:
- movl x@GOT(%ecx), %eax
+ divl x@GOT(%ecx), %eax
.size _start, .-_start
.globl x
.data
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index c4fc545..e4ec07d 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -450,6 +450,7 @@ run_dump_test "pr22115-1b"
run_dump_test "pr22115-1c"
run_dump_test "pr22115-1d"
run_dump_test "pr22135"
+run_dump_test "pr22782"
if { !([istarget "i?86-*-linux*"]
|| [istarget "i?86-*-gnu*"]
diff --git a/ld/testsuite/ld-i386/load1-nacl.d b/ld/testsuite/ld-i386/load1-nacl.d
index 1dbba11..317d1c4 100644
--- a/ld/testsuite/ld-i386/load1-nacl.d
+++ b/ld/testsuite/ld-i386/load1-nacl.d
@@ -8,52 +8,52 @@
SYMBOL TABLE:
#...
-10030080 l O .data 0+1 bar
+10030074 l O .data 0+1 bar
#...
-10030081 g O .data 0+1 foo
+10030075 g O .data 0+1 foo
#...
Disassembly of section .text:
0+20000 <_start>:
-[ ]*[a-f0-9]+: c7 c0 80 00 03 10 mov \$0x10030080,%eax
-[ ]*[a-f0-9]+: 81 d0 80 00 03 10 adc \$0x10030080,%eax
-[ ]*[a-f0-9]+: 81 c3 80 00 03 10 add \$0x10030080,%ebx
-[ ]*[a-f0-9]+: 81 e1 80 00 03 10 and \$0x10030080,%ecx
-[ ]*[a-f0-9]+: 81 fa 80 00 03 10 cmp \$0x10030080,%edx
-[ ]*[a-f0-9]+: 81 cf 80 00 03 10 or \$0x10030080,%edi
-[ ]*[a-f0-9]+: 81 de 80 00 03 10 sbb \$0x10030080,%esi
-[ ]*[a-f0-9]+: 81 ed 80 00 03 10 sub \$0x10030080,%ebp
-[ ]*[a-f0-9]+: 81 f4 80 00 03 10 xor \$0x10030080,%esp
-[ ]*[a-f0-9]+: f7 c1 80 00 03 10 test \$0x10030080,%ecx
-[ ]*[a-f0-9]+: c7 c0 80 00 03 10 mov \$0x10030080,%eax
-[ ]*[a-f0-9]+: 81 d0 80 00 03 10 adc \$0x10030080,%eax
-[ ]*[a-f0-9]+: 81 c3 80 00 03 10 add \$0x10030080,%ebx
-[ ]*[a-f0-9]+: 81 e1 80 00 03 10 and \$0x10030080,%ecx
-[ ]*[a-f0-9]+: 81 fa 80 00 03 10 cmp \$0x10030080,%edx
-[ ]*[a-f0-9]+: 81 cf 80 00 03 10 or \$0x10030080,%edi
-[ ]*[a-f0-9]+: 81 de 80 00 03 10 sbb \$0x10030080,%esi
-[ ]*[a-f0-9]+: 81 ed 80 00 03 10 sub \$0x10030080,%ebp
-[ ]*[a-f0-9]+: 81 f4 80 00 03 10 xor \$0x10030080,%esp
-[ ]*[a-f0-9]+: f7 c1 80 00 03 10 test \$0x10030080,%ecx
-[ ]*[a-f0-9]+: c7 c0 81 00 03 10 mov \$0x10030081,%eax
-[ ]*[a-f0-9]+: 81 d0 81 00 03 10 adc \$0x10030081,%eax
-[ ]*[a-f0-9]+: 81 c3 81 00 03 10 add \$0x10030081,%ebx
-[ ]*[a-f0-9]+: 81 e1 81 00 03 10 and \$0x10030081,%ecx
-[ ]*[a-f0-9]+: 81 fa 81 00 03 10 cmp \$0x10030081,%edx
-[ ]*[a-f0-9]+: 81 cf 81 00 03 10 or \$0x10030081,%edi
-[ ]*[a-f0-9]+: 81 de 81 00 03 10 sbb \$0x10030081,%esi
-[ ]*[a-f0-9]+: 81 ed 81 00 03 10 sub \$0x10030081,%ebp
-[ ]*[a-f0-9]+: 81 f4 81 00 03 10 xor \$0x10030081,%esp
-[ ]*[a-f0-9]+: f7 c1 81 00 03 10 test \$0x10030081,%ecx
-[ ]*[a-f0-9]+: c7 c0 81 00 03 10 mov \$0x10030081,%eax
-[ ]*[a-f0-9]+: 81 d0 81 00 03 10 adc \$0x10030081,%eax
-[ ]*[a-f0-9]+: 81 c3 81 00 03 10 add \$0x10030081,%ebx
-[ ]*[a-f0-9]+: 81 e1 81 00 03 10 and \$0x10030081,%ecx
-[ ]*[a-f0-9]+: 81 fa 81 00 03 10 cmp \$0x10030081,%edx
-[ ]*[a-f0-9]+: 81 cf 81 00 03 10 or \$0x10030081,%edi
-[ ]*[a-f0-9]+: 81 de 81 00 03 10 sbb \$0x10030081,%esi
-[ ]*[a-f0-9]+: 81 ed 81 00 03 10 sub \$0x10030081,%ebp
-[ ]*[a-f0-9]+: 81 f4 81 00 03 10 xor \$0x10030081,%esp
-[ ]*[a-f0-9]+: f7 c1 81 00 03 10 test \$0x10030081,%ecx
+[ ]*[a-f0-9]+: c7 c0 74 00 03 10 mov \$0x10030074,%eax
+[ ]*[a-f0-9]+: 81 d0 74 00 03 10 adc \$0x10030074,%eax
+[ ]*[a-f0-9]+: 81 c3 74 00 03 10 add \$0x10030074,%ebx
+[ ]*[a-f0-9]+: 81 e1 74 00 03 10 and \$0x10030074,%ecx
+[ ]*[a-f0-9]+: 81 fa 74 00 03 10 cmp \$0x10030074,%edx
+[ ]*[a-f0-9]+: 81 cf 74 00 03 10 or \$0x10030074,%edi
+[ ]*[a-f0-9]+: 81 de 74 00 03 10 sbb \$0x10030074,%esi
+[ ]*[a-f0-9]+: 81 ed 74 00 03 10 sub \$0x10030074,%ebp
+[ ]*[a-f0-9]+: 81 f4 74 00 03 10 xor \$0x10030074,%esp
+[ ]*[a-f0-9]+: f7 c1 74 00 03 10 test \$0x10030074,%ecx
+[ ]*[a-f0-9]+: c7 c0 74 00 03 10 mov \$0x10030074,%eax
+[ ]*[a-f0-9]+: 81 d0 74 00 03 10 adc \$0x10030074,%eax
+[ ]*[a-f0-9]+: 81 c3 74 00 03 10 add \$0x10030074,%ebx
+[ ]*[a-f0-9]+: 81 e1 74 00 03 10 and \$0x10030074,%ecx
+[ ]*[a-f0-9]+: 81 fa 74 00 03 10 cmp \$0x10030074,%edx
+[ ]*[a-f0-9]+: 81 cf 74 00 03 10 or \$0x10030074,%edi
+[ ]*[a-f0-9]+: 81 de 74 00 03 10 sbb \$0x10030074,%esi
+[ ]*[a-f0-9]+: 81 ed 74 00 03 10 sub \$0x10030074,%ebp
+[ ]*[a-f0-9]+: 81 f4 74 00 03 10 xor \$0x10030074,%esp
+[ ]*[a-f0-9]+: f7 c1 74 00 03 10 test \$0x10030074,%ecx
+[ ]*[a-f0-9]+: c7 c0 75 00 03 10 mov \$0x10030075,%eax
+[ ]*[a-f0-9]+: 81 d0 75 00 03 10 adc \$0x10030075,%eax
+[ ]*[a-f0-9]+: 81 c3 75 00 03 10 add \$0x10030075,%ebx
+[ ]*[a-f0-9]+: 81 e1 75 00 03 10 and \$0x10030075,%ecx
+[ ]*[a-f0-9]+: 81 fa 75 00 03 10 cmp \$0x10030075,%edx
+[ ]*[a-f0-9]+: 81 cf 75 00 03 10 or \$0x10030075,%edi
+[ ]*[a-f0-9]+: 81 de 75 00 03 10 sbb \$0x10030075,%esi
+[ ]*[a-f0-9]+: 81 ed 75 00 03 10 sub \$0x10030075,%ebp
+[ ]*[a-f0-9]+: 81 f4 75 00 03 10 xor \$0x10030075,%esp
+[ ]*[a-f0-9]+: f7 c1 75 00 03 10 test \$0x10030075,%ecx
+[ ]*[a-f0-9]+: c7 c0 75 00 03 10 mov \$0x10030075,%eax
+[ ]*[a-f0-9]+: 81 d0 75 00 03 10 adc \$0x10030075,%eax
+[ ]*[a-f0-9]+: 81 c3 75 00 03 10 add \$0x10030075,%ebx
+[ ]*[a-f0-9]+: 81 e1 75 00 03 10 and \$0x10030075,%ecx
+[ ]*[a-f0-9]+: 81 fa 75 00 03 10 cmp \$0x10030075,%edx
+[ ]*[a-f0-9]+: 81 cf 75 00 03 10 or \$0x10030075,%edi
+[ ]*[a-f0-9]+: 81 de 75 00 03 10 sbb \$0x10030075,%esi
+[ ]*[a-f0-9]+: 81 ed 75 00 03 10 sub \$0x10030075,%ebp
+[ ]*[a-f0-9]+: 81 f4 75 00 03 10 xor \$0x10030075,%esp
+[ ]*[a-f0-9]+: f7 c1 75 00 03 10 test \$0x10030075,%ecx
#pass
diff --git a/ld/testsuite/ld-i386/load1.d b/ld/testsuite/ld-i386/load1.d
index 9c4aa8e..2e4957b 100644
--- a/ld/testsuite/ld-i386/load1.d
+++ b/ld/testsuite/ld-i386/load1.d
@@ -7,52 +7,52 @@
SYMBOL TABLE:
#...
-0+8049170 l O .data 0+1 bar
+0+8049164 l O .data 0+1 bar
#...
-0+8049171 g O .data 0+1 foo
+0+8049165 g O .data 0+1 foo
#...
Disassembly of section .text:
0+8048074 <_start>:
-[ ]*[a-f0-9]+: c7 c0 70 91 04 08 mov \$0x8049170,%eax
-[ ]*[a-f0-9]+: 81 d0 70 91 04 08 adc \$0x8049170,%eax
-[ ]*[a-f0-9]+: 81 c3 70 91 04 08 add \$0x8049170,%ebx
-[ ]*[a-f0-9]+: 81 e1 70 91 04 08 and \$0x8049170,%ecx
-[ ]*[a-f0-9]+: 81 fa 70 91 04 08 cmp \$0x8049170,%edx
-[ ]*[a-f0-9]+: 81 cf 70 91 04 08 or \$0x8049170,%edi
-[ ]*[a-f0-9]+: 81 de 70 91 04 08 sbb \$0x8049170,%esi
-[ ]*[a-f0-9]+: 81 ed 70 91 04 08 sub \$0x8049170,%ebp
-[ ]*[a-f0-9]+: 81 f4 70 91 04 08 xor \$0x8049170,%esp
-[ ]*[a-f0-9]+: f7 c1 70 91 04 08 test \$0x8049170,%ecx
-[ ]*[a-f0-9]+: c7 c0 70 91 04 08 mov \$0x8049170,%eax
-[ ]*[a-f0-9]+: 81 d0 70 91 04 08 adc \$0x8049170,%eax
-[ ]*[a-f0-9]+: 81 c3 70 91 04 08 add \$0x8049170,%ebx
-[ ]*[a-f0-9]+: 81 e1 70 91 04 08 and \$0x8049170,%ecx
-[ ]*[a-f0-9]+: 81 fa 70 91 04 08 cmp \$0x8049170,%edx
-[ ]*[a-f0-9]+: 81 cf 70 91 04 08 or \$0x8049170,%edi
-[ ]*[a-f0-9]+: 81 de 70 91 04 08 sbb \$0x8049170,%esi
-[ ]*[a-f0-9]+: 81 ed 70 91 04 08 sub \$0x8049170,%ebp
-[ ]*[a-f0-9]+: 81 f4 70 91 04 08 xor \$0x8049170,%esp
-[ ]*[a-f0-9]+: f7 c1 70 91 04 08 test \$0x8049170,%ecx
-[ ]*[a-f0-9]+: c7 c0 71 91 04 08 mov \$0x8049171,%eax
-[ ]*[a-f0-9]+: 81 d0 71 91 04 08 adc \$0x8049171,%eax
-[ ]*[a-f0-9]+: 81 c3 71 91 04 08 add \$0x8049171,%ebx
-[ ]*[a-f0-9]+: 81 e1 71 91 04 08 and \$0x8049171,%ecx
-[ ]*[a-f0-9]+: 81 fa 71 91 04 08 cmp \$0x8049171,%edx
-[ ]*[a-f0-9]+: 81 cf 71 91 04 08 or \$0x8049171,%edi
-[ ]*[a-f0-9]+: 81 de 71 91 04 08 sbb \$0x8049171,%esi
-[ ]*[a-f0-9]+: 81 ed 71 91 04 08 sub \$0x8049171,%ebp
-[ ]*[a-f0-9]+: 81 f4 71 91 04 08 xor \$0x8049171,%esp
-[ ]*[a-f0-9]+: f7 c1 71 91 04 08 test \$0x8049171,%ecx
-[ ]*[a-f0-9]+: c7 c0 71 91 04 08 mov \$0x8049171,%eax
-[ ]*[a-f0-9]+: 81 d0 71 91 04 08 adc \$0x8049171,%eax
-[ ]*[a-f0-9]+: 81 c3 71 91 04 08 add \$0x8049171,%ebx
-[ ]*[a-f0-9]+: 81 e1 71 91 04 08 and \$0x8049171,%ecx
-[ ]*[a-f0-9]+: 81 fa 71 91 04 08 cmp \$0x8049171,%edx
-[ ]*[a-f0-9]+: 81 cf 71 91 04 08 or \$0x8049171,%edi
-[ ]*[a-f0-9]+: 81 de 71 91 04 08 sbb \$0x8049171,%esi
-[ ]*[a-f0-9]+: 81 ed 71 91 04 08 sub \$0x8049171,%ebp
-[ ]*[a-f0-9]+: 81 f4 71 91 04 08 xor \$0x8049171,%esp
-[ ]*[a-f0-9]+: f7 c1 71 91 04 08 test \$0x8049171,%ecx
+[ ]*[a-f0-9]+: c7 c0 64 91 04 08 mov \$0x8049164,%eax
+[ ]*[a-f0-9]+: 81 d0 64 91 04 08 adc \$0x8049164,%eax
+[ ]*[a-f0-9]+: 81 c3 64 91 04 08 add \$0x8049164,%ebx
+[ ]*[a-f0-9]+: 81 e1 64 91 04 08 and \$0x8049164,%ecx
+[ ]*[a-f0-9]+: 81 fa 64 91 04 08 cmp \$0x8049164,%edx
+[ ]*[a-f0-9]+: 81 cf 64 91 04 08 or \$0x8049164,%edi
+[ ]*[a-f0-9]+: 81 de 64 91 04 08 sbb \$0x8049164,%esi
+[ ]*[a-f0-9]+: 81 ed 64 91 04 08 sub \$0x8049164,%ebp
+[ ]*[a-f0-9]+: 81 f4 64 91 04 08 xor \$0x8049164,%esp
+[ ]*[a-f0-9]+: f7 c1 64 91 04 08 test \$0x8049164,%ecx
+[ ]*[a-f0-9]+: c7 c0 64 91 04 08 mov \$0x8049164,%eax
+[ ]*[a-f0-9]+: 81 d0 64 91 04 08 adc \$0x8049164,%eax
+[ ]*[a-f0-9]+: 81 c3 64 91 04 08 add \$0x8049164,%ebx
+[ ]*[a-f0-9]+: 81 e1 64 91 04 08 and \$0x8049164,%ecx
+[ ]*[a-f0-9]+: 81 fa 64 91 04 08 cmp \$0x8049164,%edx
+[ ]*[a-f0-9]+: 81 cf 64 91 04 08 or \$0x8049164,%edi
+[ ]*[a-f0-9]+: 81 de 64 91 04 08 sbb \$0x8049164,%esi
+[ ]*[a-f0-9]+: 81 ed 64 91 04 08 sub \$0x8049164,%ebp
+[ ]*[a-f0-9]+: 81 f4 64 91 04 08 xor \$0x8049164,%esp
+[ ]*[a-f0-9]+: f7 c1 64 91 04 08 test \$0x8049164,%ecx
+[ ]*[a-f0-9]+: c7 c0 65 91 04 08 mov \$0x8049165,%eax
+[ ]*[a-f0-9]+: 81 d0 65 91 04 08 adc \$0x8049165,%eax
+[ ]*[a-f0-9]+: 81 c3 65 91 04 08 add \$0x8049165,%ebx
+[ ]*[a-f0-9]+: 81 e1 65 91 04 08 and \$0x8049165,%ecx
+[ ]*[a-f0-9]+: 81 fa 65 91 04 08 cmp \$0x8049165,%edx
+[ ]*[a-f0-9]+: 81 cf 65 91 04 08 or \$0x8049165,%edi
+[ ]*[a-f0-9]+: 81 de 65 91 04 08 sbb \$0x8049165,%esi
+[ ]*[a-f0-9]+: 81 ed 65 91 04 08 sub \$0x8049165,%ebp
+[ ]*[a-f0-9]+: 81 f4 65 91 04 08 xor \$0x8049165,%esp
+[ ]*[a-f0-9]+: f7 c1 65 91 04 08 test \$0x8049165,%ecx
+[ ]*[a-f0-9]+: c7 c0 65 91 04 08 mov \$0x8049165,%eax
+[ ]*[a-f0-9]+: 81 d0 65 91 04 08 adc \$0x8049165,%eax
+[ ]*[a-f0-9]+: 81 c3 65 91 04 08 add \$0x8049165,%ebx
+[ ]*[a-f0-9]+: 81 e1 65 91 04 08 and \$0x8049165,%ecx
+[ ]*[a-f0-9]+: 81 fa 65 91 04 08 cmp \$0x8049165,%edx
+[ ]*[a-f0-9]+: 81 cf 65 91 04 08 or \$0x8049165,%edi
+[ ]*[a-f0-9]+: 81 de 65 91 04 08 sbb \$0x8049165,%esi
+[ ]*[a-f0-9]+: 81 ed 65 91 04 08 sub \$0x8049165,%ebp
+[ ]*[a-f0-9]+: 81 f4 65 91 04 08 xor \$0x8049165,%esp
+[ ]*[a-f0-9]+: f7 c1 65 91 04 08 test \$0x8049165,%ecx
#pass
diff --git a/ld/testsuite/ld-i386/pr22782.d b/ld/testsuite/ld-i386/pr22782.d
new file mode 100644
index 0000000..29486ac
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr22782.d
@@ -0,0 +1,10 @@
+#as: --32
+#ld: -melf_i386
+#readelf: -SWs
+
+#failif
+#...
+[ ]*\[.*\][ ]+.*\.got\.plt .*
+#...
+.* _GLOBAL_OFFSET_TABLE_
+#...
diff --git a/ld/testsuite/ld-i386/pr22782.s b/ld/testsuite/ld-i386/pr22782.s
new file mode 100644
index 0000000..b8a42fc
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr22782.s
@@ -0,0 +1,15 @@
+ .text
+ .globl _start
+ .type _start, @function
+_start:
+ movl errno@indntpoff, %eax
+ movl %gs:(%eax), %eax
+ ret
+ .globl errno
+ .hidden errno
+ .section .tbss,"awT",@nobits
+ .align 4
+ .type errno, @object
+ .size errno, 4
+errno:
+ .zero 4