summaryrefslogtreecommitdiff
path: root/src/cmd/6l/go.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-01-20 15:36:43 -0800
committerRuss Cox <rsc@golang.org>2009-01-20 15:36:43 -0800
commitbe323cab54e32b56ff7c58ce0828a486bb328d3f (patch)
treed32b7a674c46e005de789ff680eec98f5e729fca /src/cmd/6l/go.c
parent8498cd2641a58da02b38cab7a7ea9efb1064f243 (diff)
downloadgolang-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.c32
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;
+ }
+ }
+}
+