]> Cypherpunks repositories - gostls13.git/commitdiff
6l: ignore undefined symbols in gotypesigs.
authorRuss Cox <rsc@golang.org>
Tue, 20 Jan 2009 21:21:22 +0000 (13:21 -0800)
committerRuss Cox <rsc@golang.org>
Tue, 20 Jan 2009 21:21:22 +0000 (13:21 -0800)
   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

src/cmd/6l/go.c
src/cmd/6l/obj.c

index 06eea3407a3e11f5fc7972497a127e77368cab47..10ebe3fdbb39a36b72bca6cf93b264aaa36027ee 100644 (file)
@@ -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);
-
 }
index 8ecb035b40b92a2da860520379e1bc5e21896e74..a250f1c45c747cb3a28180c0adff538392deccd3 100644 (file)
@@ -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);