Commit fc8dca9d authored by Russ Cox's avatar Russ Cox

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
parent 5e2c0587
...@@ -503,22 +503,6 @@ isinitfunc(Sym *s) ...@@ -503,22 +503,6 @@ isinitfunc(Sym *s)
return 0; 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 void mark(Sym*);
static int markdepth; static int markdepth;
......
...@@ -150,7 +150,6 @@ enum ...@@ -150,7 +150,6 @@ enum
SFILE, SFILE,
SCONST, SCONST,
SUNDEF, SUNDEF,
SOPT,
SIMPORT, SIMPORT,
SEXPORT, SEXPORT,
...@@ -386,7 +385,6 @@ void ckoff(Sym*, int32); ...@@ -386,7 +385,6 @@ void ckoff(Sym*, int32);
Prog* copyp(Prog*); Prog* copyp(Prog*);
double cputime(void); double cputime(void);
void datblk(int32, int32); void datblk(int32, int32);
void ignoreoptfuncs(void);
void deadcode(void); void deadcode(void);
void definetypestrings(void); void definetypestrings(void);
void definetypesigs(void); void definetypesigs(void);
......
...@@ -368,7 +368,6 @@ main(int argc, char *argv[]) ...@@ -368,7 +368,6 @@ main(int argc, char *argv[])
sprint(a, "%s/lib/lib_%s_%s.a", goroot, goarch, goos); sprint(a, "%s/lib/lib_%s_%s.a", goroot, goarch, goos);
objfile(a); objfile(a);
} }
ignoreoptfuncs();
definetypestrings(); definetypestrings();
definetypesigs(); definetypesigs();
deadcode(); deadcode();
...@@ -950,11 +949,8 @@ loop: ...@@ -950,11 +949,8 @@ loop:
if(debug['W']) if(debug['W'])
print(" ANAME %s\n", s->name); print(" ANAME %s\n", s->name);
h[o] = s; 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; 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(v == D_FILE) {
if(s->type != SFILE) { if(s->type != SFILE) {
histgen++; histgen++;
...@@ -1096,7 +1092,7 @@ loop: ...@@ -1096,7 +1092,7 @@ loop:
case ATEXT: case ATEXT:
s = p->from.sym; 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 */ /* redefinition, so file has probably been seen before */
if(debug['v']) if(debug['v'])
Bprint(&bso, "skipping: %s: redefinition: %s", pn, s->name); Bprint(&bso, "skipping: %s: redefinition: %s", pn, s->name);
...@@ -1113,7 +1109,7 @@ loop: ...@@ -1113,7 +1109,7 @@ loop:
diag("%s: no TEXT symbol: %P", pn, p); diag("%s: no TEXT symbol: %P", pn, p);
errorexit(); errorexit();
} }
if(s->type != 0 && s->type != SXREF && s->type != SOPT) { if(s->type != 0 && s->type != SXREF) {
if(p->from.scale & DUPOK) { if(p->from.scale & DUPOK) {
skip = 1; skip = 1;
goto casdef; goto casdef;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment