Skip to content

Commit

Permalink
runtime: convert netbsd/arm to Go
Browse files Browse the repository at this point in the history
This was the last src/runtime/*.c file.

LGTM=austin
R=austin
CC=golang-codereviews
https://golang.org/cl/187770043
  • Loading branch information
rsc committed Dec 5, 2014
1 parent b9c5230 commit 7d51607
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 72 deletions.
29 changes: 21 additions & 8 deletions src/runtime/defs1_netbsd_arm.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ const (
)

type sigaltstackt struct {
ss_sp *byte
ss_size uint32
ss_sp uintptr
ss_size uintptr
ss_flags int32
}

Expand All @@ -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
}

Expand All @@ -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
Expand Down
34 changes: 0 additions & 34 deletions src/runtime/os_netbsd_arm.c

This file was deleted.

28 changes: 28 additions & 0 deletions src/runtime/os_netbsd_arm.go
Original file line number Diff line number Diff line change
@@ -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()
}
48 changes: 48 additions & 0 deletions src/runtime/signal_netbsd_arm.go
Original file line number Diff line number Diff line change
@@ -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)
}
30 changes: 0 additions & 30 deletions src/runtime/signal_netbsd_arm.h

This file was deleted.

0 comments on commit 7d51607

Please sign in to comment.