This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[committed, PATCH] PR ld/20006: Linking gcc and gold with ld.bfd with compressed debug sections fails on final close


Skip debug sections when estimating distances between output sections
since compressed_size is used to compress debug sections and debug
sections aren't excluded from distances between output sections.

Fixed on master and I will backport it to 2.26 branch.

H.J.
---
bfd/

	PR ld/20006
	* elf64-x86-64.c (elf_x86_64_convert_load): Skip debug sections
	when estimating distances between output sections.

ld/

	PR ld/20006
	* testsuite/ld-elfvsb/elfvsb.exp (COMPRESS_LDFLAG): New.
	(visibility_run): Pass COMPRESS_LDFLAG to visibility_test on
	ELF targets.
---
 bfd/ChangeLog                     |  6 ++++++
 bfd/elf64-x86-64.c                | 25 ++++++++++++++-----------
 ld/ChangeLog                      | 13 ++++++++++---
 ld/testsuite/ld-elfvsb/elfvsb.exp |  4 +++-
 4 files changed, 33 insertions(+), 15 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index f67db84..b63811b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2016-04-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/20006
+	* elf64-x86-64.c (elf_x86_64_convert_load): Skip debug sections
+	when estimating distances between output sections.
+
 2016-04-27  Alan Modra  <amodra@gmail.com>
 
 	* elflink.c (_bfd_elf_is_start_stop): New function.
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 4899f98..02fcb22 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -3205,17 +3205,20 @@ elf_x86_64_convert_load (bfd *abfd, asection *sec,
 	      for (asect = link_info->output_bfd->sections;
 		   asect != NULL;
 		   asect = asect->next)
-		{
-		  asection *i;
-		  for (i = asect->map_head.s;
-		       i != NULL;
-		       i = i->map_head.s)
-		    {
-		      size = align_power (size, i->alignment_power);
-		      size += i->size;
-		    }
-		  asect->compressed_size = size;
-		}
+		/* Skip debug sections since compressed_size is used to
+		   compress debug sections.  */
+		if ((asect->flags & SEC_DEBUGGING) == 0)
+		  {
+		    asection *i;
+		    for (i = asect->map_head.s;
+			 i != NULL;
+			 i = i->map_head.s)
+		      {
+			size = align_power (size, i->alignment_power);
+			size += i->size;
+		      }
+		    asect->compressed_size = size;
+		  }
 	    }
 
 	  /* Don't convert GOTPCREL relocations if TSEC isn't placed
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 62db170..379a214 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,8 +1,15 @@
 2016-04-27  H.J. Lu  <hongjiu.lu@intel.com>
 
-	* ld-elf/compressed1b.d: Pass --compress-debug-sections=none
-	to ld.
-	* ld-elf/compressed1c.d: Likewise.
+	PR ld/20006
+	* testsuite/ld-elfvsb/elfvsb.exp (COMPRESS_LDFLAG): New.
+	(visibility_run): Pass COMPRESS_LDFLAG to visibility_test on
+	ELF targets.
+
+2016-04-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* testsuite/ld-elf/compressed1b.d: Pass
+	--compress-debug-sections=none to ld.
+	* testsuite/ld-elf/compressed1c.d: Likewise.
 
 2016-04-27  Alan Modra  <amodra@gmail.com>
 
diff --git a/ld/testsuite/ld-elfvsb/elfvsb.exp b/ld/testsuite/ld-elfvsb/elfvsb.exp
index d9d26d6..e20cd76 100644
--- a/ld/testsuite/ld-elfvsb/elfvsb.exp
+++ b/ld/testsuite/ld-elfvsb/elfvsb.exp
@@ -62,6 +62,7 @@ if ![isnative] then {return}
 set tmpdir tmpdir
 set SHCFLAG ""
 set shared_needs_pic "no"
+set COMPRESS_LDFLAG "-Wl,--compress-debug-sections=zlib-gabi"
 
 if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
 
@@ -228,6 +229,7 @@ proc visibility_run {visibility} {
     global support_protected
     global shared_needs_pic
     global PLT_CFLAGS
+    global COMPRESS_LDFLAG
 
     if [ string match $visibility "hidden" ] {
 	set VSBCFLAG "-DHIDDEN_TEST"
@@ -384,7 +386,7 @@ proc visibility_run {visibility} {
 	    } else { if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
 		visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o xcoff
 	    } else {
-		visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o elfvsb
+		visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o elfvsb $COMPRESS_LDFLAG
 	    } }
 	}
     }}
-- 
2.5.5


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]