Handle SEC_LINK_DUPLICATES_SAME_CONTENTS for arm-linux

Daniel Jacobowitz drow@false.org
Wed Aug 18 14:55:00 GMT 2004


The ARM linker uses SEC_LINK_DUPLICATES_SAME_CONTENTS for some note sections
(probably more of them than it really ought to, but...).  This isn't handled
properly by one of HJ's COMDAT support patches, which just aborted in this
case.

OK?

-- 
Daniel Jacobowitz

2004-08-18  Daniel Jacobowitz  <dan@debian.org>

	* elflink.c (_bfd_elf_section_already_linked): Handle
	SEC_LINK_DUPLICATES_SAME_CONTENTS.

Index: bfd/elflink.c
===================================================================
RCS file: /big/fsf/rsync/src-cvs/src/bfd/elflink.c,v
retrieving revision 1.93
diff -u -p -r1.93 elflink.c
--- bfd/elflink.c	9 Aug 2004 06:02:03 -0000	1.93
+++ bfd/elflink.c	11 Aug 2004 22:55:52 -0000
@@ -9397,6 +9397,35 @@ _bfd_elf_section_already_linked (bfd *ab
 		  (_("%s: %s: warning: duplicate section `%s' has different size\n"),
 		   bfd_archive_filename (abfd), name);
 	      break;
+
+	    case SEC_LINK_DUPLICATES_SAME_CONTENTS:
+	      if (sec->size != l->sec->size)
+		(*_bfd_error_handler)
+		  (_("%s: %s: warning: duplicate section `%s' has different size\n"),
+		   bfd_archive_filename (abfd), name);
+	      else
+		{
+		  char *sec_contents, *l_sec_contents;
+		  sec_contents = bfd_malloc (sec->size);
+		  l_sec_contents = bfd_malloc (sec->size);
+		  /* No way to report failure here... */
+		  if (sec_contents && l_sec_contents
+		      && bfd_get_section_contents (abfd, sec, sec_contents,
+						   0, sec->size)
+		      && bfd_get_section_contents (l->sec->owner, l->sec,
+						   l_sec_contents,
+						   0, l->sec->size)
+		      && memcmp (sec_contents, l_sec_contents,
+				 sec->size) != 0)
+		    (*_bfd_error_handler)
+		      (_("%s: %s: warning: duplicate section `%s' has different contents\n"),
+		       bfd_archive_filename (abfd), name);
+		  if (sec_contents)
+		    free (sec_contents);
+		  if (l_sec_contents)
+		    free (l_sec_contents);
+		}
+	      break;
 	    }
 
 	  /* Set the output_section field so that lang_add_section



More information about the Binutils mailing list