From 750e4bf70f2caab39dc5d0a1b2d26c9ca1fbd909 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Mon, 20 Jul 2020 08:56:23 +0200 Subject: 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). --- gas/ChangeLog | 10 ++++++++++ gas/app.c | 23 +++++------------------ 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index f63af2e..67fabb9 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,15 @@ 2020-07-20 Jan Beulich + 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 + * 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 00c31bb..4e5a083 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 \ + by stripping the onwards. Yuck. */ if ((to > tostart ? to[-1] : last_char) == '\\') - /* Do not treat the @ as a start-of-comment. */ + /* Do not treat the 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; } -- cgit v1.1