| // Copyright 2014 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 |
| |
| const _PAGESIZE = 0x1000 |
| |
| type ureg struct { |
| ax uint64 |
| bx uint64 |
| cx uint64 |
| dx uint64 |
| si uint64 |
| di uint64 |
| bp uint64 |
| r8 uint64 |
| r9 uint64 |
| r10 uint64 |
| r11 uint64 |
| r12 uint64 |
| r13 uint64 |
| r14 uint64 |
| r15 uint64 |
| |
| ds uint16 |
| es uint16 |
| fs uint16 |
| gs uint16 |
| |
| _type uint64 |
| error uint64 /* error code (or zero) */ |
| ip uint64 /* pc */ |
| cs uint64 /* old context */ |
| flags uint64 /* old flags */ |
| sp uint64 /* sp */ |
| ss uint64 /* old stack segment */ |
| } |
| |
| type sigctxt struct { |
| u *ureg |
| } |
| |
| //go:nosplit |
| //go:nowritebarrierrec |
| func (c *sigctxt) pc() uintptr { return uintptr(c.u.ip) } |
| |
| func (c *sigctxt) sp() uintptr { return uintptr(c.u.sp) } |
| func (c *sigctxt) lr() uintptr { return uintptr(0) } |
| |
| func (c *sigctxt) setpc(x uintptr) { c.u.ip = uint64(x) } |
| func (c *sigctxt) setsp(x uintptr) { c.u.sp = uint64(x) } |
| func (c *sigctxt) setlr(x uintptr) {} |
| |
| func (c *sigctxt) savelr(x uintptr) {} |
| |
| func dumpregs(u *ureg) { |
| print("ax ", hex(u.ax), "\n") |
| print("bx ", hex(u.bx), "\n") |
| print("cx ", hex(u.cx), "\n") |
| print("dx ", hex(u.dx), "\n") |
| print("di ", hex(u.di), "\n") |
| print("si ", hex(u.si), "\n") |
| print("bp ", hex(u.bp), "\n") |
| print("sp ", hex(u.sp), "\n") |
| print("r8 ", hex(u.r8), "\n") |
| print("r9 ", hex(u.r9), "\n") |
| print("r10 ", hex(u.r10), "\n") |
| print("r11 ", hex(u.r11), "\n") |
| print("r12 ", hex(u.r12), "\n") |
| print("r13 ", hex(u.r13), "\n") |
| print("r14 ", hex(u.r14), "\n") |
| print("r15 ", hex(u.r15), "\n") |
| print("ip ", hex(u.ip), "\n") |
| print("flags ", hex(u.flags), "\n") |
| print("cs ", hex(u.cs), "\n") |
| print("fs ", hex(u.fs), "\n") |
| print("gs ", hex(u.gs), "\n") |
| } |
| |
| func sigpanictramp() |