[patch] bfd/elf.c: fix section overlap warning again

DJ Delorie dj@redhat.com
Fri Jul 9 00:19:00 GMT 2010


Yet another attempt to get this logic right, it seems.  The "new"
logic didn't handle the case where the previous section overflowed the
address space.  This adds a check specifically for that case.  Since
this is the third time someone's tried to get this right, I'll wait
until someone reviews it before committing it :-)


	* elf.c (assign_file_positions_for_load_sections): Check for
	sections which overflow the address space.

Index: elf.c
===================================================================
RCS file: /cvs/src/src/bfd/elf.c,v
retrieving revision 1.511
diff -p -U3 -r1.511 elf.c
--- elf.c	18 May 2010 03:31:05 -0000	1.511
+++ elf.c	9 Jul 2010 00:10:36 -0000
@@ -4457,9 +4457,16 @@ assign_file_positions_for_load_sections 
 		      && ((this_hdr->sh_flags & SHF_TLS) == 0
 			  || p->p_type == PT_TLS))))
 	    {
-	      bfd_vma adjust = sec->lma - (p->p_paddr + p->p_memsz);
-
-	      if (sec->lma < p->p_paddr + p->p_memsz)
+	      /* This is the end VMA for the previous segment.  */
+	      bfd_vma p_end = p->p_paddr + p->p_memsz;
+	      /* This is the gap between segments.  */
+	      bfd_vma adjust = sec->lma - p_end;
+
+	      /* The first comparison checks for the usual case.  The
+		 second checks for segments which overflow the address
+		 space.  */
+	      if (sec->lma < p->p_paddr + p->p_memsz
+		  || (p_end < p->p_paddr && p->p_paddr < sec->lma))
 		{
 		  (*_bfd_error_handler)
 		    (_("%B: section %A lma 0x%lx overlaps previous sections"),



More information about the Binutils mailing list