aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-03-24 19:06:22 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-03-24 19:06:22 -0700
commitb422eb499be2858969fb7723b4e4e08cab20fcdc (patch)
tree86d0c0d121a3f07de39ff7b38086694ff2a13644 /gas
parentf6d5c6943ba1f32a640137fcba92aa046bbf86ed (diff)
downloadgdb-b422eb499be2858969fb7723b4e4e08cab20fcdc.zip
gdb-b422eb499be2858969fb7723b4e4e08cab20fcdc.tar.gz
gdb-b422eb499be2858969fb7723b4e4e08cab20fcdc.tar.bz2
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/write.c25
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;