# HG changeset patch # User lost@l-w.ca # Date 1281499221 21600 # Node ID 1d69ed28f1758cdeedca7678f0109946870f6b32 # Parent 2d725550913097671ec6ed40cff1a76554bbad54 Fixed offset problem with emission of incomplete references at start of insn diff -r 2d7255509130 -r 1d69ed28f175 lwasm/lwasm.c --- a/lwasm/lwasm.c Tue Aug 10 21:59:49 2010 -0600 +++ b/lwasm/lwasm.c Tue Aug 10 22:00:21 2010 -0600 @@ -624,8 +624,13 @@ int lwasm_emitexpr(line_t *l, lw_expr_t expr, int size) { - int v; + int v = 0; + int ol; + ol = l -> outputl; + if (ol == -1) + ol = 0; + if (lw_expr_istype(expr, lw_expr_type_int)) { v = lw_expr_intval(expr); @@ -650,7 +655,7 @@ re = lw_alloc(sizeof(reloctab_t)); re -> next = l -> csect -> reloctab; l -> csect -> reloctab = re; - te = lw_expr_build(lw_expr_type_int, l -> outputl); + te = lw_expr_build(lw_expr_type_int, ol); re -> offset = lw_expr_build(lw_expr_type_oper, lw_expr_oper_plus, l -> addr, te); lw_expr_destroy(te); lwasm_reduce_expr(l -> as, re -> offset); @@ -664,7 +669,7 @@ re = lw_alloc(sizeof(reloctab_t)); re -> next = l -> csect -> reloctab; l -> csect -> reloctab = re; - te = lw_expr_build(lw_expr_type_int, l -> outputl + 2); + te = lw_expr_build(lw_expr_type_int, ol + 2); re -> offset = lw_expr_build(lw_expr_type_oper, lw_expr_oper_plus, l -> addr, te); lw_expr_destroy(te); lwasm_reduce_expr(l -> as, re -> offset); @@ -677,7 +682,7 @@ re = lw_alloc(sizeof(reloctab_t)); re -> next = l -> csect -> reloctab; l -> csect -> reloctab = re; - te = lw_expr_build(lw_expr_type_int, l -> outputl); + te = lw_expr_build(lw_expr_type_int, ol); re -> offset = lw_expr_build(lw_expr_type_oper, lw_expr_oper_plus, l -> addr, te); lw_expr_destroy(te); lwasm_reduce_expr(l -> as, re -> offset);