Mercurial > hg-old > index.cgi
diff lwasm/pseudo.c @ 158:f0527dc3804d
Added support for .globl <sym>, .area <section>, .word, .byte, .blkb, and a .module directive that does nothing
author | lost |
---|---|
date | Sat, 31 Jan 2009 05:30:06 +0000 |
parents | 427e268e876b |
children | b061350c17e4 |
line wrap: on
line diff
--- a/lwasm/pseudo.c Sat Jan 31 05:29:15 2009 +0000 +++ b/lwasm/pseudo.c Sat Jan 31 05:30:06 2009 +0000 @@ -30,6 +30,11 @@ extern int lwasm_read_file(asmstate_t *as, const char *filename); +OPFUNC(pseudo_noop) +{ + +} + OPFUNC(pseudo_org) { int v, r; @@ -908,16 +913,39 @@ { lwasm_symbol_ent_t *se; export_list_t *ex; - + char *sym2, *sym3; + if (as -> outformat != OUTPUT_OBJ) { register_error(as, l, 1, "Symbol exports only supported for obj target"); return; } - + if (as -> passnum == 1) return; + if (!(l -> sym)) + { + // look for symbol after op + if (**p) + { + for (sym2 = *p; **p && !isspace(**p); (*p)++) + /* do nothing */ + sym3 = lwasm_alloc(*p - sym2 + 1); + memcpy(sym3, sym2, *p - sym2); + sym3[*p - sym2] = '\0'; + + l -> sym = sym3; + } + } + + if (!(l -> sym)) + { + register_error(as, l, 2, "No symbol"); + return; + } + + // the symbol better be defined at this point (pass 2) // local symbols cannot be exported nor can "global" symbols se = lwasm_find_symbol(as, l -> sym, -1);