Source file src/internal/runtime/syscall/windows/defs_windows_amd64.go

     1  // Copyright 2025 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package windows
     6  
     7  import (
     8  	"internal/goarch"
     9  	"unsafe"
    10  )
    11  
    12  const CONTEXT_CONTROL = 0x100001
    13  
    14  type M128 struct {
    15  	Low  uint64
    16  	High int64
    17  }
    18  
    19  type Context struct {
    20  	P1Home               uint64
    21  	P2Home               uint64
    22  	P3Home               uint64
    23  	P4Home               uint64
    24  	P5Home               uint64
    25  	P6Home               uint64
    26  	ContextFlags         uint32
    27  	MxCsr                uint32
    28  	SegCs                uint16
    29  	SegDs                uint16
    30  	SegEs                uint16
    31  	SegFs                uint16
    32  	SegGs                uint16
    33  	SegSs                uint16
    34  	EFlags               uint32
    35  	DR0                  uint64
    36  	DR1                  uint64
    37  	DR2                  uint64
    38  	DR3                  uint64
    39  	DR6                  uint64
    40  	DR7                  uint64
    41  	Rax                  uint64
    42  	Rcx                  uint64
    43  	Rdx                  uint64
    44  	Rbx                  uint64
    45  	Rsp                  uint64
    46  	Rbp                  uint64
    47  	Rsi                  uint64
    48  	Rdi                  uint64
    49  	R8                   uint64
    50  	R9                   uint64
    51  	R10                  uint64
    52  	R11                  uint64
    53  	R12                  uint64
    54  	R13                  uint64
    55  	R14                  uint64
    56  	R15                  uint64
    57  	Rip                  uint64
    58  	_                    [512]byte
    59  	VectorRegister       [26]M128
    60  	VectorControl        uint64
    61  	DebugControl         uint64
    62  	LastBranchToRip      uint64
    63  	LastBranchFromRip    uint64
    64  	LastExceptionToRip   uint64
    65  	LastExceptionFromRip uint64
    66  }
    67  
    68  func (c *Context) PC() uintptr { return uintptr(c.Rip) }
    69  func (c *Context) SP() uintptr { return uintptr(c.Rsp) }
    70  
    71  // AMD64 does not have link register, so this returns 0.
    72  func (c *Context) LR() uintptr     { return 0 }
    73  func (c *Context) SetLR(x uintptr) {}
    74  
    75  func (c *Context) SetPC(x uintptr) { c.Rip = uint64(x) }
    76  func (c *Context) SetSP(x uintptr) { c.Rsp = uint64(x) }
    77  func (c *Context) SetFP(x uintptr) { c.Rbp = uint64(x) }
    78  
    79  func (c *Context) PushCall(targetPC, resumePC uintptr) {
    80  	sp := c.SP() - goarch.StackAlign
    81  	*(*uintptr)(unsafe.Pointer(sp)) = resumePC
    82  	c.SetSP(sp)
    83  	c.SetPC(targetPC)
    84  }
    85  
    86  type DISPATCHER_CONTEXT struct {
    87  	ControlPc        uint64
    88  	ImageBase        uint64
    89  	FunctionEntry    uintptr
    90  	EstablisherFrame uint64
    91  	TargetIp         uint64
    92  	Context          *Context
    93  	LanguageHandler  uintptr
    94  	HandlerData      uintptr
    95  }
    96  
    97  func (c *DISPATCHER_CONTEXT) Ctx() *Context {
    98  	return c.Context
    99  }
   100  

View as plain text