forked from Imagelibrary/binutils-gdb
Don't add the zlib header to SHF_COMPRESSED section
In a SHF_COMPRESSED compressed section, the raw compressed data should begin immediately after the compression header. This patch removes the extra zlib header from the SHF_COMPRESSED section. bfd/ * bfd.c (bfd_update_compression_header): Also write the zlib header if the SHF_COMPRESSED bit cleared.. (bfd_check_compression_header): Return the uncompressed size. * compress.c (decompress_contents): Don't skip the zlib header. (bfd_compress_section_contents): Properly handle ELFCOMPRESS_ZLIB, which doesn't have the zlib header. (bfd_init_section_decompress_status): Likewise. (bfd_get_full_section_contents): Updated. (bfd_is_section_compressed): Likewise. (bfd_is_section_compressed_with_header): Return the uncompressed size. * elf.c (_bfd_elf_make_section_from_shdr): Updated. * bfd-in2.h: Regenerated. binutils/ * readelf.c (uncompress_section_contents): Add a parameter for uncompressed size. Don't check the zlib header. (load_specific_debug_section): Updated. binutils/testsuite/ * binutils-all/compress.exp: Replace "$OBJDUMP -s -j .debug_info" with "$OBJDUMP -W". * binutils-all/libdw2-compressedgabi.out: Updated. gas/ 2015-05-14 H.J. Lu <hongjiu.lu@intel.com> * write.c (compress_debug): Don't write the zlib header, which is handled by bfd_update_compression_header.
This commit is contained in:
@@ -1067,9 +1067,11 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
|
||||
{
|
||||
enum { nothing, compress, decompress } action = nothing;
|
||||
int compression_header_size;
|
||||
bfd_size_type uncompressed_size;
|
||||
bfd_boolean compressed
|
||||
= bfd_is_section_compressed_with_header (abfd, newsect,
|
||||
&compression_header_size);
|
||||
&compression_header_size,
|
||||
&uncompressed_size);
|
||||
|
||||
if (compressed)
|
||||
{
|
||||
@@ -1085,6 +1087,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
|
||||
if (newsect->size != 0
|
||||
&& (abfd->flags & BFD_COMPRESS)
|
||||
&& compression_header_size >= 0
|
||||
&& uncompressed_size > 0
|
||||
&& (!compressed
|
||||
|| ((compression_header_size > 0)
|
||||
!= ((abfd->flags & BFD_COMPRESS_GABI) != 0))))
|
||||
|
||||
Reference in New Issue
Block a user