// syscall_linux_s390x.go -- GNU/Linux s390x specific support // Copyright 2014 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. // The PtraceRegs struct generated for go looks like this: // // type PtraceRegs struct // { // Psw _psw_t; // Gprs [15+1]uint64; // Acrs [15+1]uint32; // Orig_gpr2 uint64; // Fp_regs _s390_fp_regs; // Per_info _per_struct; // Ieee_instruction_pointer uint64; // } // // The GETREGSET/SETREGSET ptrace commands on S/390 only read/write // the content up to Orig_gpr2. Hence, we use // PEEKUSR_AREA/POKEUSR_AREA like GDB does. package syscall import "unsafe" func (r *PtraceRegs) PC() uint64 { return r.Psw.addr } func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.addr = pc } func PtraceGetRegs(pid int, regs *PtraceRegs) (err error) { parea := _ptrace_area{ _sizeof_ptrace_area, 0, uint64(uintptr(unsafe.Pointer(regs))), } return ptrace(PTRACE_PEEKUSR_AREA, pid, uintptr(unsafe.Pointer(&parea)), 0) } func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { parea := _ptrace_area{ _sizeof_ptrace_area, 0, uint64(uintptr(unsafe.Pointer(regs))), } return ptrace(PTRACE_POKEUSR_AREA, pid, uintptr(unsafe.Pointer(&parea)), 0) } func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno)