]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: streamline expr_build_dot()
authorJan Beulich <jbeulich@suse.com>
Tue, 3 Dec 2024 09:47:36 +0000 (10:47 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 3 Dec 2024 09:47:36 +0000 (10:47 +0100)
There's no point involving symbol_clone_if_forward_ref(), just for it to
replace dot_symbol by one obtained from symbol_temp_new_now(). For the
abs-section case also produce a slightly more "complete" (as in: all
potentially relevant fields filled) expression by going through
expr_build_uconstant().

Move the function next to current_location(), for it to be easier to see
the (dis)similarities. Correct the function's comment while there.

gas/expr.c

index fc3b6a3522cfc5373127e5792360365146f6ab66..056870bbb237260cc04367c89126713530c97f12 100644 (file)
@@ -193,17 +193,6 @@ expr_build_uconstant (offsetT value)
   e.X_extrabit = 0;
   return make_expr_symbol (&e);
 }
-
-/* Build an expression for the current location ('.').  */
-
-symbolS *
-expr_build_dot (void)
-{
-  expressionS e;
-
-  current_location (&e);
-  return symbol_clone_if_forward_ref (make_expr_symbol (&e));
-}
 \f
 /* Build any floating-point literal here.
    Also build any bignum literal here.  */
@@ -754,6 +743,24 @@ current_location (expressionS *expressionp)
     }
 }
 
+/* Make a symbol for the current location ('.').  */
+
+symbolS *
+expr_build_dot (void)
+{
+  if (now_seg != absolute_section)
+    {
+      symbolS *symbolP = symbol_temp_new_now ();
+
+#ifdef tc_new_dot_label
+      tc_new_dot_label (symbolP);
+#endif
+      return symbolP;
+    }
+
+  return expr_build_uconstant (abs_section_offset);
+}
+
 #ifndef md_register_arithmetic
 # define md_register_arithmetic 1
 #endif