diff options
author | Richard Sandiford <rsandifo@nildram.co.uk> | 2007-05-31 20:22:56 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@nildram.co.uk> | 2007-05-31 20:22:56 +0000 |
commit | 9c11f098b26eeafeba4b357b80e9cc4fb8c50b49 (patch) | |
tree | 5b0dd165adc8a55bbefdacb4d7eac80c0645be23 | |
parent | b66bc1481e493ca28b0d1899639c3a0f7f07467a (diff) | |
download | binutils-redhat-9c11f098b26eeafeba4b357b80e9cc4fb8c50b49.tar.gz |
bfd/
* elfxx-mips.c (mips_elf_initialize_tls_index): When processing a
type (3) single-GOT entry, read tls_type from the hash table entry
rather than the GOT entry.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elfxx-mips.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e291ff153a..06b152b504 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2007-05-31 Richard Sandiford <rsandifo@nildram.co.uk> + + * elfxx-mips.c (mips_elf_initialize_tls_index): When processing a + type (3) single-GOT entry, read tls_type from the hash table entry + rather than the GOT entry. + 2007-06-01 Alan Modra <amodra@bigpond.net.au> * simple.c (bfd_simple_get_relocated_section_contents): Init diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index e4ddb37cd4..1bccb331de 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -3186,6 +3186,7 @@ mips_elf_initialize_tls_index (void **entryp, void *p) struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; struct mips_got_info *g = p; bfd_vma next_index; + unsigned char tls_type; /* We're only interested in TLS symbols. */ if (entry->tls_type == 0) @@ -3201,6 +3202,7 @@ mips_elf_initialize_tls_index (void **entryp, void *p) return 1; entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE; entry->d.h->tls_got_offset = next_index; + tls_type = entry->d.h->tls_type; } else { @@ -3217,12 +3219,13 @@ mips_elf_initialize_tls_index (void **entryp, void *p) g->tls_ldm_offset = next_index; } entry->gotidx = next_index; + tls_type = entry->tls_type; } /* Account for the entries we've just allocated. */ - if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM)) + if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM)) g->tls_assigned_gotno += 2; - if (entry->tls_type & GOT_TLS_IE) + if (tls_type & GOT_TLS_IE) g->tls_assigned_gotno += 1; return 1; |