From: Jan Beulich Date: Tue, 29 Oct 2024 07:08:29 +0000 (+0100) Subject: gas: make fix_new_exp()'s "exp" parameter const X-Git-Tag: gdb-16-branchpoint~572 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c1a4b47e2a3016ae9144f701319c529b340dec75;p=thirdparty%2Fbinutils-gdb.git 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. --- diff --git a/gas/write.c b/gas/write.c index 18cf18fc830..853a9a012b7 100644 --- a/gas/write.c +++ b/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; diff --git a/gas/write.h b/gas/write.h index 8e1b279a398..6cdd734cf0e 100644 --- a/gas/write.h +++ b/gas/write.h @@ -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 *);