mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 19:44:11 +08:00
gas: make fix_new_exp()'s "exp" parameter const
This really should be only an input; in particular it looks bogus that O_add expressions are even altered. That altering and the recursion are even pointless: Once expanding what the inner call would do (with O_symbol) it becomes clear that this is no different than the default case. Simplify the code accordingly, retaining the comment.
This commit is contained in:
parent
641cf0e2c0
commit
c1a4b47e2a
18
gas/write.c
18
gas/write.c
@ -238,7 +238,7 @@ fixS *
|
||||
fix_new_exp (fragS *frag, /* Which frag? */
|
||||
unsigned long where, /* Where in that frag? */
|
||||
unsigned long size, /* 1, 2, or 4 usually. */
|
||||
expressionS *exp, /* Expression. */
|
||||
const expressionS *exp, /* Expression. */
|
||||
int pcrel, /* TRUE if PC-relative relocation. */
|
||||
RELOC_ENUM r_type /* Relocation type. */)
|
||||
{
|
||||
@ -255,20 +255,6 @@ fix_new_exp (fragS *frag, /* Which frag? */
|
||||
as_bad (_("register value used as expression"));
|
||||
break;
|
||||
|
||||
case O_add:
|
||||
/* This comes up when _GLOBAL_OFFSET_TABLE_+(.-L0) is read, if
|
||||
the difference expression cannot immediately be reduced. */
|
||||
{
|
||||
symbolS *stmp = make_expr_symbol (exp);
|
||||
|
||||
exp->X_op = O_symbol;
|
||||
exp->X_op_symbol = 0;
|
||||
exp->X_add_symbol = stmp;
|
||||
exp->X_add_number = 0;
|
||||
|
||||
return fix_new_exp (frag, where, size, exp, pcrel, r_type);
|
||||
}
|
||||
|
||||
case O_symbol_rva:
|
||||
add = exp->X_add_symbol;
|
||||
off = exp->X_add_number;
|
||||
@ -290,6 +276,8 @@ fix_new_exp (fragS *frag, /* Which frag? */
|
||||
off = exp->X_add_number;
|
||||
break;
|
||||
|
||||
case O_add: /* This comes up when _GLOBAL_OFFSET_TABLE_+(.-L0) is read, if
|
||||
the difference expression cannot immediately be reduced. */
|
||||
default:
|
||||
add = make_expr_symbol (exp);
|
||||
break;
|
||||
|
@ -187,7 +187,7 @@ extern fixS *fix_new (fragS *, unsigned long, unsigned long, symbolS *,
|
||||
extern fixS *fix_at_start (fragS *, unsigned long, symbolS *,
|
||||
offsetT, int, bfd_reloc_code_real_type);
|
||||
extern fixS *fix_new_exp (fragS *, unsigned long, unsigned long,
|
||||
expressionS *, int, bfd_reloc_code_real_type);
|
||||
const expressionS *, int, bfd_reloc_code_real_type);
|
||||
extern void write_print_statistics (FILE *);
|
||||
extern void as_bad_subtract (fixS *);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user