From: Richard Sandiford Date: Tue, 12 Feb 2013 09:54:56 +0000 (+0000) Subject: bfd/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=57093f5e8089ca3de7cf3990454ab577a9cec06c;p=binutils-gdb.git bfd/ * elfxx-mips.c (mips_elf_lay_out_got): Count VxWorks GOT relocs in g->relocs. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index be1139c36c2..6c284813e0b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2013-02-12 Richard Sandiford + + * elfxx-mips.c (mips_elf_lay_out_got): Count VxWorks GOT relocs + in g->relocs. + 2013-02-12 Alan Modra * elfxx-target.h (bfd_elfNN_bfd_link_hash_table_free): Provide diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 00757ff6768..1d4586f2c87 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -8649,20 +8649,7 @@ mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info) /* VxWorks does not support multiple GOTs. It initializes $gp to __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the dynamic loader. */ - if (htab->is_vxworks) - { - /* VxWorks executables do not need a GOT. */ - if (info->shared) - { - /* Each VxWorks GOT entry needs an explicit relocation. */ - unsigned int count; - - count = g->global_gotno + g->local_gotno - htab->reserved_gotno; - if (count) - mips_elf_allocate_dynamic_relocations (dynobj, info, count); - } - } - else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info)) + if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info)) { if (!mips_elf_multi_got (output_bfd, info, s, page_gotno)) return FALSE; @@ -8687,6 +8674,10 @@ mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info) BFD_ASSERT (g->tls_assigned_gotno == g->global_gotno + g->local_gotno + g->tls_gotno); + /* Each VxWorks GOT entry needs an explicit relocation. */ + if (htab->is_vxworks && info->shared) + g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno; + /* Allocate room for the TLS relocations. */ if (g->relocs) mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);