From da0835aebea71232f6b4fb4dea3ee18bdef0c139 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 6 Apr 2021 10:56:30 +0200 Subject: [PATCH] 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. --- 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 + + * write.c (fixup_segment): Move add_symbol_segment declaration + into main loop. + 2021-04-05 Alan Modra * 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); -- 2.30.2