Add a -mno-dollar-line-separator command line option to the AVR assembler.
authorMatt Jacobson <mhjacobson@me.com>
Wed, 11 Aug 2021 09:03:19 +0000 (10:03 +0100)
committerNick Clifton <nickc@redhat.com>
Wed, 11 Aug 2021 09:03:19 +0000 (10:03 +0100)
Some frontends, like the gcc Objective-C frontend, emit symbols with $
characters in them.  The AVR target code in gas treats $ as a line separator,
so the code doesn?t assemble correctly.

Provide a machine-specific option to disable treating $ as a line separator.

* config/tc-avr.c (enum options): Add option flag.
(struct option): Add option -mno-dollar-line-separator.
(md_parse_option): Adjust treatment of $ when option is present.
* config/tc-avr.h: Use avr_line_separator_chars.

gas/ChangeLog
gas/config/tc-avr.c
gas/config/tc-avr.h
gas/doc/c-avr.texi

index 14666b4b1f034d0248e7a5c0382b3c6206bbf50e..dd19f3e57ed41671770304ff6264d76bcd0d6df3 100644 (file)
@@ -1,3 +1,12 @@
+2021-08-11  Matt Jacobson  <mhjacobson@me.com>
+
+       * config/tc-avr.c (enum options): Add option flag.
+       (struct option): Add option -mno-dollar-line-separator.
+       (md_parse_option): Adjust treatment of $ when option is present.
+       (usage): Mention the new option.
+       * config/tc-avr.h: Use avr_line_separator_chars.
+       * doc/c-avr.texi: Document the new option.
+
 2021-08-11  Nick Clifton  <nickc@redhat.com>
 
        * config/tc-tic4x.c (tic4x_gen_to_words): Fix typo.
index 40dcce7dca53bb089cb5a31cbbd95a21a8acea83..e731ea9b7d9d482e43aeb54d0bcad8c7d29fc51e 100644 (file)
@@ -157,7 +157,9 @@ static struct avr_opcodes_s *avr_gccisr_opcode;
 
 const char comment_chars[] = ";";
 const char line_comment_chars[] = "#";
-const char line_separator_chars[] = "$";
+
+const char *avr_line_separator_chars = "$";
+static const char *avr_line_separator_chars_no_dollar = "";
 
 const char *md_shortopts = "m:";
 struct mcu_type_s
@@ -565,7 +567,8 @@ enum options
   OPTION_ISA_RMW,
   OPTION_LINK_RELAX,
   OPTION_NO_LINK_RELAX,
-  OPTION_HAVE_GCCISR
+  OPTION_HAVE_GCCISR,
+  OPTION_NO_DOLLAR_LINE_SEPARATOR,
 };
 
 struct option md_longopts[] =
@@ -578,6 +581,7 @@ struct option md_longopts[] =
   { "mlink-relax",  no_argument, NULL, OPTION_LINK_RELAX  },
   { "mno-link-relax",  no_argument, NULL, OPTION_NO_LINK_RELAX  },
   { "mgcc-isr",     no_argument, NULL, OPTION_HAVE_GCCISR },
+  { "mno-dollar-line-separator", no_argument, NULL, OPTION_NO_DOLLAR_LINE_SEPARATOR },
   { NULL, no_argument, NULL, 0 }
 };
 
@@ -687,6 +691,8 @@ md_show_usage (FILE *stream)
        "  -mlink-relax     generate relocations for linker relaxation (default)\n"
        "  -mno-link-relax  don't generate relocations for linker relaxation.\n"
        "  -mgcc-isr        accept the __gcc_isr pseudo-instruction.\n"
+       "  -mno-dollar-line-separator\n"
+        "                   do not treat the $ character as a line separator.\n"
         ));
   show_mcu_list (stream);
 }
@@ -756,6 +762,10 @@ md_parse_option (int c, const char *arg)
     case OPTION_HAVE_GCCISR:
       avr_opt.have_gccisr = 1;
       return 1;
+    case OPTION_NO_DOLLAR_LINE_SEPARATOR:
+      avr_line_separator_chars = avr_line_separator_chars_no_dollar;
+      lex_type['$'] = LEX_NAME | LEX_BEGIN_NAME;
+      return 1;
     }
 
   return 0;
index 0f85099abf71b5b54a46b14d5f19a6d1c526472c..58626970fa897121ffdd17b40b0914a09db9dcac 100644 (file)
@@ -143,7 +143,7 @@ extern int avr_force_relocation (struct fix *);
    would print `12 34 56 78'.  The default value is 4.  */
 #define LISTING_WORD_SIZE 2
 
-/* AVR port uses `$' as a logical line separator */
+/* AVR port uses `$' as a logical line separator by default. */
 #define LEX_DOLLAR 0
 
 /* An `.lcomm' directive with no explicit alignment parameter will
@@ -244,3 +244,6 @@ struct avr_frag_data
 #define TC_FRAG_TYPE                   struct avr_frag_data
 #define TC_FRAG_INIT(frag, max_bytes)  avr_frag_init (frag)
 extern void avr_frag_init (fragS *);
+
+#define tc_line_separator_chars avr_line_separator_chars
+extern const char *avr_line_separator_chars;
index ab7973936284cd5400f8454486546ba3f69ca721..f83cbe130012f00d9e285a7e8a59263a7fe2327e 100644 (file)
@@ -159,6 +159,12 @@ information.
 @item -mgcc-isr
 Enable the @code{__gcc_isr} pseudo instruction.
 
+@cindex @code{-mno-dollar-line-separator} command line option, AVR
+@item -mno-dollar-line-separator
+Do not treat the @code{$} character as a line separator character.
+This is for languages where @code{$} is valid character inside symbol
+names.
+
 @end table
 
 
@@ -189,7 +195,8 @@ control command (@pxref{Preprocessing}).
 @cindex AVR line separator
 
 The @samp{$} character can be used instead of a newline to separate
-statements.
+statements.  Note: the @option{-mno-dollar-line-separator} option
+disables this behaviour.
 
 @node AVR-Regs
 @subsection Register Names