diff options
author | Jan Beulich <jbeulich@suse.com> | 2021-04-06 10:56:30 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2021-04-06 10:56:30 +0200 |
commit | da0835aebea71232f6b4fb4dea3ee18bdef0c139 (patch) | |
tree | 2313316a06212ece07aa8c89e12311528315519d /gas/write.c | |
parent | bd3d1480a80effbbf3eedf1bd51368730ec9078d (diff) | |
download | binutils-da0835aebea71232f6b4fb4dea3ee18bdef0c139.zip binutils-da0835aebea71232f6b4fb4dea3ee18bdef0c139.tar.gz binutils-da0835aebea71232f6b4fb4dea3ee18bdef0c139.tar.bz2 |
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.
Diffstat (limited to 'gas/write.c')
-rw-r--r-- | gas/write.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gas/write.c b/gas/write.c index c8e6ab4..706c9c0 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); |