diff options
author | Russ Cox <rsc@golang.org> | 2009-01-20 15:36:43 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-01-20 15:36:43 -0800 |
commit | be323cab54e32b56ff7c58ce0828a486bb328d3f (patch) | |
tree | d32b7a674c46e005de789ff680eec98f5e729fca /src/cmd/6l/pass.c | |
parent | 8498cd2641a58da02b38cab7a7ea9efb1064f243 (diff) | |
download | golang-be323cab54e32b56ff7c58ce0828a486bb328d3f.tar.gz |
6l: do not link in objects from an archive just for init functions.
(makes go libraries behave more like c libraries.)
R=r
DELTA=85 (67 added, 12 deleted, 6 changed)
OCL=23133
CL=23139
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) { |