X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gas%2Fapp.c;h=01b90d10bdf42a9e1010a069e0c2ad4e5b3a03f0;hb=db3ad2f031d4da70db35977abbcede0399d81d6b;hp=4b53ce706127b55f56b0980d6ec42671202b015b;hpb=1a0670f37442b7ae904932b347353046126b990c;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/app.c b/gas/app.c index 4b53ce7061..01b90d10bd 100644 --- a/gas/app.c +++ b/gas/app.c @@ -1,5 +1,5 @@ /* This is the Assembler Pre-Processor - Copyright (C) 1987-2016 Free Software Foundation, Inc. + Copyright (C) 1987-2019 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -55,6 +55,9 @@ 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[] = @@ -117,8 +120,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 @@ -242,6 +244,9 @@ struct app_save #if defined TC_ARM && defined OBJ_ELF const char * symver_state; #endif +#ifdef TC_ARM + char last_char; +#endif }; char * @@ -271,6 +276,9 @@ 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. */ @@ -310,6 +318,9 @@ 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); } @@ -1041,7 +1052,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) @@ -1103,7 +1113,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 @@ -1188,7 +1197,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); } @@ -1285,7 +1294,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) #ifdef TC_ARM /* For the ARM, care is needed not to damage occurrences of \@ by stripping the @ onwards. Yuck. */ - if (to > tostart && *(to - 1) == '\\') + if ((to > tostart ? to[-1] : last_char) == '\\') /* Do not treat the @ as a start-of-comment. */ goto de_fault; #endif @@ -1322,8 +1331,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) @@ -1465,6 +1474,10 @@ 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: @@ -1478,5 +1491,9 @@ 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; }