summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2020-07-20 08:56:23 +0200
committerJan Beulich <jbeulich@suse.com>2020-07-20 08:56:23 +0200
commit750e4bf70f2caab39dc5d0a1b2d26c9ca1fbd909 (patch)
treebe3d6d2b89bbb851fb2ba3701cc6814c00e62e18
parent48ef937e913d31bbd24a7ae568d30b499a6b3477 (diff)
gas: generalize comment character escaping recognition
PR gas/4572 Generalize what ab1fadc6b2f0 ("PR22714, Assembler preprocessor loses track of \@") did to always honor escaped comment chars. Use this then to support escaped /, %, and * operators on x86, when / is a comment char (to match the Sun assembler's behavior).
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/app.c23
2 files changed, 15 insertions, 18 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index f63af2efc1..67fabb9eab 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,15 @@
2020-07-20 Jan Beulich <jbeulich@suse.com>
+ PR gas/4572
+ * app.c (last_char): Drop TC_ARM conditional around it.
+ (struct app_save): Drop TC_ARM conditional around last_char.
+ (app_push, app_pop): Drop TC_ARM conditional from last_char
+ accesses.
+ (do_scrub_chars): Likewise. Drop TC_ARM conditional from
+ backslash-precedes-comment-character check.
+
+2020-07-20 Jan Beulich <jbeulich@suse.com>
+
* config/tc-i386.c (frag_opcode_byte): New.
(output_branch): Emit error when in absolute section.
(output_jump, output_insn): Use frag_opcode_byte. Handle being
diff --git a/gas/app.c b/gas/app.c
index 00c31bbf39..4e5a08341e 100644
--- a/gas/app.c
+++ b/gas/app.c
@@ -55,9 +55,8 @@ static const char mri_pseudo[] = ".mri 0";
static const char symver_pseudo[] = ".symver";
static const char * symver_state;
#endif
-#ifdef TC_ARM
+
static char last_char;
-#endif
static char lex[256];
static const char symbol_chars[] =
@@ -244,9 +243,7 @@ struct app_save
#if defined TC_ARM && defined OBJ_ELF
const char * symver_state;
#endif
-#ifdef TC_ARM
- char last_char;
-#endif
+ char last_char;
};
char *
@@ -276,9 +273,7 @@ app_push (void)
#if defined TC_ARM && defined OBJ_ELF
saved->symver_state = symver_state;
#endif
-#ifdef TC_ARM
saved->last_char = last_char;
-#endif
/* do_scrub_begin() is not useful, just wastes time. */
@@ -318,9 +313,7 @@ app_pop (char *arg)
#if defined TC_ARM && defined OBJ_ELF
symver_state = saved->symver_state;
#endif
-#ifdef TC_ARM
last_char = saved->last_char;
-#endif
free (arg);
}
@@ -1289,13 +1282,11 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
goto de_fault;
#endif
-#ifdef TC_ARM
- /* For the ARM, care is needed not to damage occurrences of \@
- by stripping the @ onwards. Yuck. */
+ /* Care is needed not to damage occurrences of \<comment-char>
+ by stripping the <comment-char> onwards. Yuck. */
if ((to > tostart ? to[-1] : last_char) == '\\')
- /* Do not treat the @ as a start-of-comment. */
+ /* Do not treat the <comment-char> as a start-of-comment. */
goto de_fault;
-#endif
#ifdef WARN_COMMENTS
if (!found_comment)
@@ -1472,10 +1463,8 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
fromeof:
/* We have reached the end of the input. */
-#ifdef TC_ARM
if (to > tostart)
last_char = to[-1];
-#endif
return to - tostart;
tofull:
@@ -1489,9 +1478,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen)
else
saved_input = NULL;
-#ifdef TC_ARM
if (to > tostart)
last_char = to[-1];
-#endif
return to - tostart;
}