Mercurial > hg-old > index.cgi
diff lwasm/output.c @ 375:3498b2d88376
Added export list to object output
author | lost@starbug |
---|---|
date | Mon, 26 Apr 2010 17:14:04 -0600 |
parents | d99322ef6f21 |
children | 91c0fe026940 |
line wrap: on
line diff
--- a/lwasm/output.c Sat Apr 24 14:15:18 2010 -0600 +++ b/lwasm/output.c Mon Apr 26 17:14:04 2010 -0600 @@ -235,6 +235,7 @@ line_t *l; sectiontab_t *s; reloctab_t *re; + exportlist_t *ex; struct symtabe *se; int i; @@ -325,20 +326,35 @@ writebytes("", 1, 1, of); // now the exports -- FIXME -/* for (ex = as -> exportlist; ex; ex = ex -> next) + for (ex = as -> exportlist; ex; ex = ex -> next) { int eval; - ex -> se -> section != s) + lw_expr_t te; + line_t tl; + + if (ex -> se -> section != s) continue; - if (!lwasm_expr_exportable(ex -> se -> value)) + te = lw_expr_copy(ex -> se -> value); + as -> csect = ex -> se -> section; + as -> exportcheck = 1; + tl.as = as; + as -> cl = &tl; + lwasm_reduce_expr(as, te); + as -> exportcheck = 0; + as -> cl = NULL; + if (!lw_expr_istype(te, lw_expr_type_int)) + { + lw_expr_destroy(te); continue; - eval = lwasm_expr_exportval(ex -> se -> value); + } + eval = lw_expr_intval(te); + lw_expr_destroy(te); writebytes(ex -> symbol, strlen(ex -> symbol) + 1, 1, of); buf[0] = (eval >> 8) & 0xff; buf[1] = eval & 0xff; writebytes(buf, 2, 1, of); } -*/ + // flag end of exported symbols - "" is NOT an error writebytes("", 1, 1, of);