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/go.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/go.c')
-rw-r--r-- | src/cmd/6l/go.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cmd/6l/go.c b/src/cmd/6l/go.c index 10ebe3fdb..07a0f21d5 100644 --- a/src/cmd/6l/go.c +++ b/src/cmd/6l/go.c @@ -489,3 +489,35 @@ definetypesigs(void) if(debug['v']) Bprint(&bso, "%5.2f typesigs %d\n", cputime(), n); } + +int +isinitfunc(Sym *s) +{ + char *p; + + p = utfrune(s->name, 0xb7); // 0xb7 = '·' + if(p == nil) + return 0; + if(memcmp(p, "·Init·", 8) == 0 || memcmp(p, "·init·", 8) == 0) + return 1; + return 0; +} + +void +ignoreoptfuncs(void) +{ + Prog *p; + + // nop out calls to optional functions + // that were not pulled in from libraries. + for(p=firstp; p != P; p=p->link) { + if(p->to.sym != S && p->to.sym->type == SOPT) { + if(p->as != ACALL) + diag("bad use of optional function: %P", p); + p->as = ANOP; + p->from.type = D_NONE; + p->to.type = D_NONE; + } + } +} + |