diff options
Diffstat (limited to 'src/cmd/6l/obj.c')
-rw-r--r-- | src/cmd/6l/obj.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c index d6af049d9..076809aa2 100644 --- a/src/cmd/6l/obj.c +++ b/src/cmd/6l/obj.c @@ -369,9 +369,9 @@ main(int argc, char *argv[]) objfile(a); } ignoreoptfuncs(); - // TODO(rsc): remove unused code and data definetypestrings(); definetypesigs(); + deadcode(); firstp = firstp->link; if(firstp == P) @@ -1068,11 +1068,16 @@ loop: // If we've seen an AGLOBL that said this sym was DUPOK, // ignore any more ADATA we see, which must be // redefinitions. - if(p->from.sym != S && p->from.sym->dupok) { + s = p->from.sym; + if(s != S && s->dupok) { if(debug['v']) - Bprint(&bso, "skipping %s in %s: dupok", p->from.sym->name, pn); + Bprint(&bso, "skipping %s in %s: dupok", s->name, pn); goto loop; } + if(s != S) { + p->dlink = s->data; + s->data = p; + } if(edatap == P) datap = p; else |