]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: make fix_new_exp()'s "exp" parameter const
authorJan Beulich <jbeulich@suse.com>
Tue, 29 Oct 2024 07:08:29 +0000 (08:08 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 29 Oct 2024 07:08:29 +0000 (08:08 +0100)
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.

gas/write.c
gas/write.h

index 18cf18fc8301968794bf1a12ec14d16e22270896..853a9a012b765661bfbea470dd33fa2cda206c10 100644 (file)
@@ -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;
index 8e1b279a398a244d99e73cc6d02a8f233fa97f3c..6cdd734cf0ed2ee2ac12886df2fdd382104d0126 100644 (file)
@@ -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 *);