X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fapp.c;h=712bffef85171162ad3696d560f48caed8fb6ef9;hb=15091ded14ec08bd3f3a686d420c6009e1d2c518;hp=67402e20e524a78c1631a63a6fe3f6a105d77c27;hpb=b90efa5b79ac1524ec260f8eb89d1be37e0219a7;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/app.c b/gas/app.c index 67402e20e5..712bffef85 100644 --- a/gas/app.c +++ b/gas/app.c @@ -1,5 +1,5 @@ /* This is the Assembler Pre-Processor - Copyright (C) 1987-2015 Free Software Foundation, Inc. + Copyright (C) 1987-2021 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -56,6 +56,8 @@ static const char symver_pseudo[] = ".symver"; static const char * symver_state; #endif +static char last_char; + static char lex[256]; static const char symbol_chars[] = "$._ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; @@ -117,8 +119,7 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED) { lex['"'] = LEX_IS_STRINGQUOTE; -#if ! defined (TC_HPPA) && ! defined (TC_I370) - /* I370 uses single-quotes to delimit integer, float constants. */ +#if ! defined (TC_HPPA) lex['\''] = LEX_IS_ONECHAR_QUOTE; #endif @@ -211,7 +212,7 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED) /* Saved state of the scrubber. */ static int state; static int old_state; -static char *out_string; +static const char *out_string; static char out_buf[20]; static int add_newlines; static char *saved_input; @@ -229,7 +230,7 @@ struct app_save { int state; int old_state; - char * out_string; + const char * out_string; char out_buf[sizeof (out_buf)]; int add_newlines; char * saved_input; @@ -242,6 +243,7 @@ struct app_save #if defined TC_ARM && defined OBJ_ELF const char * symver_state; #endif + char last_char; }; char * @@ -249,7 +251,7 @@ app_push (void) { struct app_save *saved; - saved = (struct app_save *) xmalloc (sizeof (*saved)); + saved = XNEW (struct app_save); saved->state = state; saved->old_state = old_state; saved->out_string = out_string; @@ -259,7 +261,7 @@ app_push (void) saved->saved_input = NULL; else { - saved->saved_input = (char *) xmalloc (saved_input_len); + saved->saved_input = XNEWVEC (char, saved_input_len); memcpy (saved->saved_input, saved_input, saved_input_len); saved->saved_input_len = saved_input_len; } @@ -271,6 +273,7 @@ app_push (void) #if defined TC_ARM && defined OBJ_ELF saved->symver_state = symver_state; #endif + saved->last_char = last_char; /* do_scrub_begin() is not useful, just wastes time. */ @@ -310,6 +313,7 @@ app_pop (char *arg) #if defined TC_ARM && defined OBJ_ELF symver_state = saved->symver_state; #endif + last_char = saved->last_char; free (arg); } @@ -591,13 +595,11 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) state = old_state; PUT (ch); } -#ifndef NO_STRING_ESCAPES - else if (ch == '\\') + else if (TC_STRING_ESCAPES && ch == '\\') { state = 6; PUT (ch); } -#endif else if (scrub_m68k_mri && ch == '\n') { /* Just quietly terminate the string. This permits lines like @@ -695,6 +697,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) state = 9; break; } + /* Fall through. */ case 17: /* We have seen "af" at the start of a symbol, a ' here is a part of that symbol. */ @@ -871,7 +874,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) } #endif if (IS_COMMENT (ch) - || ch == '/' || IS_LINE_SEPARATOR (ch) || IS_PARALLEL_SEPARATOR (ch)) { @@ -1040,7 +1042,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) PUT (ch); break; -#ifndef IEEE_STYLE case LEX_IS_ONECHAR_QUOTE: #ifdef H_TICK_HEX if (state == 9 && enable_h_tick_hex) @@ -1102,7 +1103,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) out_string = out_buf; PUT (*out_string++); break; -#endif case LEX_IS_COLON: #ifdef KEEP_WHITE_AROUND_COLON @@ -1187,7 +1187,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) state = -2; break; } - else + else if (ch2 != EOF) { UNGET (ch2); } @@ -1281,17 +1281,15 @@ 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. */ - if (to > tostart && *(to - 1) == '\\') - /* Do not treat the @ as a start-of-comment. */ + /* 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. */ goto de_fault; -#endif #ifdef WARN_COMMENTS if (!found_comment) - as_where (&found_comment_file, &found_comment); + found_comment_file = as_where (&found_comment); #endif do { @@ -1321,8 +1319,8 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) else UNGET (quot); } - /* FALL THROUGH */ #endif + /* Fall through. */ case LEX_IS_SYMBOL_COMPONENT: if (state == 10) @@ -1464,6 +1462,8 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) fromeof: /* We have reached the end of the input. */ + if (to > tostart) + last_char = to[-1]; return to - tostart; tofull: @@ -1477,5 +1477,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) else saved_input = NULL; + if (to > tostart) + last_char = to[-1]; return to - tostart; }