EXTRA_DIST += modules/objfmts/elf/tests/elfvisibility.asm
EXTRA_DIST += modules/objfmts/elf/tests/elfvisibility.errwarn
EXTRA_DIST += modules/objfmts/elf/tests/elfvisibility.hex
+EXTRA_DIST += modules/objfmts/elf/tests/nasm-sectname.asm
+EXTRA_DIST += modules/objfmts/elf/tests/nasm-sectname.hex
EXTRA_DIST += modules/objfmts/elf/tests/amd64/Makefile.inc
EXTRA_DIST += modules/objfmts/elf/tests/gas64/Makefile.inc
default:
break;
}
- curtok = 0; /* sanity */
+ curtok = NONE; /* sanity */
}
#define destroy_curtok() destroy_curtok_(parser_nasm)
parser_nasm->tokch);
do {
- get_next_token();
destroy_curtok();
+ get_next_token();
} while (!is_eol());
}
#define demand_eol() demand_eol_(parser_nasm)
{
yasm_bytecode *bc;
+ bc = parse_exp(parser_nasm);
+ if (bc)
+ return bc;
+
switch (curtok) {
case LINE: /* LINE INTNUM '+' INTNUM FILENAME */
{
return bc;
}
default:
- bc = parse_exp(parser_nasm);
- if (!bc)
- yasm_error_set(YASM_ERROR_SYNTAX,
- N_("label or instruction expected at start of line"));
- return bc;
+ yasm_error_set(YASM_ERROR_SYNTAX,
+ N_("label or instruction expected at start of line"));
+ return NULL;
}
}
static yasm_bytecode *
parse_exp(yasm_parser_nasm *parser_nasm)
{
+ yasm_bytecode *bc;
+
+ bc = parse_instr(parser_nasm);
+ if (bc)
+ return bc;
+
switch (curtok) {
case DECLARE_DATA:
{
parser_nasm->linemap, cur_line);
}
default:
- return parse_instr(parser_nasm);
+ return NULL;
}
}
switch (parser_nasm->state) {
case DIRECTIVE:
goto directive;
+ case SECTION_DIRECTIVE:
+ goto section_directive;
case DIRECTIVE2:
goto directive2;
case LINECHG:
}
iletter+ {
- parser_nasm->state = DIRECTIVE2;
lvalp->str_val = yasm__xstrndup(TOK, TOKLEN);
+ if (yasm__strcasecmp(lvalp->str_val, "section") == 0 ||
+ yasm__strcasecmp(lvalp->str_val, "segment") == 0)
+ parser_nasm->state = SECTION_DIRECTIVE;
+ else
+ parser_nasm->state = DIRECTIVE2;
RETURN(DIRECTIVE_NAME);
}
}
*/
+ /* section directive (the section name portion thereof) */
+section_directive:
+ SCANINIT();
+
+ /*!re2c
+ [a-zA-Z0-9_$#@~.?-]+ {
+ lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN);
+ lvalp->str.len = TOKLEN;
+ parser_nasm->state = DIRECTIVE2;
+ RETURN(STRING);
+ }
+
+ quot {
+ parser_nasm->state = DIRECTIVE2;
+ endch = s->tok[0];
+ goto stringconst;
+ }
+
+ ws+ {
+ parser_nasm->state = DIRECTIVE2;
+ goto section_directive;
+ }
+
+ "]" {
+ parser_nasm->state = INITIAL;
+ RETURN(s->tok[0]);
+ }
+
+ "\n" {
+ if (parser_nasm->save_input)
+ cursor = save_line(parser_nasm, cursor);
+ parser_nasm->state = INITIAL;
+ RETURN(s->tok[0]);
+ }
+
+ any {
+ yasm_warn_set(YASM_WARN_UNREC_CHAR,
+ N_("ignoring unrecognized character `%s'"),
+ yasm__conv_unprint(s->tok[0]));
+ goto section_directive;
+ }
+ */
+
/* inner part of directive */
directive2:
SCANINIT();