// Copyright 2013 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

import (
	
	
)

type sigctxt struct {
	info *siginfo
	ctxt unsafe.Pointer
}

//go:nosplit
//go:nowritebarrierrec
func ( *sigctxt) () *sigcontext {
	return (*sigcontext)(unsafe.Pointer(&(*ucontext)(.ctxt).uc_mcontext))
}

func ( *sigctxt) () uint64 { return .regs().rax }
func ( *sigctxt) () uint64 { return .regs().rbx }
func ( *sigctxt) () uint64 { return .regs().rcx }
func ( *sigctxt) () uint64 { return .regs().rdx }
func ( *sigctxt) () uint64 { return .regs().rdi }
func ( *sigctxt) () uint64 { return .regs().rsi }
func ( *sigctxt) () uint64 { return .regs().rbp }
func ( *sigctxt) () uint64 { return .regs().rsp }
func ( *sigctxt) () uint64  { return .regs().r8 }
func ( *sigctxt) () uint64  { return .regs().r9 }
func ( *sigctxt) () uint64 { return .regs().r10 }
func ( *sigctxt) () uint64 { return .regs().r11 }
func ( *sigctxt) () uint64 { return .regs().r12 }
func ( *sigctxt) () uint64 { return .regs().r13 }
func ( *sigctxt) () uint64 { return .regs().r14 }
func ( *sigctxt) () uint64 { return .regs().r15 }

//go:nosplit
//go:nowritebarrierrec
func ( *sigctxt) () uint64 { return .regs().rip }

func ( *sigctxt) () uint64  { return .regs().eflags }
func ( *sigctxt) () uint64      { return uint64(.regs().cs) }
func ( *sigctxt) () uint64      { return uint64(.regs().fs) }
func ( *sigctxt) () uint64      { return uint64(.regs().gs) }
func ( *sigctxt) () uint64 { return uint64(.info.si_code) }
func ( *sigctxt) () uint64 { return .info.si_addr }

func ( *sigctxt) ( uint64)     { .regs().rip =  }
func ( *sigctxt) ( uint64)     { .regs().rsp =  }
func ( *sigctxt) ( uint64) { .info.si_code = int32() }
func ( *sigctxt) ( uint64) {
	*(*uintptr)(add(unsafe.Pointer(.info), 2*goarch.PtrSize)) = uintptr()
}

// dumpSigStack prints a signal stack with the context, fpstate pointer field within that context and
// the beginning of the fpstate annotated by C/F/S respectively
func dumpSigStack( string,  uintptr,  uintptr,  uintptr) {
	println()
	println("SP:\t", hex())
	println("ctx:\t", hex())
	 :=  + unsafe.Offsetof(ucontext{}.uc_mcontext) + unsafe.Offsetof(mcontext{}.fpregs)
	println("fpfield:\t", hex())
	 := uintptr(unsafe.Pointer((&sigctxt{nil, unsafe.Pointer()}).regs().fpstate))
	println("fpstate:\t", hex())
	hexdumpWords(, , func( uintptr,  hexdumpMarker) {
		switch  {
		case :
			.start()
			print("C")
			println()
		case :
			.start()
			print("F")
			println()
		case :
			.start()
			print("S")
			println()
		}
	})
}