[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