[PATCH] gas: allow disabling dollar-as-line-separator for AVR target
Matt Jacobson
mhjacobson@me.com
Tue Jul 27 03:50:09 GMT 2021
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.
I don't have commit access, so if this patch is suitable, I'd need someone else
to commit it for me. Thanks.
gas/ChangeLog:
2021-07-26 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.
* config/tc-avr.h: Use avr_line_separator_chars.
diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c
index 397f22d5502..20d92c6e8c4 100644
--- a/gas/config/tc-avr.c
+++ b/gas/config/tc-avr.c
@@ -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 }
};
@@ -756,6 +760,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;
diff --git a/gas/config/tc-avr.h b/gas/config/tc-avr.h
index 0f85099abf7..58626970fa8 100644
--- a/gas/config/tc-avr.h
+++ b/gas/config/tc-avr.h
@@ -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;
More information about the Binutils
mailing list