runtime: fix sigfwd to not allocate memory
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 28 Feb 2017 15:13:16 +0000 (15:13 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 28 Feb 2017 15:13:16 +0000 (15:13 +0000)
    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
libgo/go/runtime/signal_gccgo.go

index 46b0d1cd3e1bba3119abf24757575638bb76c41d..3f3dddeb5e727d245b1a7139e34c6ddd5d9cf956 100644 (file)
@@ -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.
index 570a076684497c858938c06f56ba40a65cea19c5..b4257c9f973109b2c4b977b4a2fe49b0803d2580 100644 (file)
@@ -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