X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=ld%2Fldlex.l;h=a19c5d6efe5db20b3a22a64f6121546a3bae9553;hb=b90efa5b79ac1524ec260f8eb89d1be37e0219a7;hp=ddc4d5e687ee6fbede3ae0f14da17363bb3cc703;hpb=fb55f9b8ae29f5b7d30474d4322fe4573a9aceeb;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/ldlex.l b/ld/ldlex.l index ddc4d5e687..a19c5d6efe 100644 --- a/ld/ldlex.l +++ b/ld/ldlex.l @@ -1,79 +1,96 @@ -%{ - -/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc. +%option nounput -This file is part of GLD, the Gnu Linker. +%{ -GLD is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. +/* Copyright (C) 1991-2015 Free Software Foundation, Inc. + Written by Steve Chamberlain of Cygnus Support. -GLD is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + This file is part of the GNU Binutils. -You should have received a copy of the GNU General Public License -along with GLD; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. -/* -This was written by steve chamberlain - sac@cygnus.com -*/ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ -#include -#include -/* start-sanitize-mpw */ -#ifdef MPW -/* Prevent enum redefinition problems. */ -#define TRUE_FALSE_ALREADY_DEFINED -#endif /* MPW */ -/* end-sanitize-mpw */ #include "bfd.h" -#include "sysdep.h" +#include "safe-ctype.h" +#include "bfdlink.h" #include "ld.h" -#include "ldgram.h" #include "ldmisc.h" #include "ldexp.h" #include "ldlang.h" +#include #include "ldfile.h" #include "ldlex.h" #include "ldmain.h" +#include "libiberty.h" -int ldgram_in_defsym; - -int hex_mode; +/* The type of top-level parser input. + yylex and yyparse (indirectly) both check this. */ +input_type parser_input; +/* Line number in the current input file. + (FIXME Actually, it doesn't appear to get reset for each file?) */ unsigned int lineno = 1; -int old; + +/* The string we are currently lexing, or NULL if we are reading a + file. */ +const char *lex_string = NULL; + +/* Support for flex reading from more than one input file (stream). + `include_stack' is flex's input state for each open file; + `file_name_stack' is the file names. `lineno_stack' is the current + line numbers. + + If `include_stack_ptr' is 0, we haven't started reading anything yet. + Otherwise, stack elements 0 through `include_stack_ptr - 1' are valid. */ #undef YY_INPUT -#define YY_INPUT(buf,result,max_size) yy_input(buf, &result, max_size) -#undef YY_FATAL_ERROR -#define YY_FATAL_ERROR(s) +#define YY_INPUT(buf,result,max_size) result = yy_input (buf, max_size) + +#ifndef YY_NO_UNPUT +#define YY_NO_UNPUT +#endif + #define MAX_INCLUDE_DEPTH 10 -YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; -char *file_name_stack[MAX_INCLUDE_DEPTH]; -unsigned int include_stack_ptr = 0; - -static YY_BUFFER_STATE yy_create_string_buffer PARAMS ((const char *string, - int size)); -static void yy_input PARAMS ((char *, int *result, int max_size)); -static void comment PARAMS ((void)); -static void lex_warn_invalid PARAMS ((char *where, char *what)); - -/* STATES - COMMAND on command line +static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; +static const char *file_name_stack[MAX_INCLUDE_DEPTH]; +static unsigned int lineno_stack[MAX_INCLUDE_DEPTH]; +static unsigned int sysrooted_stack[MAX_INCLUDE_DEPTH]; +static unsigned int include_stack_ptr = 0; +static int vers_node_nesting = 0; + +static int yy_input (char *, int); +static void comment (void); +static void lex_warn_invalid (char *where, char *what); + +/* STATES EXPRESSION definitely in an expression SCRIPT definitely in a script + INPUTLIST definitely in a script, a filename-list BOTH either EXPRESSION or SCRIPT DEFSYMEXP in an argument to -defsym MRI in an MRI script + VERS_START starting a Sun style mapfile + VERS_SCRIPT a Sun style mapfile + VERS_NODE a node within a Sun style mapfile */ #define RTOKEN(x) { yylval.token = x; return x; } + +/* Some versions of flex want this. */ +#ifndef yywrap +int yywrap (void) { return 1; } +#endif %} %a 4000 @@ -82,563 +99,623 @@ static void lex_warn_invalid PARAMS ((char *where, char *what)); CMDFILENAMECHAR [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\-\~] CMDFILENAMECHAR1 [_a-zA-Z0-9\/\.\\_\+\$\:\[\]\\\,\=\&\!\<\>\~] FILENAMECHAR1 [_a-zA-Z\/\.\\\$\_\~] -SYMBOLCHARN [_a-zA-Z\/\.\\0-9] +SYMBOLCHARN [_a-zA-Z\/\.\\\$\_\~0-9] FILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~] -FILENAME {FILENAMECHAR}+ -WHITE [ \t\n]+ +WILDCHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~\?\*\^\!] +WHITE [ \t\n\r]+ NOCFILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\$\:\[\]\\\~] +V_TAG [.$_a-zA-Z][._a-zA-Z0-9]* +V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)* -%s COMMAND %s SCRIPT +%s INPUTLIST %s EXPRESSION %s BOTH %s DEFSYMEXP %s MRI +%s VERS_START +%s VERS_SCRIPT +%s VERS_NODE %% + if (parser_input != input_selected) + { + /* The first token of the input determines the initial parser state. */ + input_type t = parser_input; + parser_input = input_selected; + switch (t) + { + case input_script: return INPUT_SCRIPT; break; + case input_mri_script: return INPUT_MRI_SCRIPT; break; + case input_version_script: return INPUT_VERSION_SCRIPT; break; + case input_dynamic_list: return INPUT_DYNAMIC_LIST; break; + case input_defsym: return INPUT_DEFSYM; break; + default: abort (); + } + } -"/*" { comment(); } +"/*" { comment (); } "-" { RTOKEN('-');} "+" { RTOKEN('+');} -{FILENAMECHAR1}{SYMBOLCHARN}* { yylval.name = buystring(yytext); return NAME; } -[ \t] { RTOKEN(DEFSYMEND); } +{FILENAMECHAR1}{SYMBOLCHARN}* { yylval.name = xstrdup (yytext); return NAME; } "=" { RTOKEN('='); } -"--help" { return OPTION_help; } -"--version" { return OPTION_version; } -"-defsym"{WHITE}* { return OPTION_defsym; } -"-format" { return OPTION_format; } -"-noinhibit-exec" { return OPTION_noinhibit_exec; } -"-noinhibit_exec" { return OPTION_noinhibit_exec; } -"-oformat" { return OPTION_oformat; } -"-sort-common" { return OPTION_sort_common;} -"-sort_common" { return OPTION_sort_common;} -"-warn-common" { return OPTION_warn_common;} -"-n" { return OPTION_n; } -"-N" { return OPTION_N; } -"-r" { return OPTION_r; } -"-stats" { return OPTION_stats; } -"-no-keep-memory" { return OPTION_no_keep_memory; } -"-relax" { return OPTION_relax; } -"-i" { return OPTION_r; } -"-Ur" { return OPTION_Ur; } -"-o" { return OPTION_o; } -"-g" { return OPTION_g; } -"-e" { return OPTION_e; } -"-e"{FILENAME} { - yylval.name = buystring(yytext+2); - return OPTION_esymbol; - } -"-b" { return OPTION_b; } -"-dc" { return OPTION_dc; } -"-dp" { return OPTION_dp; } -"-d" { return OPTION_d; } -"-v" { return OPTION_v; } -"-V" { return OPTION_V; } -"-m" { return OPTION_m; } -"-m"{FILENAME} { return OPTION_memul; } -"-M" { return OPTION_M; } -"-Map" { return OPTION_Map;} -"-t" { return OPTION_t; } -"-X" { return OPTION_X; } -"-x" { return OPTION_x; } -"-c" { return OPTION_c; } -"-R" { return OPTION_R; } -"-u" { return OPTION_u; } -"-u"{FILENAME} { - yylval.name = buystring(yytext+2); - return OPTION_usymbol; - } -"-s" { return OPTION_s; } -"-S" { return OPTION_S; } -"-Bstat" { return OPTION_Bstatic; } -"-B"{FILENAME} { /* Ignored */ } -"-l"{FILENAME} { - yylval.name = buystring(yytext+2); - return OPTION_l; - } - -"-L"{FILENAME} { - yylval.name = buystring(yytext+2); - return OPTION_Lfile; - } -"-L" { return OPTION_L; } -"-Ttext" { - yylval.name = ".text"; - return OPTION_Texp; - } -"-Tdata" { - yylval.name = ".data"; - return OPTION_Texp; - } -"-Tbss" { - yylval.name = ".bss"; - return OPTION_Texp; - } -"-O"([0-9])+ { - yylval.integer = atoi (yytext + 2); - return OPTION_Oval; - } -"-O"{FILENAME} { - yylval.name = buystring(yytext+2); - return OPTION_Texp; - } - -"-T"{FILENAME} { - yylval.name = buystring(yytext+2); - return OPTION_Tfile; - } -"-T" { - return OPTION_T; - } - -"-F"{FILENAME} { - return OPTION_F; - } -"-F" { - return OPTION_F; - } - -"-y" { - return OPTION_y; - } - -"-y"{FILENAME} { - yylval.name = buystring(yytext+2); - return OPTION_ysymbol; - } - -"-A"{FILENAME} { - yylval.name = buystring(yytext+2); - return OPTION_Aarch; - } - -"-retain-symbols-file" { return OPTION_RETAIN_SYMBOLS_FILE; } - -"-EB" { - return OPTION_EB; - } -"-EL" { - return OPTION_EL; - } -"-G" { - return OPTION_G; - } -"-G"([0-9])+ { - yylval.integer = atoi (yytext + 2); - return OPTION_Gval; - } - -"-Qy" { return OPTION_Qy; } -"-dn" { return OPTION_dn; } -"-Y" { return OPTION_Y; } -"-YP,"{FILENAME} { - yylval.name = buystring (yytext+4); - return OPTION_YP; - } -"-non_shared" { return OPTION_non_shared; } -"-call_shared" { return OPTION_call_shared; } "$"([0-9A-Fa-f])+ { - yylval.integer = bfd_scan_vma (yytext+1, 0,16); + yylval.integer = bfd_scan_vma (yytext + 1, 0, 16); + yylval.bigint.str = NULL; return INT; } -([0-9A-Fa-f])+(H|X|B|O|D) { +([0-9A-Fa-f])+(H|h|X|x|B|b|O|o|D|d) { int ibase ; - switch (yytext[yyleng-1]) { - case 'X': + switch (yytext[yyleng - 1]) { + case 'X': + case 'x': case 'H': + case 'h': ibase = 16; break; case 'O': + case 'o': ibase = 8; break; case 'B': + case 'b': ibase = 2; break; default: ibase = 10; } - yylval.integer = bfd_scan_vma (yytext+1, 0, + yylval.integer = bfd_scan_vma (yytext, 0, ibase); + yylval.bigint.str = NULL; return INT; } -"$"?"0x"?([0-9A-Fa-f])+(M|K|m|k)? { - yylval.integer = bfd_scan_vma (yytext, 0, - hex_mode); - if (yytext[yyleng-1]=='M' - || yytext[yyleng-1] == 'm') { - yylval.integer *= 1024*1024; - } - if (yytext[yyleng-1]=='K' - || yytext[yyleng-1]=='k') { +((("$"|0[xX])([0-9A-Fa-f])+)|(([0-9])+))(M|K|m|k)? { + char *s = yytext; + int ibase = 0; + + if (*s == '$') + { + ++s; + ibase = 16; + } + yylval.integer = bfd_scan_vma (s, 0, ibase); + yylval.bigint.str = NULL; + if (yytext[yyleng - 1] == 'M' + || yytext[yyleng - 1] == 'm') + { + yylval.integer *= 1024 * 1024; + } + else if (yytext[yyleng - 1] == 'K' + || yytext[yyleng - 1]=='k') + { yylval.integer *= 1024; - } + } + else if (yytext[0] == '0' + && (yytext[1] == 'x' + || yytext[1] == 'X')) + { + yylval.bigint.str = xstrdup (yytext + 2); + } return INT; } -"]" { RTOKEN(']');} -"[" { RTOKEN('[');} -"<<=" { RTOKEN(LSHIFTEQ);} -">>=" { RTOKEN(RSHIFTEQ);} -"||" { RTOKEN(OROR);} -"==" { RTOKEN(EQ);} -"!=" { RTOKEN(NE);} -">=" { RTOKEN(GE);} -"<=" { RTOKEN(LE);} -"<<" { RTOKEN(LSHIFT);} -">>" { RTOKEN(RSHIFT);} -"+=" { RTOKEN(PLUSEQ);} -"-=" { RTOKEN(MINUSEQ);} -"*=" { RTOKEN(MULTEQ);} -"/=" { RTOKEN(DIVEQ);} -"&=" { RTOKEN(ANDEQ);} -"|=" { RTOKEN(OREQ);} -"&&" { RTOKEN(ANDAND);} -">" { RTOKEN('>');} -"," { RTOKEN(',');} -"&" { RTOKEN('&');} -"|" { RTOKEN('|');} -"~" { RTOKEN('~');} -"!" { RTOKEN('!');} -"?" { RTOKEN('?');} -"*" { RTOKEN('*');} -"+" { RTOKEN('+');} -"-" { RTOKEN('-');} -"/" { RTOKEN('/');} -"%" { RTOKEN('%');} -"<" { RTOKEN('<');} -">" { RTOKEN('>');} -"=" { RTOKEN('=');} -"}" { RTOKEN('}') ; } -"{" { RTOKEN('{'); } -")" { RTOKEN(')');} -"(" { RTOKEN('(');} -"]" { RTOKEN(']');} -"[" { RTOKEN('[');} -":" { RTOKEN(':'); } -";" { RTOKEN(';');} -"-" { RTOKEN('-');} -"/" { RTOKEN('/');} -"MEMORY" { RTOKEN(MEMORY);} -"ORIGIN" { RTOKEN(ORIGIN);} -"BLOCK" { RTOKEN(BLOCK);} -"LENGTH" { RTOKEN(LENGTH);} -"ALIGN" { RTOKEN(ALIGN_K);} -"ADDR" { RTOKEN(ADDR);} +"]" { RTOKEN(']');} +"[" { RTOKEN('[');} +"<<=" { RTOKEN(LSHIFTEQ);} +">>=" { RTOKEN(RSHIFTEQ);} +"||" { RTOKEN(OROR);} +"==" { RTOKEN(EQ);} +"!=" { RTOKEN(NE);} +">=" { RTOKEN(GE);} +"<=" { RTOKEN(LE);} +"<<" { RTOKEN(LSHIFT);} +">>" { RTOKEN(RSHIFT);} +"+=" { RTOKEN(PLUSEQ);} +"-=" { RTOKEN(MINUSEQ);} +"*=" { RTOKEN(MULTEQ);} +"/=" { RTOKEN(DIVEQ);} +"&=" { RTOKEN(ANDEQ);} +"|=" { RTOKEN(OREQ);} +"&&" { RTOKEN(ANDAND);} +">" { RTOKEN('>');} +"," { RTOKEN(',');} +"&" { RTOKEN('&');} +"|" { RTOKEN('|');} +"~" { RTOKEN('~');} +"!" { RTOKEN('!');} +"?" { RTOKEN('?');} +"*" { RTOKEN('*');} +"+" { RTOKEN('+');} +"-" { RTOKEN('-');} +"/" { RTOKEN('/');} +"%" { RTOKEN('%');} +"<" { RTOKEN('<');} +"=" { RTOKEN('=');} +"}" { RTOKEN('}') ; } +"{" { RTOKEN('{'); } +")" { RTOKEN(')');} +"(" { RTOKEN('(');} +":" { RTOKEN(':'); } +";" { RTOKEN(';');} +"MEMORY" { RTOKEN(MEMORY);} +"REGION_ALIAS" { RTOKEN(REGION_ALIAS);} +"LD_FEATURE" { RTOKEN(LD_FEATURE);} +"ORIGIN" { RTOKEN(ORIGIN);} +"VERSION" { RTOKEN(VERSIONK);} +"BLOCK" { RTOKEN(BLOCK);} +"BIND" { RTOKEN(BIND);} +"LENGTH" { RTOKEN(LENGTH);} +"ALIGN" { RTOKEN(ALIGN_K);} +"DATA_SEGMENT_ALIGN" { RTOKEN(DATA_SEGMENT_ALIGN);} +"DATA_SEGMENT_RELRO_END" { RTOKEN(DATA_SEGMENT_RELRO_END);} +"DATA_SEGMENT_END" { RTOKEN(DATA_SEGMENT_END);} +"ADDR" { RTOKEN(ADDR);} +"LOADADDR" { RTOKEN(LOADADDR);} +"ALIGNOF" { RTOKEN(ALIGNOF); } +"MAX" { RTOKEN(MAX_K); } +"MIN" { RTOKEN(MIN_K); } +"LOG2CEIL" { RTOKEN(LOG2CEIL); } +"ASSERT" { RTOKEN(ASSERT_K); } "ENTRY" { RTOKEN(ENTRY);} -"NEXT" { RTOKEN(NEXT);} +"EXTERN" { RTOKEN(EXTERN);} +"NEXT" { RTOKEN(NEXT);} "sizeof_headers" { RTOKEN(SIZEOF_HEADERS);} "SIZEOF_HEADERS" { RTOKEN(SIZEOF_HEADERS);} +"SEGMENT_START" { RTOKEN(SEGMENT_START);} "MAP" { RTOKEN(MAP);} -"SIZEOF" { RTOKEN(SIZEOF);} -"TARGET" { RTOKEN(TARGET_K);} +"SIZEOF" { RTOKEN(SIZEOF);} +"TARGET" { RTOKEN(TARGET_K);} "SEARCH_DIR" { RTOKEN(SEARCH_DIR);} -"OUTPUT" { RTOKEN(OUTPUT);} +"OUTPUT" { RTOKEN(OUTPUT);} "INPUT" { RTOKEN(INPUT);} -"DEFINED" { RTOKEN(DEFINED);} +"GROUP" { RTOKEN(GROUP);} +"AS_NEEDED" { RTOKEN(AS_NEEDED);} +"DEFINED" { RTOKEN(DEFINED);} "CREATE_OBJECT_SYMBOLS" { RTOKEN(CREATE_OBJECT_SYMBOLS);} "CONSTRUCTORS" { RTOKEN( CONSTRUCTORS);} -"FORCE_COMMON_ALLOCATION" { RTOKEN(FORCE_COMMON_ALLOCATION);} -"SECTIONS" { RTOKEN(SECTIONS);} +"FORCE_COMMON_ALLOCATION" { RTOKEN(FORCE_COMMON_ALLOCATION);} +"INHIBIT_COMMON_ALLOCATION" { RTOKEN(INHIBIT_COMMON_ALLOCATION);} +"SECTIONS" { RTOKEN(SECTIONS);} +"INSERT" { RTOKEN(INSERT_K);} +"AFTER" { RTOKEN(AFTER);} +"BEFORE" { RTOKEN(BEFORE);} "FILL" { RTOKEN(FILL);} -"STARTUP" { RTOKEN(STARTUP);} +"STARTUP" { RTOKEN(STARTUP);} "OUTPUT_FORMAT" { RTOKEN(OUTPUT_FORMAT);} "OUTPUT_ARCH" { RTOKEN( OUTPUT_ARCH);} "HLL" { RTOKEN(HLL);} -"SYSLIB" { RTOKEN(SYSLIB);} +"SYSLIB" { RTOKEN(SYSLIB);} "FLOAT" { RTOKEN(FLOAT);} "QUAD" { RTOKEN( QUAD);} +"SQUAD" { RTOKEN( SQUAD);} "LONG" { RTOKEN( LONG);} "SHORT" { RTOKEN( SHORT);} "BYTE" { RTOKEN( BYTE);} -"NOFLOAT" { RTOKEN(NOFLOAT);} -"NOLOAD" { RTOKEN(NOLOAD);} -"DSECT" { RTOKEN(DSECT);} -"COPY" { RTOKEN(COPY);} -"INFO" { RTOKEN(INFO);} -"OVERLAY" { RTOKEN(OVERLAY);} +"NOFLOAT" { RTOKEN(NOFLOAT);} +"NOCROSSREFS" { RTOKEN(NOCROSSREFS);} +"OVERLAY" { RTOKEN(OVERLAY); } +"SORT_BY_NAME" { RTOKEN(SORT_BY_NAME); } +"SORT_BY_ALIGNMENT" { RTOKEN(SORT_BY_ALIGNMENT); } +"SORT" { RTOKEN(SORT_BY_NAME); } +"SORT_BY_INIT_PRIORITY" { RTOKEN(SORT_BY_INIT_PRIORITY); } +"SORT_NONE" { RTOKEN(SORT_NONE); } +"NOLOAD" { RTOKEN(NOLOAD);} +"DSECT" { RTOKEN(DSECT);} +"COPY" { RTOKEN(COPY);} +"INFO" { RTOKEN(INFO);} +"OVERLAY" { RTOKEN(OVERLAY);} +"ONLY_IF_RO" { RTOKEN(ONLY_IF_RO); } +"ONLY_IF_RW" { RTOKEN(ONLY_IF_RW); } +"SPECIAL" { RTOKEN(SPECIAL); } "o" { RTOKEN(ORIGIN);} "org" { RTOKEN(ORIGIN);} "l" { RTOKEN( LENGTH);} "len" { RTOKEN( LENGTH);} -"INCLUDE" { RTOKEN(INCLUDE);} -"AT" { RTOKEN(AT);} +"INPUT_SECTION_FLAGS" { RTOKEN(INPUT_SECTION_FLAGS); } +"INCLUDE" { RTOKEN(INCLUDE);} +"PHDRS" { RTOKEN (PHDRS); } +"AT" { RTOKEN(AT);} +"ALIGN_WITH_INPUT" { RTOKEN(ALIGN_WITH_INPUT);} +"SUBALIGN" { RTOKEN(SUBALIGN);} +"HIDDEN" { RTOKEN(HIDDEN); } +"PROVIDE" { RTOKEN(PROVIDE); } +"PROVIDE_HIDDEN" { RTOKEN(PROVIDE_HIDDEN); } +"KEEP" { RTOKEN(KEEP); } +"EXCLUDE_FILE" { RTOKEN(EXCLUDE_FILE); } +"CONSTANT" { RTOKEN(CONSTANT);} +"#".*\n? { ++ lineno; } "\n" { ++ lineno; RTOKEN(NEWLINE); } "*".* { /* Mri comment line */ } +";".* { /* Mri comment line */ } "END" { RTOKEN(ENDWORD); } -"ALIGNMOD" { RTOKEN(ALIGNMOD);} -"ALIGN" { RTOKEN(ALIGN_K);} - +"ALIGNMOD" { RTOKEN(ALIGNMOD);} +"ALIGN" { RTOKEN(ALIGN_K);} "CHIP" { RTOKEN(CHIP); } "BASE" { RTOKEN(BASE); } -"ALIAS" { RTOKEN(ALIAS); } -"TRUNCATE" { RTOKEN(TRUNCATE); } +"ALIAS" { RTOKEN(ALIAS); } +"TRUNCATE" { RTOKEN(TRUNCATE); } "LOAD" { RTOKEN(LOAD); } "PUBLIC" { RTOKEN(PUBLIC); } "ORDER" { RTOKEN(ORDER); } "NAME" { RTOKEN(NAMEWORD); } "FORMAT" { RTOKEN(FORMAT); } +"CASE" { RTOKEN(CASE); } +"START" { RTOKEN(START); } "LIST".* { RTOKEN(LIST); /* LIST and ignore to end of line */ } "SECT" { RTOKEN(SECT); } "ABSOLUTE" { RTOKEN(ABSOLUTE); } "end" { RTOKEN(ENDWORD); } +"alignmod" { RTOKEN(ALIGNMOD);} +"align" { RTOKEN(ALIGN_K);} "chip" { RTOKEN(CHIP); } +"base" { RTOKEN(BASE); } +"alias" { RTOKEN(ALIAS); } +"truncate" { RTOKEN(TRUNCATE); } "load" { RTOKEN(LOAD); } +"public" { RTOKEN(PUBLIC); } "order" { RTOKEN(ORDER); } "name" { RTOKEN(NAMEWORD); } "format" { RTOKEN(FORMAT); } +"case" { RTOKEN(CASE); } +"extern" { RTOKEN(EXTERN); } +"start" { RTOKEN(START); } "list".* { RTOKEN(LIST); /* LIST and ignore to end of line */ } "sect" { RTOKEN(SECT); } "absolute" { RTOKEN(ABSOLUTE); } -{CMDFILENAMECHAR1}{CMDFILENAMECHAR}* { - yylval.name = buystring(yytext); - return NAME; - } - - {FILENAMECHAR1}{NOCFILENAMECHAR}* { /* Filename without commas, needed to parse mri stuff */ - yylval.name = buystring(yytext); + yylval.name = xstrdup (yytext); return NAME; } -{FILENAMECHAR1}{FILENAMECHAR}* { - yylval.name = buystring(yytext); +{FILENAMECHAR1}{FILENAMECHAR}* { + yylval.name = xstrdup (yytext); return NAME; } -{FILENAMECHAR}* { yylval.name = buystring(yytext); +"="{FILENAMECHAR1}{FILENAMECHAR}* { +/* Filename to be prefixed by --sysroot or when non-sysrooted, nothing. */ + yylval.name = xstrdup (yytext); return NAME; } - -"\""[^\"]*"\"" { +"-l"{FILENAMECHAR}+ { + yylval.name = xstrdup (yytext + 2); + return LNAME; + } +{FILENAMECHAR1}{NOCFILENAMECHAR}* { + yylval.name = xstrdup (yytext); + return NAME; + } +"-l"{NOCFILENAMECHAR}+ { + yylval.name = xstrdup (yytext + 2); + return LNAME; + } +