]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
zlib-gabi to zstd woes
authorAlan Modra <amodra@gmail.com>
Fri, 14 Oct 2022 11:29:23 +0000 (21:59 +1030)
committerAlan Modra <amodra@gmail.com>
Sun, 16 Oct 2022 03:24:50 +0000 (13:54 +1030)
commit206e9791cb09459bf92603428370c16bfde282ac
tree697bb43e78ec7616c659a870e3f21043b3d1e5a7
parent4f722d4a721aaee24323138fc3b564ad1545af93
zlib-gabi to zstd woes

So we had a zlib-gabi .debug_info section that increased in size with
zstd, so much so that it was better to leave the section
uncompressed.  Things went horribly wrong when the section was read
again later.  The section was read again off disk using the
uncompressed size.  So you get the zlib section again with some
garbage at the end.  Fix that particular problem by setting the
section flag SEC_IN_MEMORY.  Any future read will get sec->contents.

Also, if the section is to be left uncompressed, the input
SHF_COMPRESSED flag needs to be reset otherwise objcopy will copy it
to output.

Finally, bfd_convert_section_contents needed a small update to handle
zstd compressed sections, and I've deleted bfd_cache_section_contents.

* bfd.c (bfd_convert_section_contents): Handle zstd.
* compress.c (bfd_compress_section_contents): When section
contents are uncompressed set SEC_IN_MEMORY flag,
compress_status to COMRESS_SECTION_NONE, and clear
SHF_COMPRESSED.  Set SEC_IN_MEMORY for compressed contents.
(bfd_get_full_section_contents): Don't check section size
against file size when SEC_IN_MEMORY.
(bfd_cache_section_contents): Delete function.
* elf32-arm.c (elf32_arm_get_synthetic_symtab): Expand
bfd_cache_section_contents here.
* bfd-in2.h: Regenerate.
bfd/bfd-in2.h
bfd/bfd.c
bfd/compress.c
bfd/elf32-arm.c