1
0
mirror of https://github.com/golang/go synced 2024-11-19 02:34:44 -07:00

[dev.cc] runtime: convert dragonfly/386 port to Go

LGTM=rsc
R=rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/178210043
This commit is contained in:
Joel Sing 2014-11-25 03:15:11 +11:00
parent a236804c76
commit 6ddc2cb80c
3 changed files with 78 additions and 59 deletions

View File

@ -92,16 +92,16 @@ type rtprio struct {
} }
type lwpparams struct { type lwpparams struct {
_type unsafe.Pointer start_func uintptr
arg *byte arg unsafe.Pointer
stack *byte stack uintptr
tid1 *int32 tid1 unsafe.Pointer // *int32
tid2 *int32 tid2 unsafe.Pointer // *int32
} }
type sigaltstackt struct { type sigaltstackt struct {
ss_sp *int8 ss_sp uintptr
ss_size uint32 ss_size uintptr
ss_flags int32 ss_flags int32
} }
@ -110,8 +110,8 @@ type sigset struct {
} }
type stackt struct { type stackt struct {
ss_sp *int8 ss_sp uintptr
ss_size uint32 ss_size uintptr
ss_flags int32 ss_flags int32
} }
@ -122,39 +122,39 @@ type siginfo struct {
si_pid int32 si_pid int32
si_uid uint32 si_uid uint32
si_status int32 si_status int32
si_addr *byte si_addr uintptr
si_value [4]byte si_value [4]byte
si_band int32 si_band int32
__spare__ [7]int32 __spare__ [7]int32
} }
type mcontext struct { type mcontext struct {
mc_onstack int32 mc_onstack uint32
mc_gs int32 mc_gs uint32
mc_fs int32 mc_fs uint32
mc_es int32 mc_es uint32
mc_ds int32 mc_ds uint32
mc_edi int32 mc_edi uint32
mc_esi int32 mc_esi uint32
mc_ebp int32 mc_ebp uint32
mc_isp int32 mc_isp uint32
mc_ebx int32 mc_ebx uint32
mc_edx int32 mc_edx uint32
mc_ecx int32 mc_ecx uint32
mc_eax int32 mc_eax uint32
mc_xflags int32 mc_xflags uint32
mc_trapno int32 mc_trapno uint32
mc_err int32 mc_err uint32
mc_eip int32 mc_eip uint32
mc_cs int32 mc_cs uint32
mc_eflags int32 mc_eflags uint32
mc_esp int32 mc_esp uint32
mc_ss int32 mc_ss uint32
mc_len int32 mc_len uint32
mc_fpformat int32 mc_fpformat uint32
mc_ownedfp int32 mc_ownedfp uint32
mc_fpregs [128]int32 mc_fpregs [128]uint32
__spare__ [16]int32 __spare__ [16]uint32
} }
type ucontext struct { type ucontext struct {
@ -170,11 +170,19 @@ type timespec struct {
tv_nsec int32 tv_nsec int32
} }
func (ts *timespec) set_sec(x int64) {
ts.tv_sec = int32(x)
}
type timeval struct { type timeval struct {
tv_sec int32 tv_sec int32
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

View File

@ -0,0 +1,34 @@
// 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() *mcontext { return &(*ucontext)(c.ctxt).uc_mcontext }
func (c *sigctxt) eax() uint32 { return c.regs().mc_eax }
func (c *sigctxt) ebx() uint32 { return c.regs().mc_ebx }
func (c *sigctxt) ecx() uint32 { return c.regs().mc_ecx }
func (c *sigctxt) edx() uint32 { return c.regs().mc_edx }
func (c *sigctxt) edi() uint32 { return c.regs().mc_edi }
func (c *sigctxt) esi() uint32 { return c.regs().mc_esi }
func (c *sigctxt) ebp() uint32 { return c.regs().mc_ebp }
func (c *sigctxt) esp() uint32 { return c.regs().mc_esp }
func (c *sigctxt) eip() uint32 { return c.regs().mc_eip }
func (c *sigctxt) eflags() uint32 { return c.regs().mc_eflags }
func (c *sigctxt) cs() uint32 { return uint32(c.regs().mc_cs) }
func (c *sigctxt) fs() uint32 { return uint32(c.regs().mc_fs) }
func (c *sigctxt) gs() uint32 { return uint32(c.regs().mc_gs) }
func (c *sigctxt) sigcode() uint32 { return uint32(c.info.si_code) }
func (c *sigctxt) sigaddr() uint32 { return uint32(c.info.si_addr) }
func (c *sigctxt) set_eip(x uint32) { c.regs().mc_eip = x }
func (c *sigctxt) set_esp(x uint32) { c.regs().mc_esp = x }
func (c *sigctxt) set_sigcode(x uint32) { c.info.si_code = int32(x) }
func (c *sigctxt) set_sigaddr(x uint32) { c.info.si_addr = uintptr(x) }

View File

@ -1,23 +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) (((Ucontext*)(ctxt))->uc_mcontext)
#define SIG_EAX(info, ctxt) (SIG_REGS(ctxt).mc_eax)
#define SIG_EBX(info, ctxt) (SIG_REGS(ctxt).mc_ebx)
#define SIG_ECX(info, ctxt) (SIG_REGS(ctxt).mc_ecx)
#define SIG_EDX(info, ctxt) (SIG_REGS(ctxt).mc_edx)
#define SIG_EDI(info, ctxt) (SIG_REGS(ctxt).mc_edi)
#define SIG_ESI(info, ctxt) (SIG_REGS(ctxt).mc_esi)
#define SIG_EBP(info, ctxt) (SIG_REGS(ctxt).mc_ebp)
#define SIG_ESP(info, ctxt) (SIG_REGS(ctxt).mc_esp)
#define SIG_EIP(info, ctxt) (SIG_REGS(ctxt).mc_eip)
#define SIG_EFLAGS(info, ctxt) (SIG_REGS(ctxt).mc_eflags)
#define SIG_CS(info, ctxt) (SIG_REGS(ctxt).mc_cs)
#define SIG_FS(info, ctxt) (SIG_REGS(ctxt).mc_fs)
#define SIG_GS(info, ctxt) (SIG_REGS(ctxt).mc_gs)
#define SIG_CODE0(info, ctxt) ((info)->si_code)
#define SIG_CODE1(info, ctxt) ((uintptr)(info)->si_addr)