]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: run runtime.init
authorRuss Cox <rsc@golang.org>
Fri, 29 Aug 2014 17:22:31 +0000 (13:22 -0400)
committerRuss Cox <rsc@golang.org>
Fri, 29 Aug 2014 17:22:31 +0000 (13:22 -0400)
Run it right before main.init.
There is still some runtime initialization that
happens before runtime.init, and some of that
may call into Go code (for example to acquire locks)
so this timing is not perfect, but I believe it is the
best we can do.

This came up because global variables intialized
to func values are done in the generated init code,
not in the linker.

LGTM=dvyukov
R=dvyukov
CC=golang-codereviews, iant, khr, r
https://golang.org/cl/135210043

src/pkg/runtime/proc.c

index 66c5d475bb63a717e51dc6524238233efc470bbd..d91a829c15d0ed3b88feab646b62053a15e22bc5 100644 (file)
@@ -199,6 +199,7 @@ runtime·schedinit(void)
 }
 
 extern void main·init(void);
+extern void runtime·init(void);
 extern void main·main(void);
 
 static FuncVal initDone = { runtime·unlockOSThread };
@@ -246,6 +247,7 @@ runtime·main(void)
 
        if(g->m != &runtime·m0)
                runtime·throw("runtime·main not on m0");
+       runtime·init();
        main·init();
 
        if(g->defer != &d || d.fn != &initDone)