aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2024-10-29 08:08:29 +0100
committerJan Beulich <jbeulich@suse.com>2024-10-29 08:08:29 +0100
commitc1a4b47e2a3016ae9144f701319c529b340dec75 (patch)
tree7c425c4571f3dbd07511ad0188d2b540c31b110f /gas
parentgas: constify md_{short,long}opts and md_longopts_size (diff)
downloadbinutils-gdb-c1a4b47e2a3016ae9144f701319c529b340dec75.tar.gz
binutils-gdb-c1a4b47e2a3016ae9144f701319c529b340dec75.tar.bz2
binutils-gdb-c1a4b47e2a3016ae9144f701319c529b340dec75.zip
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.
Diffstat (limited to 'gas')
-rw-r--r--gas/write.c18
-rw-r--r--gas/write.h2
2 files changed, 4 insertions, 16 deletions
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 *);