From 85e38cfa01d6ac71297b26b5c653c35a891e8932 Mon Sep 17 00:00:00 2001 From: Steve Chamberlain Date: Mon, 7 Dec 1992 16:49:54 +0000 Subject: [PATCH] -y support * ld.texinfo: new doc. * ldgram.y, ldlex.l: understand -y * ldmain.c (Q_enter_file_symbols): if had -y, lookup symbol and print info. (add_ysym): new function. * ldsym.h: (ldsym_type): new define SYM_Y. --- ld/ChangeLog | 8 ++++++ ld/ldlex.l | 86 ++++++++++++++++++++++++++++++++++++++---------------------- ld/ldsym.h | 2 ++ 3 files changed, 64 insertions(+), 32 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 402a6bf..5932cb6 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +Mon Dec 7 08:43:41 1992 Steve Chamberlain (sac@thepub.cygnus.com) + -y support + * ld.texinfo: new doc. + * ldgram.y, ldlex.l: understand -y + * ldmain.c (Q_enter_file_symbols): if had -y, lookup symbol and + print info. (add_ysym): new function. + * ldsym.h: (ldsym_type): new define SYM_Y. + Sat Nov 21 03:15:27 1992 John Gilmore (gnu@cygnus.com) * ldctor.h, lderror.h, ldexp.h, ldfile.h, ldindr.h, ldlang.c, diff --git a/ld/ldlex.l b/ld/ldlex.l index f98e8fd..3a4158d 100644 --- a/ld/ldlex.l +++ b/ld/ldlex.l @@ -43,36 +43,7 @@ char *buystring(); unsigned int lineno = 1; int old; -comment() -{ - int c; - while (1) - { - c = input(); - while (c !='*' && c != EOF) - { - if (c == '\n') lineno++; - c = input(); - } - - - if (c == '*') - { - c = input(); - while ( c == '*') - c = input(); - if ( c == '/' ) - break; /* found the end */ - } - - if ( c == EOF ) - { - einfo( "%F%P :EOF in comment"); - break; - } - } -} - +static comment(); #undef YY_INPUT #define YY_INPUT(buf,result,max_size) yy_input(buf, &result, max_size) @@ -105,6 +76,9 @@ FILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\=\$\:\[\]\\\,\~] FILENAME {FILENAMECHAR}+ WHITE [ \t\n]+ +NOCFILENAMECHAR [_a-zA-Z0-9\/\.\-\_\+\$\:\[\]\\\~] + + %s COMMAND %s SCRIPT %s EXPRESSION @@ -197,13 +171,20 @@ WHITE [ \t\n]+ return OPTION_F; } +"-y"{FILENAME} { + yylval.name = buystring(yytext+2); + return OPTION_y; + } + "-A"{FILENAME} { yylval.name = buystring(yytext+2); return OPTION_Aarch; } +"-retain-symbols-file" { return OPTION_RETAIN_SYMBOLS_FILE; } + "$"([0-9A-Fa-f])+ { - yylval.integer = strtoul(yytext+1, 0,16); + yylval.integer = strtoul(yytext+1, 0,16); return INT; } @@ -325,9 +306,13 @@ WHITE [ \t\n]+ "\n" { ++ lineno; RTOKEN(NEWLINE); } "*".* { /* Mri comment line */ } "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); } @@ -352,7 +337,14 @@ WHITE [ \t\n]+ } -{FILENAMECHAR1}{FILENAMECHAR}* { +{FILENAMECHAR1}{NOCFILENAMECHAR}* { +/* Filename without commas, needed to parse mri stuff */ + yylval.name = buystring(yytext); + return NAME; + } + + +{FILENAMECHAR1}{FILENAMECHAR}* { yylval.name = buystring(yytext); return NAME; } @@ -527,3 +519,33 @@ int max_size; } } +static +comment() +{ + int c; + while (1) + { + c = input(); + while (c !='*' && c != EOF) + { + if (c == '\n') lineno++; + c = input(); + } + + + if (c == '*') + { + c = input(); + while ( c == '*') + c = input(); + if ( c == '/' ) + break; /* found the end */ + } + + if ( c == EOF ) + { + einfo( "%F%P :EOF in comment"); + break; + } + } +} diff --git a/ld/ldsym.h b/ld/ldsym.h index db487ac..49fcb80 100644 --- a/ld/ldsym.h +++ b/ld/ldsym.h @@ -56,6 +56,8 @@ typedef struct user_symbol_struct /* If this symbol explicitly should be kept, despite discarding most others. */ #define SYM_KEEP 8 + /* If its got -y set */ +#define SYM_Y 16 int flags; } ldsym_type; -- 2.7.4