From dd4aebb84ab8ee8dd11b12a7802a02373fabac6c Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 23 Nov 2008 17:08:55 -0800 Subject: delete stack mark strings in favor of using in-memory copy of symbol table. $ ls -l pretty pretty.big -rwxr-xr-x 1 rsc eng 439516 Nov 21 16:43 pretty -rwxr-xr-x 1 rsc eng 580984 Nov 21 16:20 pretty.big $ R=r DELTA=446 (238 added, 178 deleted, 30 changed) OCL=19851 CL=19884 --- src/cmd/6l/pass.c | 94 ------------------------------------------------------- 1 file changed, 94 deletions(-) (limited to 'src/cmd/6l/pass.c') diff --git a/src/cmd/6l/pass.c b/src/cmd/6l/pass.c index 9f765e836..3ddc1e937 100644 --- a/src/cmd/6l/pass.c +++ b/src/cmd/6l/pass.c @@ -293,100 +293,6 @@ byteq(int v) return p; } -void -markstk(Prog *l) -{ - Prog *p0, *p, *q, *r; - int32 i, n, line; - Sym *s; - - version++; - s = lookup(l->from.sym->name, version); - s->type = STEXT; - line = l->line; - - // start with fake copy of ATEXT - p0 = prg(); - p = p0; - *p = *l; // note this gets p->pcond and p->line - - p->from.type = D_STATIC; - p->from.sym = s; - p->to.offset = 0; - - // put out magic sequence - n = strlen(SOFmark); - for(i=0; iline = line; - p->link = q; - p = q; - } - - // put out stack offset - n = l->to.offset; - if(n < 0) - n = 0; - for(i=0; i<3; i++) { - q = byteq(n); - q->line = line; - p->link = q; - p = q; - n = n>>8; - } - - // put out null terminated name - for(i=0;; i++) { - n = s->name[i]; - q = byteq(n); - q->line = line; - p->link = q; - p = q; - if(n == 0) - break; - } - - // put out return instruction - q = prg(); - q->as = ARET; - q->line = line; - p->link = q; - p = q; - - r = l->pcond; - l->pcond = p0; - p->link = r; - p0->pcond = r; - - // hard part is linking end of - // the text body to my fake ATEXT - for(p=l;; p=q) { - q = p->link; - if(q == r) { - p->link = p0; - return; - } - } -} - -void -addstackmark(void) -{ - Prog *p; - - if(debug['v']) - Bprint(&bso, "%5.2f stkmark\n", cputime()); - Bflush(&bso); - - for(p=textp; p!=P; p=p->pcond) { - markstk(p); // splice in new body - p = p->pcond; // skip the one we just put in - } - -// for(p=textp; p!=P; p=p->pcond) -// print("%P\n", p); -} - int relinv(int a) { -- cgit v1.2.3