| Index: bfd/cofflink.c
|
| diff --git a/bfd/cofflink.c b/bfd/cofflink.c
|
| index dd3e4b12ee4840227bbfa1dd498310ad42befc9b..948b4cd0de934157b8dfcc565c139c3b48e4e1b0 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
|
|
|