[binutils-gdb] gas: missing (re-)initialization of local variable in fixup_segment()

Jan Beulich jbeulich@sourceware.org
Tue Apr 6 08:56:46 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=da0835aebea71232f6b4fb4dea3ee18bdef0c139

commit da0835aebea71232f6b4fb4dea3ee18bdef0c139
Author: Jan Beulich <jbeulich@suse.com>
Date:   Tue Apr 6 10:56:30 2021 +0200

    gas: missing (re-)initialization of local variable in fixup_segment()
    
    At the very least this has been causing bogus diagnostics, e.g.
    
            .text
            .data
            .long .bss - .
            .long -.text
            .bss
    
    yielding
    
    Error: can't resolve `0' {.bss section} - `.text' {.text section}
    
    instead of
    
    Error: can't resolve `0' {*ABS* section} - `.text' {.text section}
    
    In particular for targets overriding any of TC_FORCE_RELOCATION_* & Co
    or for ones setting md_register_arithmetic to true the problems may be
    worse.

Diff:
---
 gas/ChangeLog | 5 +++++
 gas/write.c   | 3 ++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index cd2abaf9198..8558a87093c 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2021-04-06  Jan Beulich  <jbeulich@suse.com>
+
+	* write.c (fixup_segment): Move add_symbol_segment declaration
+	into main loop.
+
 2021-04-05  Alan Modra  <amodra@gmail.com>
 
 	* configure.ac: Don't check for string.h, strings.h, stdlib.h,
diff --git a/gas/write.c b/gas/write.c
index c8e6ab4a6cf..706c9c043c6 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -922,7 +922,6 @@ fixup_segment (fixS *fixP, segT this_segment)
 {
   valueT add_number;
   fragS *fragP;
-  segT add_symbol_segment = absolute_section;
 
   if (fixP != NULL && abs_section_sym == NULL)
     abs_section_sym = section_symbol (absolute_section);
@@ -953,6 +952,8 @@ fixup_segment (fixS *fixP, segT this_segment)
 
   for (; fixP; fixP = fixP->fx_next)
     {
+      segT add_symbol_segment = absolute_section;
+
 #ifdef DEBUG5
       fprintf (stderr, "\nprocessing fixup:\n");
       print_fixup (fixP);


More information about the Binutils-cvs mailing list