bfd_get_relocated_section_contents allow NULL data buffer
authorAlan Modra <amodra@gmail.com>
Fri, 16 Dec 2022 11:07:29 +0000 (21:37 +1030)
committerAlan Modra <amodra@gmail.com>
Sat, 17 Dec 2022 08:14:42 +0000 (18:44 +1030)
commit56ba7527d29060cf6e8693d6e772a9b9b53c1373
tree793cd025443d0fc7d91b52f7e50746ce9c814740
parent6f00d50e2b6445f88b5f362dbbd982f387b6354f
bfd_get_relocated_section_contents allow NULL data buffer

This patch removes the bfd_malloc in default_indirect_link_order and
bfd_simple_get_relocated_section_contents, pushing the allocation down
to bfd_get_relocated_section_contents.  The idea is to make use of the
allocation done with sanity checking in bfd_get_full_section_contents,
which is called by bfd_generic_get_relocated_section_contents.

Doing this exposed a bug in bfd_get_full_section_contents.  With
relaxation it is possible that an input section rawsize is different
to the section size.  In that case we want to use the larger of
rawsize (the on-disk size for input sections) and size.

* reloc.c (bfd_generic_get_relocated_section_contents),
* reloc16.c (bfd_coff_reloc16_get_relocated_section_contents),
* coff-alpha.c (alpha_ecoff_get_relocated_section_contents),
* coff-sh.c (sh_coff_get_relocated_section_contents),
* elf-m10200.c (mn10200_elf_get_relocated_section_contents),
* elf-m10300.c (mn10300_elf_get_relocated_section_contents),
* elf32-avr.c (elf32_avr_get_relocated_section_contents),
* elf32-cr16.c (elf32_cr16_get_relocated_section_contents),
* elf32-crx.c (elf32_crx_get_relocated_section_contents),
* elf32-h8300.c (elf32_h8_get_relocated_section_contents),
* elf32-nds32.c (nds32_elf_get_relocated_section_contents),
* elf32-sh.c (sh_elf_get_relocated_section_contents),
* elfxx-mips.c (_bfd_elf_mips_get_relocated_section_contents):
Handle NULL data buffer.
* bfd.c (bfd_get_section_alloc_size): New function.
* bfd-in2.h: Regenerate.
* compress.c (bfd_get_full_section_contents): Correct section
malloc size.
* linker.c (default_indirect_link_order): Don't malloc memory
here before calling bfd_get_relocated_section_contents.
* simple.c (bfd_simple_get_relocated_section_contents): Likewise.
18 files changed:
bfd/bfd-in2.h
bfd/bfd.c
bfd/coff-alpha.c
bfd/coff-sh.c
bfd/compress.c
bfd/elf-m10200.c
bfd/elf-m10300.c
bfd/elf32-avr.c
bfd/elf32-cr16.c
bfd/elf32-crx.c
bfd/elf32-h8300.c
bfd/elf32-nds32.c
bfd/elf32-sh.c
bfd/elfxx-mips.c
bfd/linker.c
bfd/reloc.c
bfd/reloc16.c
bfd/simple.c