//extern SigTabTT runtimeĀ·sigtab[];
-type sigset uint32
-
-var sigset_all = ^sigset(0)
+var sigset_all = ^uint32(0)
func unimplemented(name string) {
println(name, "not implemented")
print("newosproc stk=", stk, " m=", mp, " g=", mp.g0, " id=", mp.id, " ostk=", &mp, "\n")
}
- var oset sigset
+ var oset uint32
sigprocmask(_SIG_SETMASK, &sigset_all, &oset)
errno := bsdthread_create(stk, unsafe.Pointer(mp), funcPC(mstart))
sigprocmask(_SIG_SETMASK, &oset, nil)
}
stk := unsafe.Pointer(uintptr(stack) + stacksize)
- var oset sigset
+ var oset uint32
sigprocmask(_SIG_SETMASK, &sigset_all, &oset)
errno := bsdthread_create(stk, fn, fnarg)
sigprocmask(_SIG_SETMASK, &oset, nil)
}
func msigsave(mp *m) {
- sigprocmask(_SIG_SETMASK, nil, &mp.sigmask)
+ smask := (*uint32)(unsafe.Pointer(&mp.sigmask))
+ if unsafe.Sizeof(*smask) > unsafe.Sizeof(mp.sigmask) {
+ throw("insufficient storage for signal mask")
+ }
+ sigprocmask(_SIG_SETMASK, nil, smask)
}
// Called to initialize a new m (including the bootstrap m).
signalstack(&_g_.m.gsignal.stack)
// restore signal mask from m.sigmask and unblock essential signals
- nmask := _g_.m.sigmask
+ nmask := *(*uint32)(unsafe.Pointer(&_g_.m.sigmask))
for i := range sigtable {
if sigtable[i].flags&_SigUnblock != 0 {
nmask &^= 1 << (uint32(i) - 1)
// Called from dropm to undo the effect of an minit.
func unminit() {
_g_ := getg()
- sigprocmask(_SIG_SETMASK, &_g_.m.sigmask, nil)
+ smask := (*uint32)(unsafe.Pointer(&_g_.m.sigmask))
+ sigprocmask(_SIG_SETMASK, smask, nil)
signalstack(nil)
}
}
func updatesigmask(m sigmask) {
- s := sigset(m[0])
- sigprocmask(_SIG_SETMASK, &s, nil)
+ sigprocmask(_SIG_SETMASK, &m[0], nil)
}
func unblocksig(sig int32) {
- mask := sigset(1) << (uint32(sig) - 1)
+ mask := uint32(1) << (uint32(sig) - 1)
sigprocmask(_SIG_UNBLOCK, &mask, nil)
}
}
func msigsave(mp *m) {
- sigprocmask(_SIG_SETMASK, nil, &mp.sigmask)
+ smask := (*sigset)(unsafe.Pointer(&mp.sigmask))
+ if unsafe.Sizeof(*smask) > unsafe.Sizeof(mp.sigmask) {
+ throw("insufficient storage for signal mask")
+ }
+ sigprocmask(_SIG_SETMASK, nil, smask)
}
// Called to initialize a new m (including the bootstrap m).
signalstack(&_g_.m.gsignal.stack)
// restore signal mask from m.sigmask and unblock essential signals
- nmask := _g_.m.sigmask
+ nmask := *(*sigset)(unsafe.Pointer(&_g_.m.sigmask))
for i := range sigtable {
if sigtable[i].flags&_SigUnblock != 0 {
nmask.__bits[(i-1)/32] &^= 1 << ((uint32(i) - 1) & 31)
// Called from dropm to undo the effect of an minit.
func unminit() {
_g_ := getg()
- sigprocmask(_SIG_SETMASK, &_g_.m.sigmask, nil)
+ smask := (*sigset)(unsafe.Pointer(&_g_.m.sigmask))
+ sigprocmask(_SIG_SETMASK, smask, nil)
signalstack(nil)
}
}
func msigsave(mp *m) {
- sigprocmask(_SIG_SETMASK, nil, &mp.sigmask)
+ smask := (*sigset)(unsafe.Pointer(&mp.sigmask))
+ if unsafe.Sizeof(*smask) > unsafe.Sizeof(mp.sigmask) {
+ throw("insufficient storage for signal mask")
+ }
+ sigprocmask(_SIG_SETMASK, nil, smask)
}
// Called to initialize a new m (including the bootstrap m).
signalstack(&_g_.m.gsignal.stack)
// restore signal mask from m.sigmask and unblock essential signals
- nmask := _g_.m.sigmask
+ nmask := *(*sigset)(unsafe.Pointer(&_g_.m.sigmask))
for i := range sigtable {
if sigtable[i].flags&_SigUnblock != 0 {
nmask.__bits[(i-1)/32] &^= 1 << ((uint32(i) - 1) & 31)
// Called from dropm to undo the effect of an minit.
func unminit() {
_g_ := getg()
- sigprocmask(_SIG_SETMASK, &_g_.m.sigmask, nil)
+ smask := (*sigset)(unsafe.Pointer(&_g_.m.sigmask))
+ sigprocmask(_SIG_SETMASK, smask, nil)
signalstack(nil)
}
}
func msigsave(mp *m) {
- smask := &mp.sigmask
+ smask := (*sigset)(unsafe.Pointer(&mp.sigmask))
+ if unsafe.Sizeof(*smask) > unsafe.Sizeof(mp.sigmask) {
+ throw("insufficient storage for signal mask")
+ }
rtsigprocmask(_SIG_SETMASK, nil, smask, int32(unsafe.Sizeof(*smask)))
}
_g_.m.procid = uint64(gettid())
// restore signal mask from m.sigmask and unblock essential signals
- nmask := _g_.m.sigmask
+ nmask := *(*sigset)(unsafe.Pointer(&_g_.m.sigmask))
for i := range sigtable {
if sigtable[i].flags&_SigUnblock != 0 {
sigdelset(&nmask, i)
// Called from dropm to undo the effect of an minit.
func unminit() {
_g_ := getg()
- smask := &_g_.m.sigmask
+ smask := (*sigset)(unsafe.Pointer(&_g_.m.sigmask))
rtsigprocmask(_SIG_SETMASK, smask, nil, int32(unsafe.Sizeof(*smask)))
signalstack(nil)
}
import "unsafe"
-type sigset struct{}
-
// Called to initialize a new m (including the bootstrap m).
// Called on the parent thread (main thread in case of bootstrap), can allocate memory.
func mpreinit(mp *m) {
}
func msigsave(mp *m) {
- sigprocmask(_SIG_SETMASK, nil, &mp.sigmask)
+ smask := (*sigset)(unsafe.Pointer(&mp.sigmask))
+ if unsafe.Sizeof(*smask) > unsafe.Sizeof(mp.sigmask) {
+ throw("insufficient storage for signal mask")
+ }
+ sigprocmask(_SIG_SETMASK, nil, smask)
}
// Called to initialize a new m (including the bootstrap m).
signalstack(&_g_.m.gsignal.stack)
// restore signal mask from m.sigmask and unblock essential signals
- nmask := _g_.m.sigmask
+ nmask := *(*sigset)(unsafe.Pointer(&_g_.m.sigmask))
for i := range sigtable {
if sigtable[i].flags&_SigUnblock != 0 {
nmask.__bits[(i-1)/32] &^= 1 << ((uint32(i) - 1) & 31)
// Called from dropm to undo the effect of an minit.
func unminit() {
_g_ := getg()
- sigprocmask(_SIG_SETMASK, &_g_.m.sigmask, nil)
+ smask := (*sigset)(unsafe.Pointer(&_g_.m.sigmask))
+ sigprocmask(_SIG_SETMASK, smask, nil)
signalstack(nil)
}
_CLOCK_MONOTONIC = 3
)
-type sigset uint32
-
const (
- sigset_none = sigset(0)
- sigset_all = ^sigset(0)
+ sigset_none = uint32(0)
+ sigset_all = ^uint32(0)
)
// From OpenBSD's <sys/sysctl.h>
}
func msigsave(mp *m) {
- mp.sigmask = sigprocmask(_SIG_BLOCK, 0)
+ smask := (*uint32)(unsafe.Pointer(&mp.sigmask))
+ if unsafe.Sizeof(*smask) > unsafe.Sizeof(mp.sigmask) {
+ throw("insufficient storage for signal mask")
+ }
+ *smask = sigprocmask(_SIG_BLOCK, 0)
}
// Called to initialize a new m (including the bootstrap m).
signalstack(&_g_.m.gsignal.stack)
// restore signal mask from m.sigmask and unblock essential signals
- nmask := _g_.m.sigmask
+ nmask := *(*uint32)(unsafe.Pointer(&_g_.m.sigmask))
for i := range sigtable {
if sigtable[i].flags&_SigUnblock != 0 {
nmask &^= 1 << (uint32(i) - 1)
// Called from dropm to undo the effect of an minit.
func unminit() {
_g_ := getg()
- sigprocmask(_SIG_SETMASK, _g_.m.sigmask)
+ smask := *(*uint32)(unsafe.Pointer(&_g_.m.sigmask))
+ sigprocmask(_SIG_SETMASK, smask)
signalstack(nil)
}
if restart {
sa.sa_flags |= _SA_RESTART
}
- sa.sa_mask = uint32(sigset_all)
+ sa.sa_mask = sigset_all
if fn == funcPC(sighandler) {
fn = funcPC(sigtramp)
}
}
func updatesigmask(m sigmask) {
- sigprocmask(_SIG_SETMASK, sigset(m[0]))
+ sigprocmask(_SIG_SETMASK, m[0])
}
func unblocksig(sig int32) {
- mask := sigset(1) << (uint32(sig) - 1)
+ mask := uint32(1) << (uint32(sig) - 1)
sigprocmask(_SIG_UNBLOCK, mask)
}
"unsafe"
)
-type sigset struct{}
-
// Called to initialize a new m (including the bootstrap m).
// Called on the parent thread (main thread in case of bootstrap), can allocate memory.
func mpreinit(mp *m) {
_GetQueuedCompletionStatusEx stdFunction
)
-type sigset struct{}
-
// Call a Windows function with stdcall conventions,
// and switch to os stack during the call.
func asmstdcall(fn unsafe.Pointer)
func miniterrno()
func msigsave(mp *m) {
- sigprocmask(_SIG_SETMASK, nil, &mp.sigmask)
+ smask := (*sigset)(unsafe.Pointer(&mp.sigmask))
+ if unsafe.Sizeof(*smask) > unsafe.Sizeof(mp.sigmask) {
+ throw("insufficient storage for signal mask")
+ }
+ sigprocmask(_SIG_SETMASK, nil, smask)
}
// Called to initialize a new m (including the bootstrap m).
signalstack(&_g_.m.gsignal.stack)
// restore signal mask from m.sigmask and unblock essential signals
- nmask := _g_.m.sigmask
+ nmask := *(*sigset)(unsafe.Pointer(&_g_.m.sigmask))
for i := range sigtable {
if sigtable[i].flags&_SigUnblock != 0 {
nmask.__sigbits[(i-1)/32] &^= 1 << ((uint32(i) - 1) & 31)
// Called from dropm to undo the effect of an minit.
func unminit() {
_g_ := getg()
- sigprocmask(_SIG_SETMASK, &_g_.m.sigmask, nil)
+ smask := (*sigset)(unsafe.Pointer(&_g_.m.sigmask))
+ sigprocmask(_SIG_SETMASK, smask, nil)
signalstack(nil)
}
func sysctl(mib *uint32, miblen uint32, out *byte, size *uintptr, dst *byte, ndst uintptr) int32
//go:noescape
-func sigprocmask(how uint32, new, old *sigset)
+func sigprocmask(how uint32, new, old *uint32)
//go:noescape
func sigaction(mode uint32, new, old *sigactiont)
func sigaltstack(new, old *stackt)
//go:noescape
-func sigprocmask(mode int32, new sigset) sigset
+func sigprocmask(mode int32, new uint32) uint32
//go:noescape
func sysctl(mib *uint32, miblen uint32, out *byte, size *uintptr, dst *byte, ndst uintptr) int32
// Fields not known to debuggers.
procid uint64 // for debuggers, but offset not hard-coded
gsignal *g // signal-handling g
- sigmask sigset // storage for saved signal mask
+ sigmask [4]uintptr // storage for saved signal mask
tls [6]uintptr // thread-local storage (for x86 extern register)
mstartfn func()
curg *g // current running goroutine