diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-03-24 13:27:52 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-03-24 13:27:52 -0700 |
commit | 8d00121477371cfd1596118af062fe6ff4e263b7 (patch) | |
tree | 1187a8eb071e999258d7fd153cc174114767a14c /bfd/compress.c | |
parent | 44a1ee517365cd120f0338c1f4dc5a85273d4e4b (diff) | |
download | gdb-8d00121477371cfd1596118af062fe6ff4e263b7.zip gdb-8d00121477371cfd1596118af062fe6ff4e263b7.tar.gz gdb-8d00121477371cfd1596118af062fe6ff4e263b7.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 binutils/18087
* compress.c (bfd_compress_section_contents): Don't write the
zlib header and set contents as well as compress_status if
compression didn't make the section smaller.
(bfd_init_section_compress_status): Don't check compression
size here.
Diffstat (limited to 'bfd/compress.c')
-rw-r--r-- | bfd/compress.c | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/bfd/compress.c b/bfd/compress.c index de74d60..993a1d3 100644 --- a/bfd/compress.c +++ b/bfd/compress.c @@ -96,26 +96,34 @@ bfd_compress_section_contents (bfd *abfd ATTRIBUTE_UNUSED, return FALSE; } - /* Write the zlib header. In this case, it should be "ZLIB" followed - by the uncompressed section size, 8 bytes in big-endian order. */ - memcpy (compressed_buffer, "ZLIB", 4); - compressed_buffer[11] = uncompressed_size; uncompressed_size >>= 8; - compressed_buffer[10] = uncompressed_size; uncompressed_size >>= 8; - compressed_buffer[9] = uncompressed_size; uncompressed_size >>= 8; - compressed_buffer[8] = uncompressed_size; uncompressed_size >>= 8; - compressed_buffer[7] = uncompressed_size; uncompressed_size >>= 8; - compressed_buffer[6] = uncompressed_size; uncompressed_size >>= 8; - compressed_buffer[5] = uncompressed_size; uncompressed_size >>= 8; - compressed_buffer[4] = uncompressed_size; compressed_size += 12; - /* Free the uncompressed contents if we compress in place. */ - if (uncompressed_buffer == sec->contents) - free (uncompressed_buffer); - - sec->contents = compressed_buffer; - sec->size = compressed_size; - sec->compress_status = COMPRESS_SECTION_DONE; + /* PR binutils/18087: If compression didn't make the section smaller, + just keep it uncompressed. */ + if (compressed_size < uncompressed_size) + { + /* Write the zlib header. In this case, it should be "ZLIB" followed + by the uncompressed section size, 8 bytes in big-endian order. */ + memcpy (compressed_buffer, "ZLIB", 4); + compressed_buffer[11] = uncompressed_size; uncompressed_size >>= 8; + compressed_buffer[10] = uncompressed_size; uncompressed_size >>= 8; + compressed_buffer[9] = uncompressed_size; uncompressed_size >>= 8; + compressed_buffer[8] = uncompressed_size; uncompressed_size >>= 8; + compressed_buffer[7] = uncompressed_size; uncompressed_size >>= 8; + compressed_buffer[6] = uncompressed_size; uncompressed_size >>= 8; + compressed_buffer[5] = uncompressed_size; uncompressed_size >>= 8; + compressed_buffer[4] = uncompressed_size; + + free (uncompressed_buffer); + sec->contents = compressed_buffer; + sec->size = compressed_size; + sec->compress_status = COMPRESS_SECTION_DONE; + } + else + { + sec->contents = uncompressed_buffer; + sec->compress_status = COMPRESS_SECTION_NONE; + } return TRUE; } @@ -424,18 +432,6 @@ bfd_init_section_compress_status (bfd *abfd ATTRIBUTE_UNUSED, uncompressed_buffer, uncompressed_size); - /* PR binutils/18087: If compression didn't make - the section smaller, just keep it uncompressed. */ - if (ret && uncompressed_size < sec->size) - { - free (sec->contents); - sec->contents = uncompressed_buffer; - sec->size = uncompressed_size; - sec->compress_status = COMPRESS_SECTION_NONE; - } - else - free (uncompressed_buffer); - return ret; #endif } |