package runtime
import (
"internal/abi"
"internal/goarch"
"unsafe"
)
func dumpregs (c *sigctxt ) {
print ("rax " , hex (c .rax ()), "\n" )
print ("rbx " , hex (c .rbx ()), "\n" )
print ("rcx " , hex (c .rcx ()), "\n" )
print ("rdx " , hex (c .rdx ()), "\n" )
print ("rdi " , hex (c .rdi ()), "\n" )
print ("rsi " , hex (c .rsi ()), "\n" )
print ("rbp " , hex (c .rbp ()), "\n" )
print ("rsp " , hex (c .rsp ()), "\n" )
print ("r8 " , hex (c .r8 ()), "\n" )
print ("r9 " , hex (c .r9 ()), "\n" )
print ("r10 " , hex (c .r10 ()), "\n" )
print ("r11 " , hex (c .r11 ()), "\n" )
print ("r12 " , hex (c .r12 ()), "\n" )
print ("r13 " , hex (c .r13 ()), "\n" )
print ("r14 " , hex (c .r14 ()), "\n" )
print ("r15 " , hex (c .r15 ()), "\n" )
print ("rip " , hex (c .rip ()), "\n" )
print ("rflags " , hex (c .rflags ()), "\n" )
print ("cs " , hex (c .cs ()), "\n" )
print ("fs " , hex (c .fs ()), "\n" )
print ("gs " , hex (c .gs ()), "\n" )
}
func (c *sigctxt ) sigpc () uintptr { return uintptr (c .rip ()) }
func (c *sigctxt ) setsigpc (x uint64 ) { c .set_rip (x ) }
func (c *sigctxt ) sigsp () uintptr { return uintptr (c .rsp ()) }
func (c *sigctxt ) siglr () uintptr { return 0 }
func (c *sigctxt ) fault () uintptr { return uintptr (c .sigaddr ()) }
func (c *sigctxt ) preparePanic (sig uint32 , gp *g ) {
if GOOS == "darwin" && sig == _SIGFPE && gp .sigcode0 == 0 {
pc := (*[4 ]byte )(unsafe .Pointer (gp .sigpc ))
i := 0
if pc [i ]&0xF0 == 0x40 {
i ++
} else if pc [i ] == 0x66 {
i ++
}
if pc [i ] == 0xF6 || pc [i ] == 0xF7 {
gp .sigcode0 = _FPE_INTDIV
}
}
pc := uintptr (c .rip ())
sp := uintptr (c .rsp ())
if shouldPushSigpanic (gp , pc , *(*uintptr )(unsafe .Pointer (sp ))) {
c .pushCall (abi .FuncPCABI0 (sigpanic0 ), pc )
} else {
c .set_rip (uint64 (abi .FuncPCABI0 (sigpanic0 )))
}
}
func (c *sigctxt ) pushCall (targetPC , resumePC uintptr ) {
sp := uintptr (c .rsp ())
sp -= goarch .PtrSize
*(*uintptr )(unsafe .Pointer (sp )) = resumePC
c .set_rsp (uint64 (sp ))
c .set_rip (uint64 (targetPC ))
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .