This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] GAS: Replace macro LITERAL_PREFIXDOLLAR_HEX with a runtime value.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=cffc205c9eaacfa312323807cd60b9d3d1c26894

commit cffc205c9eaacfa312323807cd60b9d3d1c26894
Author: John Darrington <john@darrington.wattle.id.au>
Date:   Mon May 20 19:53:30 2019 +0200

    GAS: Replace macro LITERAL_PREFIXDOLLAR_HEX with a runtime value.
    
    In an upcoming commit, I need to be able to set the prefix used
    to introduce hexadecimal literal constants using a command line
    flag.   This is not currently possible, because the switch which
    determines this (LITERAL_PREFIXDOLLAR_HEX) is a macro set at
    build time.
    
    This change substitutes it for a variable to be set at start up.
    
    gas/ChangeLog:
    * expr.c (literal_prefix_dollar_hex): New variable.
    (operand)[case '$']: Use the new variable instead of the old macro.
    * expr.h (literal_prefix_dollar_hex): Declare it.
    * config/tc-epiphany.c (md_begin): Assign literal_prefix_dollar_hex.
    * config/tc-ip2k.c:      ditto
    * config/tc-mt.c:        ditto
    * config/tc-epiphany.h (LITERAL_PREFIXDOLLAR_HEX): Remove macro definition.
    * config/tc-ip2k.h:      ditto
    * config/tc-mt.h:        ditto

Diff:
---
 gas/config/tc-epiphany.c |  2 ++
 gas/config/tc-epiphany.h |  1 -
 gas/config/tc-ip2k.c     |  2 ++
 gas/config/tc-ip2k.h     |  1 -
 gas/config/tc-mt.c       |  2 ++
 gas/config/tc-mt.h       |  1 -
 gas/expr.c               | 19 +++++++++++++------
 gas/expr.h               |  2 ++
 8 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/gas/config/tc-epiphany.c b/gas/config/tc-epiphany.c
index ca24520..3117918 100644
--- a/gas/config/tc-epiphany.c
+++ b/gas/config/tc-epiphany.c
@@ -145,6 +145,8 @@ md_begin (void)
 
   /* Set the machine type.  */
   bfd_default_set_arch_mach (stdoutput, bfd_arch_epiphany, bfd_mach_epiphany32);
+
+  literal_prefix_dollar_hex = TRUE;
 }
 
 valueT
diff --git a/gas/config/tc-epiphany.h b/gas/config/tc-epiphany.h
index ace8f36..695b970 100644
--- a/gas/config/tc-epiphany.h
+++ b/gas/config/tc-epiphany.h
@@ -37,7 +37,6 @@
 /* We don't need to handle .word strangely.  */
 #define WORKING_DOT_WORD
 
-#define LITERAL_PREFIXDOLLAR_HEX
 #define LITERAL_PREFIXPERCENT_BIN
 #define DOUBLESLASH_LINE_COMMENTS
 
diff --git a/gas/config/tc-ip2k.c b/gas/config/tc-ip2k.c
index ab00b05..0fcc000 100644
--- a/gas/config/tc-ip2k.c
+++ b/gas/config/tc-ip2k.c
@@ -160,6 +160,8 @@ md_begin (void)
 
   /* Set the machine type.  */
   bfd_default_set_arch_mach (stdoutput, bfd_arch_ip2k, ip2k_mach);
+
+  literal_prefix_dollar_hex = TRUE;
 }
 
 
diff --git a/gas/config/tc-ip2k.h b/gas/config/tc-ip2k.h
index 0b38c9dc..ae9510d 100644
--- a/gas/config/tc-ip2k.h
+++ b/gas/config/tc-ip2k.h
@@ -38,7 +38,6 @@
 /* We don't need to handle .word strangely.  */
 #define WORKING_DOT_WORD
 
-#define LITERAL_PREFIXDOLLAR_HEX
 #define LITERAL_PREFIXPERCENT_BIN
 #define DOUBLESLASH_LINE_COMMENTS
 
diff --git a/gas/config/tc-mt.c b/gas/config/tc-mt.c
index b93a53e..bd51854 100644
--- a/gas/config/tc-mt.c
+++ b/gas/config/tc-mt.c
@@ -178,6 +178,8 @@ md_begin (void)
 
   /* Set the machine type.  */
   bfd_default_set_arch_mach (stdoutput, bfd_arch_mt, mt_mach);
+
+  literal_prefix_dollar_hex = TRUE;
 }
 
 void
diff --git a/gas/config/tc-mt.h b/gas/config/tc-mt.h
index 111dadd..8a96d2c 100644
--- a/gas/config/tc-mt.h
+++ b/gas/config/tc-mt.h
@@ -41,7 +41,6 @@
 /* All mt instructions are multiples of 32 bits.  */
 #define DWARF2_LINE_MIN_INSN_LENGTH 4
 
-#define LITERAL_PREFIXDOLLAR_HEX
 #define LITERAL_PREFIXPERCENT_BIN
 
 #define md_apply_fix mt_apply_fix
diff --git a/gas/expr.c b/gas/expr.c
index 3efde88..0fab955 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -35,6 +35,8 @@
 #define CHAR_BIT 8
 #endif
 
+bfd_boolean literal_prefix_dollar_hex = FALSE;
+
 static void floating_constant (expressionS * expressionP);
 static valueT generic_bignum_to_int32 (void);
 #ifdef BFD64
@@ -778,14 +780,19 @@ operand (expressionS *expressionP, enum expr_mode mode)
 			expressionP);
       break;
 
-#ifdef LITERAL_PREFIXDOLLAR_HEX
     case '$':
-      /* $L is the start of a local label, not a hex constant.  */
-      if (* input_line_pointer == 'L')
-      goto isname;
-      integer_constant (16, expressionP);
+      if (literal_prefix_dollar_hex)
+        {
+          /* $L is the start of a local label, not a hex constant.  */
+          if (* input_line_pointer == 'L')
+            goto isname;
+          integer_constant (16, expressionP);
+        }
+      else
+        {
+          goto isname;
+        }
       break;
-#endif
 
 #ifdef LITERAL_PREFIXPERCENT_BIN
     case '%':
diff --git a/gas/expr.h b/gas/expr.h
index a6cb5cf..c7d0681 100644
--- a/gas/expr.h
+++ b/gas/expr.h
@@ -187,3 +187,5 @@ extern symbolS *expr_build_uconstant (offsetT);
 extern symbolS *expr_build_dot (void);
 
 int resolve_expression (expressionS *);
+
+extern bfd_boolean literal_prefix_dollar_hex;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]