diff options
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | 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; |