X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fcofflink.c;h=948b4cd0de934157b8dfcc565c139c3b48e4e1b0;hb=d301a56b4040e9f08152e414a94dcd5c79afddbb;hp=dd3e4b12ee4840227bbfa1dd498310ad42befc9b;hpb=2c3fc38946973ec305b63248abdd170eda059f80;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/cofflink.c b/bfd/cofflink.c index dd3e4b12ee..948b4cd0de 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -605,7 +605,7 @@ coff_link_add_symbols (bfd *abfd, { bfd_size_type string_offset = 0; asection *stab; - + for (stab = abfd->sections; stab; stab = stab->next) if (CONST_STRNEQ (stab->name, ".stab") && (!stab->name[5] @@ -614,7 +614,7 @@ coff_link_add_symbols (bfd *abfd, struct coff_link_hash_table *table; struct coff_section_tdata *secdata = coff_section_data (abfd, stab); - + if (secdata == NULL) { amt = sizeof (struct coff_section_tdata); @@ -1159,7 +1159,7 @@ _bfd_coff_final_link (bfd *abfd, elsewhere. */ struct internal_reloc incount; bfd_byte *excount = (bfd_byte *)bfd_malloc (relsz); - + memset (&incount, 0, sizeof (incount)); incount.r_vaddr = o->reloc_count + 1; bfd_coff_swap_reloc_out (abfd, &incount, excount); @@ -1424,7 +1424,8 @@ mark_relocs (struct coff_final_link_info *flaginfo, bfd *input_bfd) struct internal_reloc * irel; struct internal_reloc * irelend; - if ((a->flags & SEC_RELOC) == 0 || a->reloc_count < 1) + if ((a->flags & SEC_RELOC) == 0 || a->reloc_count < 1 + || a->linker_mark == 0) continue; /* Don't mark relocs in excluded sections. */ if (a->output_section == bfd_abs_section_ptr) @@ -2426,10 +2427,9 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) contents = secdata->contents; else { - bfd_size_type x = o->rawsize ? o->rawsize : o->size; - if (! bfd_get_section_contents (input_bfd, o, flaginfo->contents, 0, x)) - return FALSE; contents = flaginfo->contents; + if (! bfd_get_full_section_contents (input_bfd, o, &contents)) + return FALSE; } if ((o->flags & SEC_RELOC) != 0) @@ -2447,7 +2447,8 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) ? (flaginfo->section_info[target_index].relocs + o->output_section->reloc_count) : flaginfo->internal_relocs))); - if (internal_relocs == NULL) + if (internal_relocs == NULL + && o->reloc_count > 0) return FALSE; /* Run through the relocs looking for relocs against symbols