From: Russ Cox Date: Thu, 5 Feb 2009 21:58:43 +0000 (-0800) Subject: heuristic to stop pulling .6 in from .a X-Git-Tag: weekly.2009-11-06~2232 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fc8dca9dacb68eae277ba37a6356ea57398f96da;p=gostls13.git heuristic to stop pulling .6 in from .a is not right if the .6 is only for data and the init function. instead of that, pick up everything and let the dead code/data eliminator throw away the parts that weren't useful. R=r DELTA=25 (0 added, 22 deleted, 3 changed) OCL=24446 CL=24446 --- diff --git a/src/cmd/6l/go.c b/src/cmd/6l/go.c index a1a515fb3e..961a3320b0 100644 --- a/src/cmd/6l/go.c +++ b/src/cmd/6l/go.c @@ -503,22 +503,6 @@ isinitfunc(Sym *s) return 0; } -void -ignoreoptfuncs(void) -{ - Prog *p; - - // nop out calls to optional functions - // that were not pulled in from libraries. - for(p=firstp; p != P; p=p->link) { - if(p->to.sym != S && p->to.sym->type == SOPT) { - if(p->as != ACALL) - diag("bad use of optional function: %P", p); - nopout(p); - } - } -} - static void mark(Sym*); static int markdepth; diff --git a/src/cmd/6l/l.h b/src/cmd/6l/l.h index 6382203a59..83c28bd4b7 100644 --- a/src/cmd/6l/l.h +++ b/src/cmd/6l/l.h @@ -150,7 +150,6 @@ enum SFILE, SCONST, SUNDEF, - SOPT, SIMPORT, SEXPORT, @@ -386,7 +385,6 @@ void ckoff(Sym*, int32); Prog* copyp(Prog*); double cputime(void); void datblk(int32, int32); -void ignoreoptfuncs(void); void deadcode(void); void definetypestrings(void); void definetypesigs(void); diff --git a/src/cmd/6l/obj.c b/src/cmd/6l/obj.c index a23e030f59..b682ab1b1b 100644 --- a/src/cmd/6l/obj.c +++ b/src/cmd/6l/obj.c @@ -368,7 +368,6 @@ main(int argc, char *argv[]) sprint(a, "%s/lib/lib_%s_%s.a", goroot, goarch, goos); objfile(a); } - ignoreoptfuncs(); definetypestrings(); definetypesigs(); deadcode(); @@ -950,11 +949,8 @@ loop: if(debug['W']) print(" ANAME %s\n", s->name); h[o] = s; - if((v == D_EXTERN || v == D_STATIC) && s->type == 0) { + if((v == D_EXTERN || v == D_STATIC) && s->type == 0) s->type = SXREF; - if(isinitfunc(s)) - s->type = SOPT; // optional function; don't pull in an object file just for s. - } if(v == D_FILE) { if(s->type != SFILE) { histgen++; @@ -1096,7 +1092,7 @@ loop: case ATEXT: s = p->from.sym; - if(ntext++ == 0 && s->type != 0 && s->type != SXREF && s->type != SOPT) { + if(ntext++ == 0 && s->type != 0 && s->type != SXREF) { /* redefinition, so file has probably been seen before */ if(debug['v']) Bprint(&bso, "skipping: %s: redefinition: %s", pn, s->name); @@ -1113,7 +1109,7 @@ loop: diag("%s: no TEXT symbol: %P", pn, p); errorexit(); } - if(s->type != 0 && s->type != SXREF && s->type != SOPT) { + if(s->type != 0 && s->type != SXREF) { if(p->from.scale & DUPOK) { skip = 1; goto casdef;