[PATCH] ld: Check for ELF input before accessing ELF section data

H.J. Lu hjl.tools@gmail.com
Wed Jan 13 14:41:19 GMT 2021


On Wed, Jan 13, 2021 at 3:50 AM Alan Modra via Binutils
<binutils@sourceware.org> wrote:
>
> This moves the SHF_LINK_ORDER sorting from bfd_elf_final_link to
> the linker which means generic ELF targets now support SHF_LINK_ORDER
> and  we cope with odd cases that require resizing of output sections.
> The patch also fixes two bugs in the current implementation,
> introduced by commit cd6d537c48fa.  The pattern test used by that
> commit meant that sections matching something like
> "*(.IA_64.unwind* .gnu.linkonce.ia64unw.*)" would not properly sort a
> mix of sections matching the two wildcards.  That commit also assumed
> a stable qsort.
>
> bfd/
>         PR 27160
>         * section.c (struct bfd_section): Remove pattern field.
>         (BFD_FAKE_SECTION): Adjust to suit.
>         * bfd-in2.h: Regenerate.
>         * elflink.c (compare_link_order, elf_fixup_link_order): Delete.
>         (bfd_elf_final_link): Don't call elf_fixup_link_order.
> ld/
>         PR 27160
>         * ldlang.h (lang_output_section_statement_type): Add data field.
>         (lang_input_section_type, lang_section_bst_type): Add pattern field.
>         (statement_list): Declare.
>         (lang_add_section): Adjust prototype.
>         * emultempl/aarch64elf.em: Adjust lang_add_section calls.
>         * emultempl/armelf.em: Likewise.
>         * emultempl/beos.em: Likewise.
>         * emultempl/cskyelf.em: Likewise.
>         * emultempl/hppaelf.em: Likewise.
>         * emultempl/m68hc1xelf.em: Likewise.
>         * emultempl/metagelf.em: Likewise.
>         * emultempl/mipself.em: Likewise.
>         * emultempl/mmo.em: Likewise.
>         * emultempl/msp430.em: Likewise.
>         * emultempl/nios2elf.em: Likewise.
>         * emultempl/pe.em: Likewise.
>         * emultempl/pep.em: Likewise.
>         * emultempl/ppc64elf.em: Likewise.
>         * emultempl/spuelf.em: Likewise.
>         * emultempl/vms.em: Likewise.
>         * ldelf.c: Likewise.
>         * ldelfgen.c: Include ldctor.h.
>         (struct os_sections): New.
>         (add_link_order_input_section, link_order_scan): New functions.
>         (compare_link_order, fixup_link_order): New functions.
>         (ldelf_map_segments): Call link_order_scan and fixup_link_order.
>         * ldlang.c (statement_list): Make global.
>         (output_section_callback_fast): Save pattern in tree node.
>         (lang_add_section): Add pattern parameter, save in lang_input_section.
>         (output_section_callback_tree_to_list): Adjust lang_add_section calls.
>         (lang_insert_orphan, output_section_callback): Likewise.
>         (ldlang_place_orphan): Likewise.
>         (gc_section_callback): Don't set section->pattern
>         * testsuite/ld-elf/pr26256-2a.d: Don't xfail generic.
>         * testsuite/ld-elf/pr26256-3b.d: Likewise.
>         * testsuite/ld-elf/pr26256-2b.d: Likewise.  notarget xgate.
>

This caused:

FAIL: Build pe-x86-64-1
FAIL: Build pe-x86-64-2
FAIL: Build pe-x86-64-3
FAIL: Build pe-x86-64-4

on Linux/x86-64.  I am checking this patch to fix it.

-- 
H.J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-ld-Check-for-ELF-input-before-accessing-ELF-section-.patch
Type: application/x-patch
Size: 1531 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20210113/c6fb3038/attachment-0001.bin>


More information about the Binutils mailing list