X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Felflink.c;h=07d3ea5d9c51d481ba57ca4d8ba0db9872f8c419;hb=056bafd472efccfb2d7f44f6469dfa08cdf7414b;hp=71da4c9fd03eb47c7096812e5e58ec3b50a08921;hpb=61756f84eedc470c975f8bafe6ddf10acaca6942;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elflink.c b/bfd/elflink.c index 71da4c9fd0..07d3ea5d9c 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -2450,8 +2450,7 @@ _bfd_elf_link_read_relocs (bfd *abfd, { bfd_size_type size; - size = o->reloc_count; - size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela); + size = (bfd_size_type) o->reloc_count * sizeof (Elf_Internal_Rela); if (keep_memory) internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size); else @@ -10402,7 +10401,8 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) ".fini_array") == 0)) && (o->name[6] == 0 || o->name[6] == '.')) { - if (o->size != o->reloc_count * address_size) + if (o->size * bed->s->int_rels_per_ext_rel + != o->reloc_count * address_size) { _bfd_error_handler /* xgettext:c-format */ @@ -10426,7 +10426,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) relocs against removed link-once sections. */ rel = internal_relocs; - relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel; + relend = rel + o->reloc_count; for ( ; rel < relend; rel++) { unsigned long r_symndx = rel->r_info >> r_sym_shift; @@ -10615,7 +10615,7 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) /* Adjust the reloc addresses and symbol indices. */ irela = internal_relocs; - irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel; + irelaend = irela + o->reloc_count; rel_hash = esdo->rel.hashes + esdo->rel.count; /* We start processing the REL relocs, if any. When we reach IRELAMID in the loop, we switch to the RELA relocs. */ @@ -11789,8 +11789,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) if (max_internal_reloc_count != 0) { - amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel; - amt *= sizeof (Elf_Internal_Rela); + amt = max_internal_reloc_count * sizeof (Elf_Internal_Rela); flinfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt); if (flinfo.internal_relocs == NULL) goto error_return; @@ -12589,8 +12588,7 @@ init_reloc_cookie_rels (struct elf_reloc_cookie *cookie, if (cookie->rels == NULL) return FALSE; cookie->rel = cookie->rels; - cookie->relend = (cookie->rels - + sec->reloc_count * bed->s->int_rels_per_ext_rel); + cookie->relend = cookie->rels + sec->reloc_count; } cookie->rel = cookie->rels; return TRUE; @@ -13203,7 +13201,7 @@ elf_gc_smash_unused_vtentry_relocs (struct elf_link_hash_entry *h, void *okp) bed = get_elf_backend_data (sec->owner); log_file_align = bed->s->log_file_align; - relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel; + relend = relstart + sec->reloc_count; for (rel = relstart; rel < relend; ++rel) if (rel->r_offset >= hstart && rel->r_offset < hend)