[binutils-gdb] bfd: Discard symbol regardless of warning flag
Torbjorn Svensson
azoff@sourceware.org
Tue Dec 20 10:38:08 GMT 2022
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=106791196f98a0f21babf4dd46a731b5d1747d3b
commit 106791196f98a0f21babf4dd46a731b5d1747d3b
Author: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
Date: Sat Dec 17 11:16:19 2022 +0100
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 <torbjorn.svensson@foss.st.com>
Co-Authored-By: Yvan ROUX <yvan.roux@foss.st.com>
Diff:
---
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(-)
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
More information about the Binutils-cvs
mailing list