Update elf_i386_compute_jump_table_size
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 15 Jul 2014 20:09:55 +0000 (13:09 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 15 Jul 2014 20:09:55 +0000 (13:09 -0700)
Commit e1f987424b7b3f5ac63a2a6ae044a202a44b8ff8 changed how
next_tls_desc_index was set up.  This patch updates
elf_i386_compute_jump_table_size to use elf.srelplt->reloc_count
instead of next_tls_desc_index.

bfd/

PR ld/17057
* elf32-i386.c (elf_i386_compute_jump_table_size): Replace
next_tls_desc_index with elf.srelplt->reloc_count.

ld/testsuite/

PR ld/17057
* ld-i386/i386.exp: Run pr17057.
* ld-i386/pr17057.d: New file.
* ld-i386/pr17057.s: Likewise.

bfd/ChangeLog
bfd/elf32-i386.c
ld/testsuite/ChangeLog
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/pr17057.d [new file with mode: 0644]
ld/testsuite/ld-i386/pr17057.s [new file with mode: 0644]

index 96f85f7..1ecacdd 100644 (file)
@@ -1,3 +1,9 @@
+2014-07-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/17057
+       * elf32-i386.c (elf_i386_compute_jump_table_size): Replace
+       next_tls_desc_index with elf.srelplt->reloc_count.
+
 2014-07-15  Alan Modra  <amodra@gmail.com>
 
        * cache.c (cache_bread_1): Don't return -1 when fread returns
index 551d179..2244c6c 100644 (file)
@@ -826,7 +826,7 @@ struct elf_i386_link_hash_table
   == I386_ELF_DATA ? ((struct elf_i386_link_hash_table *) ((p)->hash)) : NULL)
 
 #define elf_i386_compute_jump_table_size(htab) \
-  ((htab)->next_tls_desc_index * 4)
+  ((htab)->elf.srelplt->reloc_count * 4)
 
 /* Create an entry in an i386 ELF linker hash table.  */
 
index fbc9862..7c81ddf 100644 (file)
@@ -1,3 +1,10 @@
+2014-07-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/17057
+       * ld-i386/i386.exp: Run pr17057.
+       * ld-i386/pr17057.d: New file.
+       * ld-i386/pr17057.s: Likewise.
+
 2014-07-15  Jiong Wang  <jiong.wang@arm.com>
 
        * ld-aarch64/emit-relocs-local-addend.d: Use target linker script.
index 04c399b..4d22182 100644 (file)
@@ -254,3 +254,4 @@ run_dump_test "compressed1"
 run_dump_test "pr12627"
 run_dump_test "pr13302"
 run_dump_test "pr14215"
+run_dump_test "pr17057"
diff --git a/ld/testsuite/ld-i386/pr17057.d b/ld/testsuite/ld-i386/pr17057.d
new file mode 100644 (file)
index 0000000..29cc676
--- /dev/null
@@ -0,0 +1,9 @@
+#name: PR ld/17057
+#as: --32
+#ld: -shared -melf_i386
+#readelf: -r --wide
+
+Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 2 entries:
+ Offset     Info    Type                Sym. Value  Symbol's Name
+[0-9a-f ]+R_386_JUMP_SLOT +0+ +foo
+[0-9a-f ]+R_386_TLS_DESC +0+ +my_tls
diff --git a/ld/testsuite/ld-i386/pr17057.s b/ld/testsuite/ld-i386/pr17057.s
new file mode 100644 (file)
index 0000000..a4e00ec
--- /dev/null
@@ -0,0 +1,3 @@
+       .text
+       leal    my_tls@TLSDESC(%ebx), %eax
+       call    foo@PLT