aboutsummaryrefslogtreecommitdiff
path: root/ld/ldlex.l
diff options
context:
space:
mode:
authorSteve Chamberlain <sac@cygnus>1992-12-07 16:49:54 +0000
committerSteve Chamberlain <sac@cygnus>1992-12-07 16:49:54 +0000
commit85e38cfa01d6ac71297b26b5c653c35a891e8932 (patch)
treeed52efda91c7f1f6c75e1e9911a80f6030f21452 /ld/ldlex.l
parentdde624eff98ade689592a803ca8ca77fb8f5b2ba (diff)
downloadgdb-85e38cfa01d6ac71297b26b5c653c35a891e8932.zip
gdb-85e38cfa01d6ac71297b26b5c653c35a891e8932.tar.gz
gdb-85e38cfa01d6ac71297b26b5c653c35a891e8932.tar.bz2
-y support
* ld.texinfo: new doc. * ldgram.y, ldlex.l: understand -y<symbol> * 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.
Diffstat (limited to 'ld/ldlex.l')
-rw-r--r--ld/ldlex.l86
1 files changed, 54 insertions, 32 deletions
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;
}
+<COMMAND>"-y"{FILENAME} {
+ yylval.name = buystring(yytext+2);
+ return OPTION_y;
+ }
+
<COMMAND>"-A"{FILENAME} {
yylval.name = buystring(yytext+2);
return OPTION_Aarch;
}
+<COMMAND>"-retain-symbols-file" { return OPTION_RETAIN_SYMBOLS_FILE; }
+
<MRI,EXPRESSION>"$"([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]+
<MRI>"\n" { ++ lineno; RTOKEN(NEWLINE); }
<MRI>"*".* { /* Mri comment line */ }
<MRI>"END" { RTOKEN(ENDWORD); }
+<MRI>"ALIGNMOD" { RTOKEN(ALIGNMOD);}
+<MRI>"ALIGN" { RTOKEN(ALIGN_K);}
+
<MRI>"CHIP" { RTOKEN(CHIP); }
<MRI>"BASE" { RTOKEN(BASE); }
<MRI>"ALIAS" { RTOKEN(ALIAS); }
+<MRI>"TRUNCATE" { RTOKEN(TRUNCATE); }
<MRI>"LOAD" { RTOKEN(LOAD); }
<MRI>"PUBLIC" { RTOKEN(PUBLIC); }
<MRI>"ORDER" { RTOKEN(ORDER); }
@@ -352,7 +337,14 @@ WHITE [ \t\n]+
}
-<MRI,BOTH,EXPRESSION>{FILENAMECHAR1}{FILENAMECHAR}* {
+<MRI>{FILENAMECHAR1}{NOCFILENAMECHAR}* {
+/* Filename without commas, needed to parse mri stuff */
+ yylval.name = buystring(yytext);
+ return NAME;
+ }
+
+
+<BOTH,EXPRESSION>{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;
+ }
+ }
+}