From 106791196f98a0f21babf4dd46a731b5d1747d3b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Torbj=C3=B6rn=20SVENSSON?= Date: Sat, 17 Dec 2022 11:16:19 +0100 Subject: [PATCH] bfd: Discard symbol regardless of warning flag MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The discard of symbols should be performed whether the warning for the discard is enabled or not. Without this patch, ld would segfault in bfd_section_removed_from_list, called in the if-statement right after this block, as the argument isec->output_section can be NULL. Signed-off-by: Torbjörn SVENSSON Co-Authored-By: Yvan ROUX --- bfd/elflink.c | 10 +++---- ld/testsuite/ld-arm/arm-elf.exp | 1 + ld/testsuite/ld-arm/non-contiguous-arm7.d | 4 +++ ld/testsuite/ld-arm/non-contiguous-arm7.ld | 32 ++++++++++++++++++++++ ld/testsuite/ld-arm/non-contiguous-arm7.s | 16 +++++++++++ 5 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 ld/testsuite/ld-arm/non-contiguous-arm7.d create mode 100644 ld/testsuite/ld-arm/non-contiguous-arm7.ld create mode 100644 ld/testsuite/ld-arm/non-contiguous-arm7.s diff --git a/bfd/elflink.c b/bfd/elflink.c index fc3edef9a05..0368256970b 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -11154,12 +11154,12 @@ elf_link_input_bfd (struct elf_final_link_info *flinfo, bfd *input_bfd) if (isym->st_shndx != SHN_UNDEF && isym->st_shndx < SHN_LORESERVE && isec->output_section == NULL - && flinfo->info->non_contiguous_regions - && flinfo->info->non_contiguous_regions_warnings) + && flinfo->info->non_contiguous_regions) { - _bfd_error_handler (_("warning: --enable-non-contiguous-regions " - "discards section `%s' from '%s'\n"), - isec->name, bfd_get_filename (isec->owner)); + if (flinfo->info->non_contiguous_regions_warnings) + _bfd_error_handler (_("warning: --enable-non-contiguous-regions " + "discards section `%s' from '%s'\n"), + isec->name, bfd_get_filename (isec->owner)); continue; } diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index e53b9bba723..ce3605d3709 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -1271,6 +1271,7 @@ run_dump_test "non-contiguous-arm3" run_dump_test "non-contiguous-arm4" run_dump_test "non-contiguous-arm5" run_dump_test "non-contiguous-arm6" +run_dump_test "non-contiguous-arm7" if { !$is_nacl && [check_shared_lib_support] } { run_dump_test "thumb-plt" diff --git a/ld/testsuite/ld-arm/non-contiguous-arm7.d b/ld/testsuite/ld-arm/non-contiguous-arm7.d new file mode 100644 index 00000000000..b8f08d4661d --- /dev/null +++ b/ld/testsuite/ld-arm/non-contiguous-arm7.d @@ -0,0 +1,4 @@ +#name: non-contiguous-arm7 +#source: non-contiguous-arm7.s +#ld: --enable-non-contiguous-regions -T non-contiguous-arm7.ld +#error: \A.*unresolvable R_ARM_ABS32 relocation against symbol .MY_BUF..*\Z diff --git a/ld/testsuite/ld-arm/non-contiguous-arm7.ld b/ld/testsuite/ld-arm/non-contiguous-arm7.ld new file mode 100644 index 00000000000..9934fdfd3a4 --- /dev/null +++ b/ld/testsuite/ld-arm/non-contiguous-arm7.ld @@ -0,0 +1,32 @@ +/* + The section .bss.MY_BUF won't fit in RAM1 or RAM2 +*/ + +MEMORY +{ + ROM (rx) : ORIGIN = 0x8000000, LENGTH = 10K + RAM1 (xrw) : ORIGIN = 0x10000000, LENGTH = 64K + RAM2 (xrw) : ORIGIN = 0x20000000, LENGTH = 96K +} + +SECTIONS +{ + .text : + { + KEEP(*(.text.foo)) ; + } >ROM + + .bss : + { + _sbss = .; + *(.bss) *(.bss*) ; + _ebss = .; + } >RAM1 + + .bss_ram2 : + { + _sbss_ram2 = .; + *(.bss) *(.bss*) ; + _ebss_ram2 = .; + } >RAM2 +} diff --git a/ld/testsuite/ld-arm/non-contiguous-arm7.s b/ld/testsuite/ld-arm/non-contiguous-arm7.s new file mode 100644 index 00000000000..be0a407ddc4 --- /dev/null +++ b/ld/testsuite/ld-arm/non-contiguous-arm7.s @@ -0,0 +1,16 @@ + .global MY_BUF + .section .bss.MY_BUF,"aw",%nobits + .type MY_BUF, %object + .size MY_BUF, 102400 +MY_BUF: + .space 102400 + + .section .text.foo,"ax",%progbits + .global foo + .type foo, %function +foo: + ldr r0, .L3 + bx lr +.L3: + .word MY_BUF + .size foo, .-foo -- 2.30.2