Mercurial > hg-old > index.cgi
diff lwlink/link.c @ 206:299c5d793aca
Made lwlink smarter about not included unneeded (unreferenced) members of a library file
author | lost |
---|---|
date | Mon, 20 Apr 2009 02:24:33 +0000 |
parents | 42df94f30d82 |
children | bae1e3ecdce1 |
line wrap: on
line diff
--- a/lwlink/link.c Sun Apr 19 17:44:46 2009 +0000 +++ b/lwlink/link.c Mon Apr 20 02:24:33 2009 +0000 @@ -402,6 +402,8 @@ int sn; int fn; reloc_t *rl; + lw_expr_stack_t *te; + int rval; // resolve entry point if required @@ -432,14 +434,16 @@ for (rl = inputfiles[fn] -> sections[sn].incompletes; rl; rl = rl -> next) { // do a "simplify" on the expression - rval = lw_expr_reval(rl -> expr, resolve_sym, &(inputfiles[fn] -> sections[sn])); - + te = lw_expr_stack_dup(rl -> expr); + rval = lw_expr_reval(te, resolve_sym, &(inputfiles[fn] -> sections[sn])); + // is it constant? error out if not - if (rval != 0 || !lw_expr_is_constant(rl -> expr)) + if (rval != 0 || !lw_expr_is_constant(te)) { fprintf(stderr, "Incomplete reference at %s:%s+%02X\n", inputfiles[fn] -> filename, inputfiles[fn] -> sections[sn].name, rl -> offset); symerr = 1; } + lw_expr_stack_free(te); } } } @@ -450,4 +454,11 @@ exit(1); // theoretically, all files referenced by other files now have "forced" set to 1 + for (fn = 0; fn < ninputfiles; fn++) + { + if (inputfiles[fn] -> forced == 1) + continue; + + fprintf(stderr, "Warning: %s (%d) does not resolve any symbols\n", inputfiles[fn] -> filename, fn); + } }