From c5c78a527d98118e8ee8a098627a3f3f00307bd2 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 28 Feb 2017 15:13:16 +0000 Subject: [PATCH] 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 --- gcc/go/gofrontend/MERGE | 2 +- libgo/go/runtime/signal_gccgo.go | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 46b0d1cd3e1..3f3dddeb5e7 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -0bcc1bc98dca48af40d9f54f4eacbbafaa30beb1 +e1502234b5011a1ab859519f1f217dbf4369ec9b The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/runtime/signal_gccgo.go b/libgo/go/runtime/signal_gccgo.go index 570a0766844..b4257c9f973 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 -- 2.30.2