summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-01-20 13:21:22 -0800
committerRuss Cox <rsc@golang.org>2009-01-20 13:21:22 -0800
commitd68056354e5e88c1d4e665e081d77695c4f4e3e3 (patch)
treed7da5b35fc567047bfe731aefea4852d97a0c220
parent3d482667e2e055c26cb0a8b0558ec6b4ebd066b6 (diff)
downloadgolang-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.c5
-rw-r--r--src/cmd/6l/obj.c9
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);