From: Torbjörn SVENSSON Date: Sat, 17 Dec 2022 10:16:19 +0000 (+0100) Subject: bfd: Discard symbol regardless of warning flag X-Git-Tag: binutils-2_40~234 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=106791196f98a0f21babf4dd46a731b5d1747d3b;p=thirdparty%2Fbinutils-gdb.git bfd: Discard symbol regardless of warning flag 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 --- 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