liyujie
2025-08-28 d9927380ed7c8366f762049be9f3fee225860833
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package runtime
 
const _PAGESIZE = 0x1000
 
type ureg struct {
   di    uint32 /* general registers */
   si    uint32 /* ... */
   bp    uint32 /* ... */
   nsp   uint32
   bx    uint32 /* ... */
   dx    uint32 /* ... */
   cx    uint32 /* ... */
   ax    uint32 /* ... */
   gs    uint32 /* data segments */
   fs    uint32 /* ... */
   es    uint32 /* ... */
   ds    uint32 /* ... */
   trap  uint32 /* trap _type */
   ecode uint32 /* error code (or zero) */
   pc    uint32 /* pc */
   cs    uint32 /* old context */
   flags uint32 /* old flags */
   sp    uint32
   ss    uint32 /* old stack segment */
}
 
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(0) }
 
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) {}
 
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("pc    ", hex(u.pc), "\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() {}