From 29c94b084f3595496eb6acbf377f219fdfb3364b Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Sun, 10 Apr 2011 11:10:29 +0000 Subject: [PATCH] bfd/ 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 | 6 ++++++ bfd/elfxx-mips.c | 18 +++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 596612e73..eaea8f20a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2011-04-10 Richard Sandiford + + 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 * elf32-i386.c: Update copyright year. diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index d5e99bbb2..b804eeaf0 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -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) -- 2.11.4.GIT