+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.
 
   /* 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);
        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
     {
 
   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)