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.
This commit is contained in:
Jan Beulich 2021-04-06 10:56:30 +02:00
parent bd3d1480a8
commit da0835aebe
2 changed files with 7 additions and 1 deletions

View 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,

View 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);