libgo patch committed: Fix sigfwd to not allocate memory
Ian Lance Taylor
iant@golang.org
Tue Feb 28 15:16:00 GMT 2017
This patch to libgo fixes sigfwd to not allocate memory. The use of
&[1]uintptr{fn} was causing memory allocation, 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.
Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed
to mainline.
Ian
-------------- next part --------------
Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE (revision 245776)
+++ gcc/go/gofrontend/MERGE (working copy)
@@ -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: libgo/go/runtime/signal_gccgo.go
===================================================================
--- libgo/go/runtime/signal_gccgo.go (revision 245745)
+++ libgo/go/runtime/signal_gccgo.go (working copy)
@@ -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
More information about the Gcc-patches
mailing list