From 1d0c89a454093801525f1750b1d54318b59b8a78 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 29 Aug 2014 13:22:31 -0400 Subject: [PATCH] runtime: run runtime.init 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index 66c5d475bb..d91a829c15 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -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)