aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2017-02-28 15:13:16 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2017-02-28 15:13:16 +0000
commitc5c78a527d98118e8ee8a098627a3f3f00307bd2 (patch)
treefc4c1d5e48b8405527572ac35f9bbf74d5e442f7 /libgo
parent5d805ca6229a56bc74337689d2a7129a14185e16 (diff)
downloadgcc-c5c78a527d98118e8ee8a098627a3f3f00307bd2.zip
gcc-c5c78a527d98118e8ee8a098627a3f3f00307bd2.tar.gz
gcc-c5c78a527d98118e8ee8a098627a3f3f00307bd2.tar.bz2
runtime: fix sigfwd to not allocate memory
The use of &[1]uintptr{fn} was causing sigfwd to allocate memory, even though it is being compiled for the runtime package. That is a bad idea for this function, which is invoked by a signal handler. Rewrite it to use only constructs that do not allocate memory when compiled for the runtime package. The test for this is misc/cgo/testcarchive in the main repo, which we don't yet test. Reviewed-on: https://go-review.googlesource.com/37454 From-SVN: r245777
Diffstat (limited to 'libgo')
-rw-r--r--libgo/go/runtime/signal_gccgo.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/libgo/go/runtime/signal_gccgo.go b/libgo/go/runtime/signal_gccgo.go
index 570a076..b4257c9 100644
--- a/libgo/go/runtime/signal_gccgo.go
+++ b/libgo/go/runtime/signal_gccgo.go
@@ -127,9 +127,10 @@ func raiseproc(sig uint32) {
//go:nosplit
//go:nowritebarrierrec
func sigfwd(fn uintptr, sig uint32, info *_siginfo_t, ctx unsafe.Pointer) {
- f1 := &[1]uintptr{fn}
- f2 := *(*func(uint32, *_siginfo_t, unsafe.Pointer))(unsafe.Pointer(&f1))
- f2(sig, info, ctx)
+ f1 := [1]uintptr{fn}
+ f2 := &f1
+ f3 := *(*func(uint32, *_siginfo_t, unsafe.Pointer))(unsafe.Pointer(&f2))
+ f3(sig, info, ctx)
}
//go:nosplit