DJGPP port of binutils broken due to 64 bit cygwin fix
authorAlan Modra <amodra@gmail.com>
Tue, 9 Jun 2015 04:44:41 +0000 (14:14 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 15 Jun 2015 06:54:13 +0000 (16:24 +0930)
* cofflink.c (_bfd_coff_generic_relocate_section): Revert
2014-03-26 change.  Call _bfd_clear_contents for relocs against
local and global symbols defined in discarded input sections.

bfd/ChangeLog
bfd/cofflink.c

index aeda144..5aaa45e 100644 (file)
@@ -1,3 +1,9 @@
+2015-06-15  Alan Modra  <amodra@gmail.com>
+
+       * cofflink.c (_bfd_coff_generic_relocate_section): Revert
+       2014-03-26 change.  Call _bfd_clear_contents for relocs against
+       local and global symbols defined in discarded input sections.
+
 2015-06-05  Nick Clifton  <nickc@redhat.com>
 
        * elf32-msp430.c (rl78_sym_diff_handler): New function.
index 0ac10de..c1541d1 100644 (file)
@@ -2915,6 +2915,7 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd,
       struct internal_syment *sym;
       bfd_vma addend;
       bfd_vma val;
+      asection *sec;
       reloc_howto_type *howto;
       bfd_reloc_status_type rstat;
 
@@ -2965,11 +2966,9 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd,
        }
 
       val = 0;
-
+      sec = NULL;
       if (h == NULL)
        {
-         asection *sec;
-
          if (symndx == -1)
            {
              sec = bfd_abs_section_ptr;
@@ -2978,11 +2977,6 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd,
          else
            {
              sec = sections[symndx];
-
-             /* If the output section has been discarded then ignore this reloc.  */
-             if (sec->output_section->vma == 0)
-               continue;
-
               val = (sec->output_section->vma
                     + sec->output_offset
                     + sym->n_value);
@@ -2996,8 +2990,6 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd,
              || h->root.type == bfd_link_hash_defweak)
            {
              /* Defined weak symbols are a GNU extension. */
-             asection *sec;
-
              sec = h->root.u.def.section;
              val = (h->root.u.def.value
                     + sec->output_section->vma
@@ -3018,7 +3010,6 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd,
                     will resolve a weak external only if a normal
                     external causes the library member to be linked.
                     See also linker.c: generic_link_check_archive_element. */
-                 asection *sec;
                  struct coff_link_hash_entry *h2 =
                    h->auxbfd->tdata.coff_obj_data->sym_hashes[
                    h->aux->x_sym.x_tagndx.l];
@@ -3049,6 +3040,15 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd,
            }
        }
 
+      /* If the input section defining the symbol has been discarded
+        then zero this reloc field.  */
+      if (sec != NULL && discarded_section (sec))
+       {
+         _bfd_clear_contents (howto, input_bfd, input_section,
+                              contents + (rel->r_vaddr - input_section->vma));
+         continue;
+       }
+
       if (info->base_file)
        {
          /* Emit a reloc if the backend thinks it needs it.  */