From bac1f5694bd02047e8de86ff16f8481ceaedc1f4 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Fri, 5 Dec 2014 16:17:09 -0500 Subject: runtime: convert netbsd/arm to Go This was the last src/runtime/*.c file. LGTM=austin R=austin CC=golang-codereviews https://codereview.appspot.com/187770043 --- src/runtime/defs1_netbsd_arm.go | 29 +++++++++++++++++------- src/runtime/os_netbsd_arm.c | 34 ---------------------------- src/runtime/os_netbsd_arm.go | 28 +++++++++++++++++++++++ src/runtime/signal_netbsd_arm.go | 48 ++++++++++++++++++++++++++++++++++++++++ src/runtime/signal_netbsd_arm.h | 30 ------------------------- 5 files changed, 97 insertions(+), 72 deletions(-) delete mode 100644 src/runtime/os_netbsd_arm.c create mode 100644 src/runtime/os_netbsd_arm.go create mode 100644 src/runtime/signal_netbsd_arm.go delete mode 100644 src/runtime/signal_netbsd_arm.h (limited to 'src') diff --git a/src/runtime/defs1_netbsd_arm.go b/src/runtime/defs1_netbsd_arm.go index 54ddf3882..c976351a2 100644 --- a/src/runtime/defs1_netbsd_arm.go +++ b/src/runtime/defs1_netbsd_arm.go @@ -84,8 +84,8 @@ const ( ) type sigaltstackt struct { - ss_sp *byte - ss_size uint32 + ss_sp uintptr + ss_size uintptr ss_flags int32 } @@ -94,15 +94,16 @@ type sigset struct { } type siginfo struct { - _signo int32 - _code int32 - _errno int32 - _reason [20]byte + _signo int32 + _code int32 + _errno int32 + _reason uintptr + _reasonx [16]byte } type stackt struct { - ss_sp *byte - ss_size uint32 + ss_sp uintptr + ss_size uintptr ss_flags int32 } @@ -111,11 +112,23 @@ type timespec struct { tv_nsec int32 } +func (ts *timespec) set_sec(x int32) { + ts.tv_sec = int64(x) +} + +func (ts *timespec) set_nsec(x int32) { + ts.tv_nsec = x +} + type timeval struct { tv_sec int64 tv_usec int32 } +func (tv *timeval) set_usec(x int32) { + tv.tv_usec = x +} + type itimerval struct { it_interval timeval it_value timeval diff --git a/src/runtime/os_netbsd_arm.c b/src/runtime/os_netbsd_arm.c deleted file mode 100644 index 9dd4bcdc9..000000000 --- a/src/runtime/os_netbsd_arm.c +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "runtime.h" -#include "defs_GOOS_GOARCH.h" -#include "os_GOOS.h" -#include "signal_GOOS_GOARCH.h" -#include "textflag.h" - -void -runtime·lwp_mcontext_init(McontextT *mc, void *stack, M *mp, G *gp, void (*fn)(void)) -{ - mc->__gregs[REG_R15] = (uint32)runtime·lwp_tramp; - mc->__gregs[REG_R13] = (uint32)stack; - mc->__gregs[REG_R0] = (uint32)mp; - mc->__gregs[REG_R1] = (uint32)gp; - mc->__gregs[REG_R2] = (uint32)fn; -} - -void -runtime·checkgoarm(void) -{ - // TODO(minux) -} - -#pragma textflag NOSPLIT -int64 -runtime·cputicks() { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand1(). - // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. - // TODO: need more entropy to better seed fastrand1. - return runtime·nanotime(); -} diff --git a/src/runtime/os_netbsd_arm.go b/src/runtime/os_netbsd_arm.go new file mode 100644 index 000000000..83c4c06cf --- /dev/null +++ b/src/runtime/os_netbsd_arm.go @@ -0,0 +1,28 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runtime + +import "unsafe" + +func lwp_mcontext_init(mc *mcontextt, stk unsafe.Pointer, mp *m, gp *g, fn uintptr) { + // Machine dependent mcontext initialisation for LWP. + mc.__gregs[_REG_R15] = uint32(funcPC(lwp_tramp)) + mc.__gregs[_REG_R13] = uint32(uintptr(stk)) + mc.__gregs[_REG_R0] = uint32(uintptr(unsafe.Pointer(mp))) + mc.__gregs[_REG_R1] = uint32(uintptr(unsafe.Pointer(gp))) + mc.__gregs[_REG_R2] = uint32(fn) +} + +func checkgoarm() { + // TODO(minux) +} + +//go:nosplit +func cputicks() int64 { + // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand1(). + // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. + // TODO: need more entropy to better seed fastrand1. + return nanotime() +} diff --git a/src/runtime/signal_netbsd_arm.go b/src/runtime/signal_netbsd_arm.go new file mode 100644 index 000000000..9b114c899 --- /dev/null +++ b/src/runtime/signal_netbsd_arm.go @@ -0,0 +1,48 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runtime + +import "unsafe" + +type sigctxt struct { + info *siginfo + ctxt unsafe.Pointer +} + +func (c *sigctxt) regs() *mcontextt { return &(*ucontextt)(c.ctxt).uc_mcontext } +func (c *sigctxt) r0() uint32 { return c.regs().__gregs[_REG_R0] } +func (c *sigctxt) r1() uint32 { return c.regs().__gregs[_REG_R1] } +func (c *sigctxt) r2() uint32 { return c.regs().__gregs[_REG_R2] } +func (c *sigctxt) r3() uint32 { return c.regs().__gregs[_REG_R3] } +func (c *sigctxt) r4() uint32 { return c.regs().__gregs[_REG_R4] } +func (c *sigctxt) r5() uint32 { return c.regs().__gregs[_REG_R5] } +func (c *sigctxt) r6() uint32 { return c.regs().__gregs[_REG_R6] } +func (c *sigctxt) r7() uint32 { return c.regs().__gregs[_REG_R7] } +func (c *sigctxt) r8() uint32 { return c.regs().__gregs[_REG_R8] } +func (c *sigctxt) r9() uint32 { return c.regs().__gregs[_REG_R9] } +func (c *sigctxt) r10() uint32 { return c.regs().__gregs[_REG_R10] } +func (c *sigctxt) fp() uint32 { return c.regs().__gregs[_REG_R11] } +func (c *sigctxt) ip() uint32 { return c.regs().__gregs[_REG_R12] } +func (c *sigctxt) sp() uint32 { return c.regs().__gregs[_REG_R13] } +func (c *sigctxt) lr() uint32 { return c.regs().__gregs[_REG_R14] } +func (c *sigctxt) pc() uint32 { return c.regs().__gregs[_REG_R15] } +func (c *sigctxt) cpsr() uint32 { return c.regs().__gregs[_REG_CPSR] } +func (c *sigctxt) fault() uint32 { return uint32(c.info._reason) } +func (c *sigctxt) trap() uint32 { return 0 } +func (c *sigctxt) error() uint32 { return 0 } +func (c *sigctxt) oldmask() uint32 { return 0 } + +func (c *sigctxt) sigcode() uint32 { return uint32(c.info._code) } +func (c *sigctxt) sigaddr() uint32 { return uint32(c.info._reason) } + +func (c *sigctxt) set_pc(x uint32) { c.regs().__gregs[_REG_R15] = x } +func (c *sigctxt) set_sp(x uint32) { c.regs().__gregs[_REG_R13] = x } +func (c *sigctxt) set_lr(x uint32) { c.regs().__gregs[_REG_R14] = x } +func (c *sigctxt) set_r10(x uint32) { c.regs().__gregs[_REG_R10] = x } + +func (c *sigctxt) set_sigcode(x uint32) { c.info._code = int32(x) } +func (c *sigctxt) set_sigaddr(x uint32) { + c.info._reason = uintptr(x) +} diff --git a/src/runtime/signal_netbsd_arm.h b/src/runtime/signal_netbsd_arm.h deleted file mode 100644 index 12f5827a6..000000000 --- a/src/runtime/signal_netbsd_arm.h +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#define SIG_REGS(ctxt) (((UcontextT*)(ctxt))->uc_mcontext) - -#define SIG_R0(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R0]) -#define SIG_R1(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R1]) -#define SIG_R2(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R2]) -#define SIG_R3(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R3]) -#define SIG_R4(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R4]) -#define SIG_R5(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R5]) -#define SIG_R6(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R6]) -#define SIG_R7(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R7]) -#define SIG_R8(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R8]) -#define SIG_R9(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R9]) -#define SIG_R10(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R10]) -#define SIG_FP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R11]) -#define SIG_IP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R12]) -#define SIG_SP(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R13]) -#define SIG_LR(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R14]) -#define SIG_PC(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_R15]) -#define SIG_CPSR(info, ctxt) (SIG_REGS(ctxt).__gregs[REG_CPSR]) -#define SIG_FAULT(info, ctxt) (*(uintptr*)&(info)->_reason[0]) -#define SIG_TRAP(info, ctxt) (0) -#define SIG_ERROR(info, ctxt) (0) -#define SIG_OLDMASK(info, ctxt) (0) - -#define SIG_CODE0(info, ctxt) ((info)->_code) -#define SIG_CODE1(info, ctxt) (*(uintptr*)&(info)->_reason[0]) -- cgit v1.2.1