Mercurial > hg-old > index.cgi
diff lwasm/pseudo.c @ 235:aa0056ca7319
Added a padding value for the ALIGN directive
author | lost |
---|---|
date | Fri, 12 Jun 2009 05:25:41 +0000 |
parents | 59a138df0401 |
children | a58f49a77441 |
line wrap: on
line diff
--- a/lwasm/pseudo.c Fri Jun 12 04:55:16 2009 +0000 +++ b/lwasm/pseudo.c Fri Jun 12 05:25:41 2009 +0000 @@ -326,14 +326,15 @@ { int cn; int r, v; - - if (as -> passnum == 2) - { - skip_operand(p); - while (as -> addr < l -> symaddr) - lwasm_emit(as, l, 0); - return; - } + int pad = 0; +// we have to parse this on pass 2 so that we get the pad value +// if (as -> passnum == 2) +// { +// skip_operand(p); +// while (as -> addr < l -> symaddr) +// lwasm_emit(as, l, 0); +// return; +// } r = lwasm_expr_result2(as, l, p, EXPR_SECTCONST | EXPR_PASS1CONST, &v, 0); if (r != 0) @@ -352,9 +353,21 @@ if (cn) cn = v - cn; + if (**p == ',') + { + // we have a padding value specified + (*p)++; + r = lwasm_expr_result2(as, l, p, EXPR_SECTCONST, &pad, 1); + if (r != 0 && as -> passnum == 2) + { + register_error(as, l, 2, "Illegal padding value - must be constant on pass 2"); + return; + } + } + while (cn--) { - lwasm_emit(as, l, 0); + lwasm_emit(as, l, pad); } l -> symaddr = as -> addr; }