mirror of
https://github.com/golang/go
synced 2024-11-11 23:10:23 -07:00
runtime: mark OpenBSD raise function nosplit
It is called by the signal handler before switching to gsignal (sigtrampgo -> sigfwdgo -> dieFromSignal -> raise) which means that it must not split the stack. All other instances of raise are already marked nosplit. Fixes #40076 Change-Id: I4794491331af48c46d0d8ebc82d34c6483f0e6cd Reviewed-on: https://go-review.googlesource.com/c/go/+/241121 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
0844ff8eef
commit
9699086043
@ -104,6 +104,25 @@ func TestStdPipe(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test redirecting stdout but not stderr. Issue 40076.
|
||||||
|
cmd := osexec.Command(os.Args[0], "-test.run", "TestStdPipeHelper")
|
||||||
|
cmd.Stdout = w
|
||||||
|
var stderr bytes.Buffer
|
||||||
|
cmd.Stderr = &stderr
|
||||||
|
cmd.Env = append(os.Environ(), "GO_TEST_STD_PIPE_HELPER=1")
|
||||||
|
if err := cmd.Run(); err == nil {
|
||||||
|
t.Errorf("unexpected success of write to closed stdout")
|
||||||
|
} else if ee, ok := err.(*osexec.ExitError); !ok {
|
||||||
|
t.Errorf("unexpected exec error type %T: %v", err, err)
|
||||||
|
} else if ws, ok := ee.Sys().(syscall.WaitStatus); !ok {
|
||||||
|
t.Errorf("unexpected wait status type %T: %v", ee.Sys(), ee.Sys())
|
||||||
|
} else if !ws.Signaled() || ws.Signal() != syscall.SIGPIPE {
|
||||||
|
t.Errorf("unexpected exit status %v for write to closed stdout", err)
|
||||||
|
}
|
||||||
|
if output := stderr.Bytes(); len(output) > 0 {
|
||||||
|
t.Errorf("unexpected output on stderr: %s", output)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is a helper for TestStdPipe. It's not a test in itself.
|
// This is a helper for TestStdPipe. It's not a test in itself.
|
||||||
|
@ -340,6 +340,7 @@ func osStackRemap(s *mspan, flags int32) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:nosplit
|
||||||
func raise(sig uint32) {
|
func raise(sig uint32) {
|
||||||
thrkill(getthrid(), int(sig))
|
thrkill(getthrid(), int(sig))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user