From 1fd20d7055267ce7d56a8adcdd1fbf80847300f3 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 11 Feb 2013 17:29:35 +0000 Subject: [PATCH] bfd/ * elfxx-mips.c (mips_elf_count_global_tls_entries) (mips_elf_count_global_tls_relocs): Don't count indirect or warning symbols. (mips_elf_multi_got, mips_elf_lay_out_got): Assert that the right number of TLS entries were allocated. ld/testsuite/ * ld-mips-elf/tlsdyn-o32-2.got, ld-mips-elf/tlsdyn-o32-3.got: Remove unused GOT entries. --- bfd/ChangeLog | 8 ++++++++ bfd/elfxx-mips.c | 11 +++++++++++ ld/testsuite/ChangeLog | 5 +++++ ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got | 3 +-- ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got | 3 +-- 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6347d83fbe8..67707ed5fb5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2013-02-11 Richard Sandiford + + * elfxx-mips.c (mips_elf_count_global_tls_entries) + (mips_elf_count_global_tls_relocs): Don't count indirect or + warning symbols. + (mips_elf_multi_got, mips_elf_lay_out_got): Assert that the right + number of TLS entries were allocated. + 2013-02-11 Richard Sandiford * elfxx-mips.c (mips_elf_sort_hash_table_f): Remove asserts. diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index f3259f42056..3073f526d1f 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -2982,6 +2982,10 @@ mips_elf_count_global_tls_entries (void *arg1, void *arg2) = (struct mips_elf_link_hash_entry *) arg1; struct mips_elf_count_tls_arg *arg = arg2; + if (hm->root.root.type == bfd_link_hash_indirect + || hm->root.root.type == bfd_link_hash_warning) + return 1; + if (hm->tls_type & GOT_TLS_GD) arg->needed += 2; if (hm->tls_type & GOT_TLS_IE) @@ -3000,6 +3004,10 @@ mips_elf_count_global_tls_relocs (void *arg1, void *arg2) = (struct mips_elf_link_hash_entry *) arg1; struct mips_elf_count_tls_arg *arg = arg2; + if (hm->root.root.type == bfd_link_hash_indirect + || hm->root.root.type == bfd_link_hash_warning) + return 1; + arg->needed += mips_tls_got_relocs (arg->info, hm->tls_type, &hm->root); return 1; @@ -4688,6 +4696,7 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, all non-TLS entries. */ g->tls_assigned_gotno = g->local_gotno + g->global_gotno; htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g); + BFD_ASSERT (g->tls_assigned_gotno == assign); /* Move onto the next GOT. It will be a secondary GOT if nonull. */ g = gn; @@ -8956,6 +8965,8 @@ mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info) /* Set up TLS entries. */ g->tls_assigned_gotno = g->global_gotno + g->local_gotno; htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g); + BFD_ASSERT (g->tls_assigned_gotno + == g->global_gotno + g->local_gotno + g->tls_gotno); /* Allocate room for the TLS relocations. */ arg.info = info; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c031a5edd3a..b1bc8f3a953 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-02-11 Richard Sandiford + + * ld-mips-elf/tlsdyn-o32-2.got, ld-mips-elf/tlsdyn-o32-3.got: Remove + unused GOT entries. + 2013-02-07 H.J. Lu PR ld/15107 diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got index a0fbb8c6e82..f43f3125799 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got @@ -15,5 +15,4 @@ OFFSET TYPE VALUE Contents of section .got: 10000020 00000000 80000000 004004ac 00000000 .* 10000030 00000000 00000000 00000000 00000000 .* - 10000040 00000001 00000000 00000000 00000000 .* - 10000050 00000000 00000000 .* + 10000040 00000001 00000000 00000000 .* diff --git a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got index aaf67714fb0..7da535c26df 100644 --- a/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got +++ b/ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got @@ -15,5 +15,4 @@ OFFSET TYPE VALUE Contents of section .got: 10000020 00000000 80000000 0040055c 00000000 .* 10000030 00000000 00000000 00000000 00000000 .* - 10000040 00000001 00000000 00000000 00000000 .* - 10000050 00000000 00000000 .* + 10000040 00000001 00000000 00000000 .* -- 2.30.2