|  | // Copyright 2009 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 _CONTEXT_CONTROL = 0x10001 | 
|  |  | 
|  | type floatingsavearea struct { | 
|  | controlword   uint32 | 
|  | statusword    uint32 | 
|  | tagword       uint32 | 
|  | erroroffset   uint32 | 
|  | errorselector uint32 | 
|  | dataoffset    uint32 | 
|  | dataselector  uint32 | 
|  | registerarea  [80]uint8 | 
|  | cr0npxstate   uint32 | 
|  | } | 
|  |  | 
|  | type context struct { | 
|  | contextflags      uint32 | 
|  | dr0               uint32 | 
|  | dr1               uint32 | 
|  | dr2               uint32 | 
|  | dr3               uint32 | 
|  | dr6               uint32 | 
|  | dr7               uint32 | 
|  | floatsave         floatingsavearea | 
|  | seggs             uint32 | 
|  | segfs             uint32 | 
|  | seges             uint32 | 
|  | segds             uint32 | 
|  | edi               uint32 | 
|  | esi               uint32 | 
|  | ebx               uint32 | 
|  | edx               uint32 | 
|  | ecx               uint32 | 
|  | eax               uint32 | 
|  | ebp               uint32 | 
|  | eip               uint32 | 
|  | segcs             uint32 | 
|  | eflags            uint32 | 
|  | esp               uint32 | 
|  | segss             uint32 | 
|  | extendedregisters [512]uint8 | 
|  | } | 
|  |  | 
|  | func (c *context) ip() uintptr { return uintptr(c.eip) } | 
|  | func (c *context) sp() uintptr { return uintptr(c.esp) } | 
|  |  | 
|  | // 386 does not have link register, so this returns 0. | 
|  | func (c *context) lr() uintptr      { return 0 } | 
|  | func (c *context) set_lr(x uintptr) {} | 
|  |  | 
|  | func (c *context) set_ip(x uintptr) { c.eip = uint32(x) } | 
|  | func (c *context) set_sp(x uintptr) { c.esp = uint32(x) } | 
|  |  | 
|  | func dumpregs(r *context) { | 
|  | print("eax     ", hex(r.eax), "\n") | 
|  | print("ebx     ", hex(r.ebx), "\n") | 
|  | print("ecx     ", hex(r.ecx), "\n") | 
|  | print("edx     ", hex(r.edx), "\n") | 
|  | print("edi     ", hex(r.edi), "\n") | 
|  | print("esi     ", hex(r.esi), "\n") | 
|  | print("ebp     ", hex(r.ebp), "\n") | 
|  | print("esp     ", hex(r.esp), "\n") | 
|  | print("eip     ", hex(r.eip), "\n") | 
|  | print("eflags  ", hex(r.eflags), "\n") | 
|  | print("cs      ", hex(r.segcs), "\n") | 
|  | print("fs      ", hex(r.segfs), "\n") | 
|  | print("gs      ", hex(r.seggs), "\n") | 
|  | } |