gas: missing (re-)initialization of local variable in fixup_segment()
authorJan Beulich <jbeulich@suse.com>
Tue, 6 Apr 2021 08:56:30 +0000 (10:56 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 6 Apr 2021 08:56:30 +0000 (10:56 +0200)
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.

gas/ChangeLog
gas/write.c

index cd2abaf9198bdcaca8885495e920654b68e57606..8558a87093c5e265b846eddbc94f30718568c3dc 100644 (file)
@@ -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,
index c8e6ab4a6cf3371d0edf82d885ec538c529d58bb..706c9c043c61bebb9e8b97eb978b93b22fa0bccd 100644 (file)
@@ -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);