1// syscall_linux_s390x.go -- GNU/Linux s390x specific support
2
3// Copyright 2014 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7package syscall
8
9import "unsafe"
10
11func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr }
12
13func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc }
14
15const syscall_PTRACE_PEEKUSR_AREA = 0x5000
16const syscall_PTRACE_POKEUSR_AREA = 0x5001
17
18type syscall_ptrace_area struct {
19	len          uint32
20	kernel_addr  uint64
21	process_addr uint64
22}
23
24func PtraceGetRegs(pid int, regs *PtraceRegs) (err error) {
25	parea := syscall_ptrace_area{
26		24,
27		0,
28		uint64(uintptr(unsafe.Pointer(regs))),
29	}
30	return ptrace(syscall_PTRACE_PEEKUSR_AREA, pid, uintptr(unsafe.Pointer(&parea)), 0)
31}
32
33func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) {
34	parea := syscall_ptrace_area{
35		24,
36		0,
37		uint64(uintptr(unsafe.Pointer(regs))),
38	}
39	return ptrace(syscall_PTRACE_POKEUSR_AREA, pid, uintptr(unsafe.Pointer(&parea)), 0)
40}
41