diff options
author | Russ Cox <rsc@golang.org> | 2009-01-20 13:21:22 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-01-20 13:21:22 -0800 |
commit | d68056354e5e88c1d4e665e081d77695c4f4e3e3 (patch) | |
tree | d7da5b35fc567047bfe731aefea4852d97a0c220 | |
parent | 3d482667e2e055c26cb0a8b0558ec6b4ebd066b6 (diff) | |
download | golang-d68056354e5e88c1d4e665e081d77695c4f4e3e3.tar.gz |
6l: ignore undefined symbols in gotypesigs.
they end up in the symbol table with type==0
if they are in a library but not pulled in.
also add a few debugging prints.
R=r
DELTA=11 (5 added, 1 deleted, 5 changed)
OCL=23104
CL=23108
-rw-r--r-- | src/cmd/6l/go.c | 5 | ||||
-rw-r--r-- | src/cmd/6l/obj.c | 9 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/cmd/6l/go.c b/src/cmd/6l/go.c index 06eea3407..10ebe3fdb 100644 --- a/src/cmd/6l/go.c +++ b/src/cmd/6l/go.c @@ -455,13 +455,13 @@ definetypesigs(void) n = 0; for(i=0; i<NHASH; i++) for(x = hash[i]; x; x=x->link) - if(memcmp(x->name, "sigt·", 6) == 0) + if(memcmp(x->name, "sigt·", 6) == 0 && x->type != Sxxx) n++; all = mal(n*sizeof all[0]); j = 0; for(i=0; i<NHASH; i++) for(x = hash[i]; x; x=x->link) - if(memcmp(x->name, "sigt·", 6) == 0) + if(memcmp(x->name, "sigt·", 6) == 0 && x->type != Sxxx) all[j++] = x; // sort them by name @@ -488,5 +488,4 @@ definetypesigs(void) if(debug['v']) Bprint(&bso, "%5.2f typesigs %d\n", cputime(), n); - } diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c index 8ecb035b4..a250f1c45 100644 --- a/src/cmd/6l/obj.c +++ b/src/cmd/6l/obj.c @@ -1063,8 +1063,11 @@ 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) + if(p->from.sym != S && p->from.sym->dupok) { + if(debug['v']) + Bprint(&bso, "skipping %s in %s: dupok", p->from.sym->name, pn); goto loop; + } if(edatap == P) datap = p; else @@ -1083,7 +1086,7 @@ loop: if(ntext++ == 0 && s->type != 0 && s->type != SXREF) { /* redefinition, so file has probably been seen before */ if(debug['v']) - diag("skipping: %s: redefinition: %s", pn, s->name); + Bprint(&bso, "skipping: %s: redefinition: %s", pn, s->name); return; } if(curtext != P) { @@ -1260,6 +1263,8 @@ lookup(char *symb, int v) return s; s = mal(sizeof(*s)); + if(debug['v'] > 1) + Bprint(&bso, "lookup %s\n", symb); s->name = malloc(l + 1); memmove(s->name, symb, l); |