From 9b73238daa6a5d08eb2265fc38577cb6003f0d23 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 8 Mar 2012 12:12:40 -0500 Subject: cgo, runtime: diagnose callback on non-Go thread Before: $ go run x.go signal 11 (core dumped) $ After: $ go run x.go runtime: cgo callback on thread not created by Go. signal 11 (core dumped) $ For issue 3068. Not a fix, but as much of a fix as we can do before Go 1. R=golang-dev, rogpeppe, gri CC=golang-dev https://golang.org/cl/5781047 --- src/cmd/cgo/out.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/cmd') diff --git a/src/cmd/cgo/out.go b/src/cmd/cgo/out.go index d6447caff6..bbadad1bed 100644 --- a/src/cmd/cgo/out.go +++ b/src/cmd/cgo/out.go @@ -573,8 +573,9 @@ func (p *Package) writeExports(fgo2, fc, fm *os.File) { goname = "_cgoexpwrap" + cPrefix + "_" + fn.Recv.List[0].Names[0].Name + "_" + goname } fmt.Fprintf(fc, "#pragma dynexport %s %s\n", goname, goname) - fmt.Fprintf(fc, "extern void ·%s();\n", goname) - fmt.Fprintf(fc, "\nvoid\n") + fmt.Fprintf(fc, "extern void ·%s();\n\n", goname) + fmt.Fprintf(fc, "#pragma textflag 7\n") // no split stack, so no use of m or g + fmt.Fprintf(fc, "void\n") fmt.Fprintf(fc, "_cgoexp%s_%s(void *a, int32 n)\n", cPrefix, exp.ExpName) fmt.Fprintf(fc, "{\n") fmt.Fprintf(fc, "\truntime·cgocallback(·%s, a, n);\n", goname) -- cgit v1.3-5-g9baa