bfd/
authorRichard Sandiford <rdsandiford@googlemail.com>
Sun, 10 Apr 2011 11:10:30 +0000 (11:10 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Sun, 10 Apr 2011 11:10:30 +0000 (11:10 +0000)
PR ld/12637
* elfxx-mips.c (mips_elf_merge_got_with): Use arg->global_count
as the number of global entries when merging with the primary GOT.

bfd/ChangeLog
bfd/elfxx-mips.c

index 596612e73cd87213ef6795d316e60ee75f4b5e9a..eaea8f20ad14c1830c9cb84919214dcaec7a3c5e 100644 (file)
@@ -1,3 +1,9 @@
+2011-04-10  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       PR ld/12637
+       * elfxx-mips.c (mips_elf_merge_got_with): Use arg->global_count
+       as the number of global entries when merging with the primary GOT.
+
 2011-04-09  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf32-i386.c: Update copyright year.
index d5e99bbb204ce79f4ece14dcb22fc06688904466..b804eeaf059050f2e1dc4b28ec583774c039d40c 100644 (file)
@@ -4080,14 +4080,18 @@ mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got,
   if (estimate >= from->page_gotno + to->page_gotno)
     estimate = from->page_gotno + to->page_gotno;
 
-  /* And conservatively estimate how many local, global and TLS entries
+  /* And conservatively estimate how many local and TLS entries
      would be needed.  */
-  estimate += (from->local_gotno
-              + from->global_gotno
-              + from->tls_gotno
-              + to->local_gotno
-              + to->global_gotno
-              + to->tls_gotno);
+  estimate += from->local_gotno + to->local_gotno;
+  estimate += from->tls_gotno + to->tls_gotno;
+
+  /* If we're merging with the primary got, we will always have
+     the full set of global entries.  Otherwise estimate those
+     conservatively as well.  */
+  if (to == arg->primary)
+    estimate += arg->global_count;
+  else
+    estimate += from->global_gotno + to->global_gotno;
 
   /* Bail out if the combined GOT might be too big.  */
   if (estimate > arg->max_count)