]> granicus.if.org Git - yasm/commitdiff
* gas-bison.y: Allow .data, .text, and .bss to be used in expressions (they
authorPeter Johnson <peter@tortall.net>
Tue, 27 Sep 2005 03:46:34 +0000 (03:46 -0000)
committerPeter Johnson <peter@tortall.net>
Tue, 27 Sep 2005 03:46:34 +0000 (03:46 -0000)
come through as unique directive tokens, not as DIR_ID).
* dataref-imm.*: Test for this.

svn path=/trunk/yasm/; revision=1248

modules/parsers/gas/gas-bison.y
modules/parsers/gas/tests/Makefile.inc
modules/parsers/gas/tests/dataref-imm.asm [new file with mode: 0644]
modules/parsers/gas/tests/dataref-imm.errwarn [new file with mode: 0644]
modules/parsers/gas/tests/dataref-imm.hex [new file with mode: 0644]

index 1e3b0203bcb89ef236be9c2b505976f159bfabc4..0cd096c7f57750c0a7b814b4f6c998f4fdca8de5 100644 (file)
@@ -106,7 +106,7 @@ static void gas_parser_directive
 
 %type <bc> line lineexp instr
 
-%type <str_val> label_id
+%type <str_val> expr_id label_id
 %type <ea> memaddr
 %type <exp> expr regmemexpr
 %type <sym> explabel
@@ -568,7 +568,7 @@ expr: INTNUM                { $$ = p_expr_new_ident(yasm_expr_int($1)); }
     | '(' expr ')'     { $$ = $2; }
 ;
 
-explabel: label_id     {
+explabel: expr_id      {
        /* "." references the current assembly position */
        if ($1[1] == '\0' && $1[0] == '.')
            $$ = yasm_symtab_define_label(p_symtab, ".", parser_gas->prev_bc,
@@ -577,7 +577,7 @@ explabel: label_id  {
            $$ = yasm_symtab_use(p_symtab, $1, cur_line);
        yasm_xfree($1);
     }
-    | label_id '@' label_id {
+    | expr_id '@' label_id {
        /* TODO: this is needed for shared objects, e.g. sym@PLT */
        $$ = yasm_symtab_use(p_symtab, $1, cur_line);
        yasm_xfree($1);
@@ -585,6 +585,12 @@ explabel: label_id {
     }
 ;
 
+expr_id: label_id
+    | DIR_DATA { $$ = yasm__xstrdup(".data"); }
+    | DIR_TEXT { $$ = yasm__xstrdup(".text"); }
+    | DIR_BSS  { $$ = yasm__xstrdup(".bss"); }
+;
+
 label_id: ID | DIR_ID;
 
 %%
index 72e6f3255dd4bff687808c0b4daa04fec7758a11..eb4df040a25b78477408b9697f44d72f73dcc559 100644 (file)
@@ -3,6 +3,9 @@
 TESTS += modules/parsers/gas/tests/gas_test.sh
 
 EXTRA_DIST += modules/parsers/gas/tests/gas_test.sh
+EXTRA_DIST += modules/parsers/gas/tests/dataref-imm.asm
+EXTRA_DIST += modules/parsers/gas/tests/dataref-imm.errwarn
+EXTRA_DIST += modules/parsers/gas/tests/dataref-imm.hex
 EXTRA_DIST += modules/parsers/gas/tests/datavis.asm
 EXTRA_DIST += modules/parsers/gas/tests/datavis.errwarn
 EXTRA_DIST += modules/parsers/gas/tests/datavis.hex
diff --git a/modules/parsers/gas/tests/dataref-imm.asm b/modules/parsers/gas/tests/dataref-imm.asm
new file mode 100644 (file)
index 0000000..3bfff16
--- /dev/null
@@ -0,0 +1,5 @@
+movl $(.data+160),%eax
+.data
+.long .text
+.long .data
+.long .bss
diff --git a/modules/parsers/gas/tests/dataref-imm.errwarn b/modules/parsers/gas/tests/dataref-imm.errwarn
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/modules/parsers/gas/tests/dataref-imm.hex b/modules/parsers/gas/tests/dataref-imm.hex
new file mode 100644 (file)
index 0000000..9e4c6b1
--- /dev/null
@@ -0,0 +1,592 @@
+7f 
+45 
+4c 
+46 
+01 
+01 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+00 
+03 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+10 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+34 
+00 
+00 
+00 
+00 
+00 
+28 
+00 
+08 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+b8 
+a0 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+01 
+02 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+03 
+00 
+00 
+04 
+00 
+00 
+00 
+01 
+02 
+00 
+00 
+08 
+00 
+00 
+00 
+01 
+04 
+00 
+00 
+00 
+2e 
+74 
+65 
+78 
+74 
+00 
+2e 
+64 
+61 
+74 
+61 
+00 
+2e 
+72 
+65 
+6c 
+2e 
+74 
+65 
+78 
+74 
+00 
+2e 
+72 
+65 
+6c 
+2e 
+64 
+61 
+74 
+61 
+00 
+2e 
+73 
+74 
+72 
+74 
+61 
+62 
+00 
+2e 
+73 
+79 
+6d 
+74 
+61 
+62 
+00 
+2e 
+73 
+68 
+73 
+74 
+72 
+74 
+61 
+62 
+00 
+00 
+00 
+2d 
+00 
+2e 
+62 
+73 
+73 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+04 
+00 
+f1 
+ff 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+03 
+00 
+06 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+03 
+00 
+04 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+31 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+74 
+00 
+00 
+00 
+3b 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+21 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+b0 
+00 
+00 
+00 
+08 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+29 
+00 
+00 
+00 
+02 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+b8 
+00 
+00 
+00 
+50 
+00 
+00 
+00 
+02 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+10 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+06 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+40 
+00 
+00 
+00 
+05 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+10 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+0d 
+00 
+00 
+00 
+09 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+48 
+00 
+00 
+00 
+08 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+08 
+00 
+00 
+00 
+07 
+00 
+00 
+00 
+01 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+50 
+00 
+00 
+00 
+0c 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+17 
+00 
+00 
+00 
+09 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+00 
+5c 
+00 
+00 
+00 
+18 
+00 
+00 
+00 
+03 
+00 
+00 
+00 
+06 
+00 
+00 
+00 
+04 
+00 
+00 
+00 
+08 
+00 
+00 
+00