Prevent a seg-fault in the assembler when provided with a bogus input source file.

PR gas/20941
	* symbols.c (snapshot_symbol): Handle the case where
	resolve_expression returns a local symbol.
This commit is contained in:
Nick Clifton 2017-05-03 09:52:01 +01:00
parent 35387fdec5
commit e78bb25cb6
2 changed files with 23 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2017-05-03 Nick Clifton <nickc@redhat.com>
PR gas/20941
* symbols.c (snapshot_symbol): Handle the case where
resolve_expression returns a local symbol.
2017-05-02 Maciej W. Rozycki <macro@imgtec.com>
* config/tc-mips.c (append_insn): Call `symbol_append' for any

View File

@ -1561,9 +1561,23 @@ snapshot_symbol (symbolS **symbolPP, valueT *valueP, segT *segP, fragS **fragPP)
}
*symbolPP = symbolP;
*valueP = exp.X_add_number;
*segP = symbolP->bsym->section;
*fragPP = symbolP->sy_frag;
/* A bogus input file can result in resolve_expression()
generating a local symbol, so we have to check again. */
if (LOCAL_SYMBOL_CHECK (symbolP))
{
struct local_symbol *locsym = (struct local_symbol *) symbolP;
*valueP = locsym->lsy_value;
*segP = locsym->lsy_section;
*fragPP = local_symbol_get_frag (locsym);
}
else
{
*valueP = exp.X_add_number;
*segP = symbolP->bsym->section;
*fragPP = symbolP->sy_frag;
}
if (*segP == expr_section)
switch (exp.X_op)