summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2007-10-12 15:59:19 +0000
committerDaniel Jacobowitz <dan@debian.org>2007-10-12 15:59:19 +0000
commit6ab79df97af1b25448cf858510f7ada2d58f23a7 (patch)
treeb0f8d5ffae045717d8b841ef2cfc88c930148c02 /bfd
parentfbbdb3dcdf5813d3d33b5d80f696fa60e2815e95 (diff)
downloadbinutils-redhat-6ab79df97af1b25448cf858510f7ada2d58f23a7.tar.gz
* elfxx-mips.c (mips_elf_sort_hash_table_f): Handle forced
local symbols specially. (mips_elf_set_global_got_offset): Skip forced local symbols.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elfxx-mips.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index e7ab1d49ff..89cbac02b2 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-12 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elfxx-mips.c (mips_elf_sort_hash_table_f): Handle forced
+ local symbols specially.
+ (mips_elf_set_global_got_offset): Skip forced local symbols.
+
2007-10-12 Alan Modra <amodra@bigpond.net.au>
* elf.c (elfcore_grok_prxfpreg): Fix comment typo.
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index b2fcc9c506..18be1fa1e2 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -2797,7 +2797,8 @@ mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
/* Global symbols that need GOT entries that are not explicitly
referenced are marked with got offset 2. Those that are
referenced get a 1, and those that don't need GOT entries get
- -1. */
+ -1. Forced local symbols may also be marked with got offset 1,
+ but are never given global GOT entries. */
if (h->root.got.offset == 2)
{
BFD_ASSERT (h->tls_type == GOT_NORMAL);
@@ -2806,7 +2807,7 @@ mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
hsd->low = (struct elf_link_hash_entry *) h;
h->root.dynindx = hsd->max_unref_got_dynindx++;
}
- else if (h->root.got.offset != 1)
+ else if (h->root.got.offset != 1 || h->forced_local)
h->root.dynindx = hsd->max_non_got_dynindx++;
else
{
@@ -3269,6 +3270,7 @@ mips_elf_set_global_got_offset (void **entryp, void *p)
if (entry->abfd != NULL && entry->symndx == -1
&& entry->d.h->root.dynindx != -1
+ && !entry->d.h->forced_local
&& entry->d.h->tls_type == GOT_NORMAL)
{
if (g)