diff options
author | Daniel Jacobowitz <drow@false.org> | 2007-10-12 15:59:19 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2007-10-12 15:59:19 +0000 |
commit | 720199d64e276ec9c8a1f0a67c3026de1ad7f13c (patch) | |
tree | 728ff9bb31de9324a741131d0a248701c0b41335 /bfd/elfxx-mips.c | |
parent | 3d5e6107ba41189e6b3a64c1c63b983d28fe2383 (diff) | |
download | gdb-720199d64e276ec9c8a1f0a67c3026de1ad7f13c.zip gdb-720199d64e276ec9c8a1f0a67c3026de1ad7f13c.tar.gz gdb-720199d64e276ec9c8a1f0a67c3026de1ad7f13c.tar.bz2 |
* 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/elfxx-mips.c')
-rw-r--r-- | bfd/elfxx-mips.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index b2fcc9c..18be1fa 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) |