Commit c5c78a52 by Ian Lance Taylor

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
parent 5d805ca6
0bcc1bc98dca48af40d9f54f4eacbbafaa30beb1 e1502234b5011a1ab859519f1f217dbf4369ec9b
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -127,9 +127,10 @@ func raiseproc(sig uint32) { ...@@ -127,9 +127,10 @@ func raiseproc(sig uint32) {
//go:nosplit //go:nosplit
//go:nowritebarrierrec //go:nowritebarrierrec
func sigfwd(fn uintptr, sig uint32, info *_siginfo_t, ctx unsafe.Pointer) { func sigfwd(fn uintptr, sig uint32, info *_siginfo_t, ctx unsafe.Pointer) {
f1 := &[1]uintptr{fn} f1 := [1]uintptr{fn}
f2 := *(*func(uint32, *_siginfo_t, unsafe.Pointer))(unsafe.Pointer(&f1)) f2 := &f1
f2(sig, info, ctx) f3 := *(*func(uint32, *_siginfo_t, unsafe.Pointer))(unsafe.Pointer(&f2))
f3(sig, info, ctx)
} }
//go:nosplit //go:nosplit
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment