Don't write the zlib header if not used
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 25 Mar 2015 02:06:22 +0000 (19:06 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 25 Mar 2015 02:06:22 +0000 (19:06 -0700)
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.

gas/ChangeLog
gas/write.c

index 6579c2ffef5741ab81cabbae2ddd51c76bf63683..9f92729d48c8a9e1f37a09bf41d67199682be9ea 100644 (file)
@@ -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
index 397ea48c7b272ad923ce0a575fec46c249d84c56..6a781eaa9a0c372b10a8f6f87e19c960e05501ef 100644 (file)
@@ -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;