Golang程序  |  67行  |  1.73 KB

// Copyright 2015 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 {
	r0   uint32 /* general registers */
	r1   uint32 /* ... */
	r2   uint32 /* ... */
	r3   uint32 /* ... */
	r4   uint32 /* ... */
	r5   uint32 /* ... */
	r6   uint32 /* ... */
	r7   uint32 /* ... */
	r8   uint32 /* ... */
	r9   uint32 /* ... */
	r10  uint32 /* ... */
	r11  uint32 /* ... */
	r12  uint32 /* ... */
	sp   uint32
	link uint32 /* ... */
	trap uint32 /* trap type */
	psr  uint32
	pc   uint32 /* interrupted addr */
}

type sigctxt struct {
	u *ureg
}

//go:nosplit
//go:nowritebarrierrec
func (c *sigctxt) pc() uintptr { return uintptr(c.u.pc) }

func (c *sigctxt) sp() uintptr { return uintptr(c.u.sp) }
func (c *sigctxt) lr() uintptr { return uintptr(c.u.link) }

func (c *sigctxt) setpc(x uintptr)  { c.u.pc = uint32(x) }
func (c *sigctxt) setsp(x uintptr)  { c.u.sp = uint32(x) }
func (c *sigctxt) setlr(x uintptr)  { c.u.link = uint32(x) }
func (c *sigctxt) savelr(x uintptr) { c.u.r0 = uint32(x) }

func dumpregs(u *ureg) {
	print("r0    ", hex(u.r0), "\n")
	print("r1    ", hex(u.r1), "\n")
	print("r2    ", hex(u.r2), "\n")
	print("r3    ", hex(u.r3), "\n")
	print("r4    ", hex(u.r4), "\n")
	print("r5    ", hex(u.r5), "\n")
	print("r6    ", hex(u.r6), "\n")
	print("r7    ", hex(u.r7), "\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("sp    ", hex(u.sp), "\n")
	print("link  ", hex(u.link), "\n")
	print("pc    ", hex(u.pc), "\n")
	print("psr   ", hex(u.psr), "\n")
}

func sigpanictramp()