Commit 7d516079 authored by Russ Cox's avatar Russ Cox

runtime: convert netbsd/arm to Go

This was the last src/runtime/*.c file.

LGTM=austin
R=austin
CC=golang-codereviews
https://golang.org/cl/187770043
parent b9c52302
...@@ -84,8 +84,8 @@ const ( ...@@ -84,8 +84,8 @@ const (
) )
type sigaltstackt struct { type sigaltstackt struct {
ss_sp *byte ss_sp uintptr
ss_size uint32 ss_size uintptr
ss_flags int32 ss_flags int32
} }
...@@ -94,15 +94,16 @@ type sigset struct { ...@@ -94,15 +94,16 @@ type sigset struct {
} }
type siginfo struct { type siginfo struct {
_signo int32 _signo int32
_code int32 _code int32
_errno int32 _errno int32
_reason [20]byte _reason uintptr
_reasonx [16]byte
} }
type stackt struct { type stackt struct {
ss_sp *byte ss_sp uintptr
ss_size uint32 ss_size uintptr
ss_flags int32 ss_flags int32
} }
...@@ -111,11 +112,23 @@ type timespec struct { ...@@ -111,11 +112,23 @@ type timespec struct {
tv_nsec int32 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 { type timeval struct {
tv_sec int64 tv_sec int64
tv_usec int32 tv_usec int32
} }
func (tv *timeval) set_usec(x int32) {
tv.tv_usec = x
}
type itimerval struct { type itimerval struct {
it_interval timeval it_interval timeval
it_value timeval it_value timeval
......
...@@ -2,33 +2,27 @@ ...@@ -2,33 +2,27 @@
// 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.
#include "runtime.h" package runtime
#include "defs_GOOS_GOARCH.h"
#include "os_GOOS.h"
#include "signal_GOOS_GOARCH.h"
#include "textflag.h"
void import "unsafe"
runtime·lwp_mcontext_init(McontextT *mc, void *stack, M *mp, G *gp, void (*fn)(void))
{ func lwp_mcontext_init(mc *mcontextt, stk unsafe.Pointer, mp *m, gp *g, fn uintptr) {
mc->__gregs[REG_R15] = (uint32)runtime·lwp_tramp; // Machine dependent mcontext initialisation for LWP.
mc->__gregs[REG_R13] = (uint32)stack; mc.__gregs[_REG_R15] = uint32(funcPC(lwp_tramp))
mc->__gregs[REG_R0] = (uint32)mp; mc.__gregs[_REG_R13] = uint32(uintptr(stk))
mc->__gregs[REG_R1] = (uint32)gp; mc.__gregs[_REG_R0] = uint32(uintptr(unsafe.Pointer(mp)))
mc->__gregs[REG_R2] = (uint32)fn; mc.__gregs[_REG_R1] = uint32(uintptr(unsafe.Pointer(gp)))
mc.__gregs[_REG_R2] = uint32(fn)
} }
void func checkgoarm() {
runtime·checkgoarm(void)
{
// TODO(minux) // TODO(minux)
} }
#pragma textflag NOSPLIT //go:nosplit
int64 func cputicks() int64 {
runtime·cputicks() {
// Currently cputicks() is used in blocking profiler and to seed runtime·fastrand1(). // 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. // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler.
// TODO: need more entropy to better seed fastrand1. // TODO: need more entropy to better seed fastrand1.
return runtime·nanotime(); return nanotime()
} }
// 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)
}
// 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])
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