aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2012-03-08 12:12:40 -0500
committerRuss Cox <rsc@golang.org>2012-03-08 12:12:40 -0500
commit9b73238daa6a5d08eb2265fc38577cb6003f0d23 (patch)
tree00d9bf92376ea354da9b197fb6c3a60f1517e5da /src/cmd
parent9b7b574edcff14d916215a72b7a9fc8bb82ab16e (diff)
downloadgo-9b73238daa6a5d08eb2265fc38577cb6003f0d23.tar.xz
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
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/cgo/out.go5
1 files changed, 3 insertions, 2 deletions
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)