mirror of
https://github.com/golang/go
synced 2024-11-07 12:36:27 -07:00
76ab626bfc
Also give up on the fiction that these files can be regenerated. They contain many manual edits, and they're fairly small anyway. This CL is part of a stack adding windows/arm64 support (#36439), intended to land in the Go 1.17 cycle. This CL is, however, not windows/arm64-specific. It is cleanup meant to make the port (and future ports) easier. Change-Id: Ib4e4e20a43d8beb1d5390fd184160c33607641f6 Reviewed-on: https://go-review.googlesource.com/c/go/+/288807 Trust: Russ Cox <rsc@golang.org> Trust: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
74 lines
2.0 KiB
Go
74 lines
2.0 KiB
Go
// 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")
|
|
}
|