summaryrefslogtreecommitdiff
path: root/src/cmd/6l/pass.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6l/pass.c')
-rw-r--r--src/cmd/6l/pass.c25
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)
{