[binutils-gdb] Don't write the zlib header if not used

H.J.Lu hjl@sourceware.org
Wed Mar 25 02:07:00 GMT 2015


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

commit b422eb499be2858969fb7723b4e4e08cab20fcdc
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Mar 24 19:06:22 2015 -0700

    Don't write the zlib header if not used
    
    No need to write the zlib header if compression didn't make the section
    smaller.
    
    	PR gas/18087
    	* write.c (compress_debug): Don't write the zlib header if
    	compression didn't make the section smaller.

Diff:
---
 gas/ChangeLog |  6 ++++++
 gas/write.c   | 25 +++++++++++++------------
 2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 6579c2f..9f92729 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2015-03-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR gas/18087
+	* write.c (compress_debug): Don't write the zlib header if
+	compression didn't make the section smaller.
+
 2015-03-24  Terry Guo  <terry.guo@arm.com>
 
 	* config/tc-arm.c (no_cpu_selected): Use new macro to compare
diff --git a/gas/write.c b/gas/write.c
index 397ea48..6a781ea 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -1438,15 +1438,6 @@ compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
   last_newf->fr_type = rs_fill;
   last_newf->fr_fix = 12;
   header = last_newf->fr_literal;
-  memcpy (header, "ZLIB", 4);
-  header[11] = uncompressed_size; uncompressed_size >>= 8;
-  header[10] = uncompressed_size; uncompressed_size >>= 8;
-  header[9] = uncompressed_size; uncompressed_size >>= 8;
-  header[8] = uncompressed_size; uncompressed_size >>= 8;
-  header[7] = uncompressed_size; uncompressed_size >>= 8;
-  header[6] = uncompressed_size; uncompressed_size >>= 8;
-  header[5] = uncompressed_size; uncompressed_size >>= 8;
-  header[4] = uncompressed_size;
   compressed_size = 12;
 
   /* Stream the frags through the compression engine, adding new frags
@@ -1526,11 +1517,21 @@ compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
 	break;
     }
 
-  /* PR binutils/18087: If compression didn't make
-     the section smaller, just keep it uncompressed.  */
-  if (compressed_size > sec->size)
+  /* PR binutils/18087: If compression didn't make the section smaller,
+     just keep it uncompressed.  */
+  if (compressed_size > uncompressed_size)
     return;
 
+  memcpy (header, "ZLIB", 4);
+  header[11] = uncompressed_size; uncompressed_size >>= 8;
+  header[10] = uncompressed_size; uncompressed_size >>= 8;
+  header[9] = uncompressed_size; uncompressed_size >>= 8;
+  header[8] = uncompressed_size; uncompressed_size >>= 8;
+  header[7] = uncompressed_size; uncompressed_size >>= 8;
+  header[6] = uncompressed_size; uncompressed_size >>= 8;
+  header[5] = uncompressed_size; uncompressed_size >>= 8;
+  header[4] = uncompressed_size;
+
   /* Replace the uncompressed frag list with the compressed frag list.  */
   seginfo->frchainP->frch_root = first_newf;
   seginfo->frchainP->frch_last = last_newf;



More information about the Binutils-cvs mailing list