diff options
| author | Russ Cox <rsc@golang.org> | 2012-03-08 12:12:40 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2012-03-08 12:12:40 -0500 |
| commit | 9b73238daa6a5d08eb2265fc38577cb6003f0d23 (patch) | |
| tree | 00d9bf92376ea354da9b197fb6c3a60f1517e5da /src/cmd | |
| parent | 9b7b574edcff14d916215a72b7a9fc8bb82ab16e (diff) | |
| download | go-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.go | 5 |
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) |
