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);  } | 
