diff options
Diffstat (limited to 'src/cmd/6l/pass.c')
-rw-r--r-- | src/cmd/6l/pass.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/cmd/6l/pass.c b/src/cmd/6l/pass.c index e5316fe46..45617ac56 100644 --- a/src/cmd/6l/pass.c +++ b/src/cmd/6l/pass.c @@ -398,7 +398,8 @@ patch(void) q = q->link; } if(q == P) { - diag("branch out of range in %s\n%P", TNAME, p); + diag("branch out of range in %s\n%P [%s]", + TNAME, p, p->to.sym ? p->to.sym->name : "<nil>"); p->to.type = D_NONE; } p->pcond = q; @@ -853,6 +854,28 @@ newdata(Sym *s, int o, int w, int t) return p; } +Prog* +newtext(Prog *p, Sym *s) +{ + if(p == P) { + p = prg(); + p->as = ATEXT; + p->from.sym = s; + } + s->type = STEXT; + s->text = p; + s->value = pc; + lastp->link = p; + lastp = p; + p->pc = pc++; + if(textp == P) + textp = p; + else + etextp->pcond = p; + etextp = p; + return p; +} + void export(void) { |