diff options
| -rw-r--r-- | src/cmd/5l/asm.c | 3 | ||||
| -rw-r--r-- | src/cmd/5l/pass.c | 4 | ||||
| -rw-r--r-- | src/cmd/6l/pass.c | 4 | ||||
| -rw-r--r-- | src/cmd/6l/span.c | 4 | ||||
| -rw-r--r-- | src/cmd/8l/pass.c | 4 | ||||
| -rw-r--r-- | src/cmd/8l/span.c | 3 | ||||
| -rw-r--r-- | src/cmd/ld/go.c | 25 |
7 files changed, 21 insertions, 26 deletions
diff --git a/src/cmd/5l/asm.c b/src/cmd/5l/asm.c index 204100941..dbb305892 100644 --- a/src/cmd/5l/asm.c +++ b/src/cmd/5l/asm.c @@ -621,6 +621,9 @@ asmsym(void) if(a->type == D_FILE1) putsymb(a->asym->name, 'Z', a->aoffset, 0); + if(!s->reachable) + continue; + if(s->type == STEXT) putsymb(s->name, 'T', s->value, s->version); else diff --git a/src/cmd/5l/pass.c b/src/cmd/5l/pass.c index 0d30f82f6..8387dead1 100644 --- a/src/cmd/5l/pass.c +++ b/src/cmd/5l/pass.c @@ -222,6 +222,10 @@ loop: a = p->as; if(a == ATEXT) curtext = p; + if(!curtext->from.sym->reachable) { + p = p->cond; + goto loop; + } if(a == AB) { q = p->cond; if(q != P) { diff --git a/src/cmd/6l/pass.c b/src/cmd/6l/pass.c index 913ff728b..c2f560500 100644 --- a/src/cmd/6l/pass.c +++ b/src/cmd/6l/pass.c @@ -201,6 +201,10 @@ loop: return; if(p->as == ATEXT) curtext = p; + if(!curtext->from.sym->reachable) { + p = p->pcond; + goto loop; + } if(p->as == AJMP) if((q = p->pcond) != P && q->as != ATEXT) { p->mark = 1; diff --git a/src/cmd/6l/span.c b/src/cmd/6l/span.c index 9c24874da..f1eafff00 100644 --- a/src/cmd/6l/span.c +++ b/src/cmd/6l/span.c @@ -252,6 +252,8 @@ asmsym(void) for(p = textp; p != P; p = p->pcond) { s = p->from.sym; + if(s->type != STEXT) + continue; /* filenames first */ for(a=p->to.autom; a; a=a->link) @@ -261,7 +263,7 @@ asmsym(void) if(a->type == D_FILE1) putsymb(a->asym->name, 'Z', a->aoffset, 0, 0); - if(s->type != STEXT) + if(!s->reachable) continue; putsymb(s->name, 'T', s->value, s->version, s->gotype); diff --git a/src/cmd/8l/pass.c b/src/cmd/8l/pass.c index 4dbd19309..8b714fdba 100644 --- a/src/cmd/8l/pass.c +++ b/src/cmd/8l/pass.c @@ -178,6 +178,10 @@ loop: return; if(p->as == ATEXT) curtext = p; + if(!curtext->from.sym->reachable) { + p = p->pcond; + goto loop; + } if(p->as == AJMP) if((q = p->pcond) != P && q->as != ATEXT) { p->mark = 1; diff --git a/src/cmd/8l/span.c b/src/cmd/8l/span.c index a1da9d6c2..0b2d70e8e 100644 --- a/src/cmd/8l/span.c +++ b/src/cmd/8l/span.c @@ -251,6 +251,9 @@ asmsym(void) if(a->type == D_FILE1) putsymb(a->asym->name, 'Z', a->aoffset, 0, 0); + if(!s->reachable) + continue; + putsymb(s->name, 'T', s->value, s->version, s->gotype); /* frame, auto and param after */ diff --git a/src/cmd/ld/go.c b/src/cmd/ld/go.c index 30d8348c7..f86b457b6 100644 --- a/src/cmd/ld/go.c +++ b/src/cmd/ld/go.c @@ -433,22 +433,6 @@ sweeplist(Prog **first, Prog **last) case ADATA: case AGLOBL: reachable = p->from.sym->reachable; - if(!reachable) { - if(debug['v'] > 1) - Bprint(&bso, "discard %s\n", p->from.sym->name); - p->from.sym->type = Sxxx; - break; - } - if(p->as == ATEXT) { - // keeping this function; link into textp list - if(etextp == P) - textp = p; - else - etextp->pcond = p; - etextp = p; - etextp->pcond = P; - } - break; } if(reachable) { if(q == P) @@ -496,15 +480,6 @@ deadcode(void) for(i=0; i<nelem(morename); i++) mark(lookup(morename[i], 0)); - // remove dead code. - // sweeplist will rebuild the list of functions at textp - textp = P; - etextp = P; - - // follow is going to redo the firstp, lastp list - // but update it anyway just to keep things consistent. - sweeplist(&firstp, &lastp); - // remove dead data sweeplist(&datap, &edatap); } |
