Hi Ian, > Because of how gccgo implements cgo calls, the code in dropm may not > have any write barriers. As a step toward implementing that, change > the gcstack, gcnextsegment, and gcnextsp fields of the g struct to > uintptr, so that assignments to them do not require write barriers. > The gcinitialsp field remains unsafe.Pointer, as on 32-bit systems > that do not support split stack it points to a heap allocated space > used for the goroutine stack. > > The test for this is runtime tests like TestCgoCallbackGC, which are > not run today but will be run with a future gotools patch. > > Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed > to mainline.
this patch broke bootstrap on non-split-stack targets like Solaris: /vol/gcc/src/hg/trunk/local/libgo/runtime/proc.c: In function âdoentersyscallblockâ: /vol/gcc/src/hg/trunk/local/libgo/runtime/proc.c:681:15: error: assignment makes integer from pointer without a cast [-Werror=int-conversion] g->gcnextsp = (byte *) &v; ^ The patch below allowed sparc-sun-solaris2.12 and i386-pc-solaris2.12 builds to finish. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University
diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c --- a/libgo/runtime/proc.c +++ b/libgo/runtime/proc.c @@ -678,7 +678,7 @@ doentersyscallblock(uintptr pc, uintptr { void *v; - g->gcnextsp = (byte *) &v; + g->gcnextsp = (uintptr)(&v); } #endif