[binutils-gdb] DJGPP port of binutils broken due to 64 bit cygwin fix

Alan Modra amodra@sourceware.org
Mon Jun 15 06:55:00 GMT 2015


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3a062fa1eeee8296dece36a9bb7ecc8d4500de18

commit 3a062fa1eeee8296dece36a9bb7ecc8d4500de18
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Jun 9 14:14:41 2015 +0930

    DJGPP port of binutils broken due to 64 bit cygwin fix
    
    	* 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.

Diff:
---
 bfd/ChangeLog  |  6 ++++++
 bfd/cofflink.c | 22 +++++++++++-----------
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index aeda144..5aaa45e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
diff --git a/bfd/cofflink.c b/bfd/cofflink.c
index 0ac10de..c1541d1 100644
--- a/bfd/cofflink.c
+++ b/bfd/cofflink.c
@@ -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.  */



More information about the Binutils-cvs mailing list