]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: convert netbsd/arm to Go
authorRuss Cox <rsc@golang.org>
Fri, 5 Dec 2014 21:17:09 +0000 (16:17 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 5 Dec 2014 21:17:09 +0000 (16:17 -0500)
This was the last src/runtime/*.c file.

LGTM=austin
R=austin
CC=golang-codereviews
https://golang.org/cl/187770043

src/runtime/defs1_netbsd_arm.go
src/runtime/os_netbsd_arm.c [deleted file]
src/runtime/os_netbsd_arm.go [new file with mode: 0644]
src/runtime/signal_netbsd_arm.go [new file with mode: 0644]
src/runtime/signal_netbsd_arm.h [deleted file]

index 54ddf3882e264cf468d95c399384cdd213406cca..c976351a2709228967d9bd20866cae0003c2ce49 100644 (file)
@@ -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 (file)
index 9dd4bcd..0000000
+++ /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 (file)
index 0000000..83c4c06
--- /dev/null
@@ -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 (file)
index 0000000..9b114c8
--- /dev/null
@@ -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 (file)
index 12f5827..0000000
+++ /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])