* elfxx-mips.c (mips_elf_sort_hash_table_f): Handle forced

local symbols specially.
	(mips_elf_set_global_got_offset): Skip forced local symbols.
This commit is contained in:
Daniel Jacobowitz 2007-10-12 15:59:19 +00:00
parent 3d5e6107ba
commit 720199d64e
2 changed files with 10 additions and 2 deletions

View File

@ -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> 2007-10-12 Alan Modra <amodra@bigpond.net.au>
* elf.c (elfcore_grok_prxfpreg): Fix comment typo. * elf.c (elfcore_grok_prxfpreg): Fix comment typo.

View File

@ -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 /* Global symbols that need GOT entries that are not explicitly
referenced are marked with got offset 2. Those that are referenced are marked with got offset 2. Those that are
referenced get a 1, and those that don't need GOT entries get 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) if (h->root.got.offset == 2)
{ {
BFD_ASSERT (h->tls_type == GOT_NORMAL); 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; hsd->low = (struct elf_link_hash_entry *) h;
h->root.dynindx = hsd->max_unref_got_dynindx++; 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++; h->root.dynindx = hsd->max_non_got_dynindx++;
else else
{ {
@ -3269,6 +3270,7 @@ mips_elf_set_global_got_offset (void **entryp, void *p)
if (entry->abfd != NULL && entry->symndx == -1 if (entry->abfd != NULL && entry->symndx == -1
&& entry->d.h->root.dynindx != -1 && entry->d.h->root.dynindx != -1
&& !entry->d.h->forced_local
&& entry->d.h->tls_type == GOT_NORMAL) && entry->d.h->tls_type == GOT_NORMAL)
{ {
if (g) if (g)