gas/
[deliverable/binutils-gdb.git] / bfd / cofflink.c
index dd3e4b12ee4840227bbfa1dd498310ad42befc9b..948b4cd0de934157b8dfcc565c139c3b48e4e1b0 100644 (file)
@@ -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
This page took 0.024742 seconds and 4 git commands to generate.