Commit e67f1985 authored by Joel Sing's avatar Joel Sing Committed by Russ Cox

runtime: unbreak netbsd builds

Fix signal handling so that Go builds on NetBSD.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/7759048
parent 20c7e415
...@@ -45,7 +45,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp) ...@@ -45,7 +45,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp)
} }
t = &runtime·sigtab[sig]; t = &runtime·sigtab[sig];
if(info->si_code != SI_USER && (t->flags & SigPanic)) { if(SIG_CODE0(info, ctxt) != SI_USER && (t->flags & SigPanic)) {
if(gp == nil || gp == m->g0) if(gp == nil || gp == m->g0)
goto Throw; goto Throw;
...@@ -87,7 +87,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp) ...@@ -87,7 +87,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp)
return; return;
} }
if(info->si_code == SI_USER || (t->flags & SigNotify)) if(SIG_CODE0(info, ctxt) == SI_USER || (t->flags & SigNotify))
if(runtime·sigsend(sig)) if(runtime·sigsend(sig))
return; return;
if(t->flags & SigKill) if(t->flags & SigKill)
......
...@@ -53,7 +53,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp) ...@@ -53,7 +53,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp)
} }
t = &runtime·sigtab[sig]; t = &runtime·sigtab[sig];
if(info->si_code != SI_USER && (t->flags & SigPanic)) { if(SIG_CODE0(info, ctxt) != SI_USER && (t->flags & SigPanic)) {
if(gp == nil || gp == m->g0) if(gp == nil || gp == m->g0)
goto Throw; goto Throw;
...@@ -97,7 +97,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp) ...@@ -97,7 +97,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp)
return; return;
} }
if(info->si_code == SI_USER || (t->flags & SigNotify)) if(SIG_CODE0(info, ctxt) == SI_USER || (t->flags & SigNotify))
if(runtime·sigsend(sig)) if(runtime·sigsend(sig))
return; return;
if(t->flags & SigKill) if(t->flags & SigKill)
......
...@@ -52,7 +52,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp) ...@@ -52,7 +52,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp)
} }
t = &runtime·sigtab[sig]; t = &runtime·sigtab[sig];
if(info->si_code != SI_USER && (t->flags & SigPanic)) { if(SIG_CODE0(info, ctxt) != SI_USER && (t->flags & SigPanic)) {
if(gp == nil || gp == m->g0) if(gp == nil || gp == m->g0)
goto Throw; goto Throw;
...@@ -85,7 +85,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp) ...@@ -85,7 +85,7 @@ runtime·sighandler(int32 sig, Siginfo *info, void *ctxt, G *gp)
return; return;
} }
if(info->si_code == SI_USER || (t->flags & SigNotify)) if(SIG_CODE0(info, ctxt) == SI_USER || (t->flags & SigNotify))
if(runtime·sigsend(sig)) if(runtime·sigsend(sig))
return; return;
if(t->flags & SigKill) if(t->flags & SigKill)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#define SIG_REGS(ctxt) (((Ucontext*)(ctxt))->uc_mcontext) #define SIG_REGS(ctxt) (((UcontextT*)(ctxt))->uc_mcontext)
#define SIG_EAX(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EAX]) #define SIG_EAX(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EAX])
#define SIG_EBX(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EBX]) #define SIG_EBX(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EBX])
...@@ -11,9 +11,9 @@ ...@@ -11,9 +11,9 @@
#define SIG_EDI(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EDI]) #define SIG_EDI(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EDI])
#define SIG_ESI(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_ESI]) #define SIG_ESI(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_ESI])
#define SIG_EBP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EBP]) #define SIG_EBP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EBP])
#define SIG_ESP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_ESP]) #define SIG_ESP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_UESP])
#define SIG_EIP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EIP]) #define SIG_EIP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EIP])
#define SIG_EFLAGS(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EFLAGS]) #define SIG_EFLAGS(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_EFL])
#define SIG_CS(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_CS]) #define SIG_CS(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_CS])
#define SIG_FS(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_FS]) #define SIG_FS(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_FS])
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#define SIG_REGS(ctxt) (((Ucontext*)(ctxt))->uc_mcontext) #define SIG_REGS(ctxt) (((UcontextT*)(ctxt))->uc_mcontext)
#define SIG_RAX(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_RAX]) #define SIG_RAX(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_RAX])
#define SIG_RBX(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_RBX]) #define SIG_RBX(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_RBX])
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
#define SIG_REGS(ctxt) (((Ucontext*)(ctxt))->uc_mcontext) #define SIG_REGS(ctxt) (((UcontextT*)(ctxt))->uc_mcontext)
#define SIG_R0(info, ctxt) (SIG_REGS(ctxt).__gregs[0]) #define SIG_R0(info, ctxt) (SIG_REGS(ctxt).__gregs[0])
#define SIG_R1(info, ctxt) (SIG_REGS(ctxt).__gregs[1]) #define SIG_R1(info, ctxt) (SIG_REGS(ctxt).__gregs[1])
......
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