X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Felf32-or1k.c;fp=bfd%2Felf32-or1k.c;h=7afde7a59a6201c3fa325f796c899bf8215098ca;hb=190eb1ddba41aad3a31edead9392473ae9d3bbe3;hp=a7fe0a9c7c55414a1bcb213e0a953b5982d7f0c8;hpb=b1d12b40da7b0c5a5c834cd6d4c56e8fb61460bf;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-or1k.c b/bfd/elf32-or1k.c index a7fe0a9c7c..7afde7a59a 100644 --- a/bfd/elf32-or1k.c +++ b/bfd/elf32-or1k.c @@ -892,9 +892,6 @@ struct elf_or1k_link_hash_entry { struct elf_link_hash_entry root; - /* Track dynamic relocs copied for this symbol. */ - struct elf_dyn_relocs *dyn_relocs; - /* Track type of TLS access. */ unsigned char tls_type; }; @@ -964,7 +961,6 @@ or1k_elf_link_hash_newfunc (struct bfd_hash_entry *entry, struct elf_or1k_link_hash_entry *eh; eh = (struct elf_or1k_link_hash_entry *) ret; - eh->dyn_relocs = NULL; eh->tls_type = TLS_UNKNOWN; } @@ -2153,7 +2149,7 @@ or1k_elf_check_relocs (bfd *abfd, /* If this is a global symbol, we count the number of relocations we need for this symbol. */ if (h != NULL) - head = &((struct elf_or1k_link_hash_entry *) h)->dyn_relocs; + head = &h->dyn_relocs; else { /* Track dynamic relocs needed for local syms too. @@ -2557,9 +2553,8 @@ static asection * readonly_dynrelocs (struct elf_link_hash_entry *h) { struct elf_dyn_relocs *sec_relocs; - struct elf_or1k_link_hash_entry *eh = (struct elf_or1k_link_hash_entry *) h; - for (sec_relocs = eh->dyn_relocs; + for (sec_relocs = h->dyn_relocs; sec_relocs != NULL; sec_relocs = sec_relocs->next) { @@ -2758,7 +2753,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) { struct bfd_link_info *info; struct elf_or1k_link_hash_table *htab; - struct elf_or1k_link_hash_entry *eh; struct elf_dyn_relocs *sec_relocs; if (h->root.type == bfd_link_hash_indirect) @@ -2769,8 +2763,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) if (htab == NULL) return FALSE; - eh = (struct elf_or1k_link_hash_entry *) h; - if (htab->root.dynamic_sections_created && h->plt.refcount > 0) { @@ -2857,7 +2849,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) else h->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (h->dyn_relocs == NULL) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -2872,7 +2864,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) { struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (sec_relocs = *pp) != NULL;) + for (pp = &h->dyn_relocs; (sec_relocs = *pp) != NULL;) { sec_relocs->count -= sec_relocs->pc_count; sec_relocs->pc_count = 0; @@ -2885,11 +2877,11 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) /* Also discard relocs on undefined weak syms with non-default visibility. */ - if (eh->dyn_relocs != NULL + if (h->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ @@ -2929,13 +2921,13 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) goto keep; } - eh->dyn_relocs = NULL; + h->dyn_relocs = NULL; keep: ; } /* Finally, allocate space. */ - for (sec_relocs = eh->dyn_relocs; + for (sec_relocs = h->dyn_relocs; sec_relocs != NULL; sec_relocs = sec_relocs->next) { @@ -3204,20 +3196,20 @@ or1k_elf_copy_indirect_symbol (struct bfd_link_info *info, edir = (struct elf_or1k_link_hash_entry *) dir; eind = (struct elf_or1k_link_hash_entry *) ind; - if (eind->dyn_relocs != NULL) + if (ind->dyn_relocs != NULL) { - if (edir->dyn_relocs != NULL) + if (dir->dyn_relocs != NULL) { struct elf_dyn_relocs **pp; struct elf_dyn_relocs *p; /* Add reloc counts against the indirect sym to the direct sym list. Merge any entries against the same section. */ - for (pp = &eind->dyn_relocs; (p = *pp) != NULL;) + for (pp = &ind->dyn_relocs; (p = *pp) != NULL;) { struct elf_dyn_relocs *q; - for (q = edir->dyn_relocs; q != NULL; q = q->next) + for (q = dir->dyn_relocs; q != NULL; q = q->next) if (q->sec == p->sec) { q->pc_count += p->pc_count; @@ -3228,11 +3220,11 @@ or1k_elf_copy_indirect_symbol (struct bfd_link_info *info, if (q == NULL) pp = &p->next; } - *pp = edir->dyn_relocs; + *pp = dir->dyn_relocs; } - edir->dyn_relocs = eind->dyn_relocs; - eind->dyn_relocs = NULL; + dir->dyn_relocs = ind->dyn_relocs; + ind->dyn_relocs = NULL; } if (ind->root.type == bfd_link_hash_indirect)