| // syscall_aix_ppc64.go -- AIX 64-bit specific support | 
 |  | 
 | // Copyright 2017 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 syscall | 
 |  | 
 | import "unsafe" | 
 |  | 
 | // AIX does not define a specific structure but instead uses separate | 
 | // ptrace calls for the different registers. | 
 | type PtraceRegs struct { | 
 | 	Gpr [32]uint64 | 
 | 	Iar uint64 | 
 | 	Msr uint64 | 
 | 	Cr  uint64 | 
 | 	Lr  uint64 | 
 | 	Ctr uint64 | 
 | 	Xer uint64 | 
 | } | 
 |  | 
 | func (r *PtraceRegs) PC() uint64 { return r.Iar } | 
 |  | 
 | func (r *PtraceRegs) SetPC(pc uint64) { r.Iar = pc } | 
 |  | 
 | func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { | 
 | 	ptrace64(_PT_REGSET, int64(pid), int64(uintptr(unsafe.Pointer(®sout.Gpr[0]))), 0, 0) | 
 | 	ptrace64(_PT_READ_GPR, int64(pid), 128, 0, uintptr(unsafe.Pointer(®sout.Iar))) | 
 | 	ptrace64(_PT_READ_GPR, int64(pid), 129, 0, uintptr(unsafe.Pointer(®sout.Msr))) | 
 | 	ptrace64(_PT_READ_GPR, int64(pid), 130, 0, uintptr(unsafe.Pointer(®sout.Cr))) | 
 | 	ptrace64(_PT_READ_GPR, int64(pid), 131, 0, uintptr(unsafe.Pointer(®sout.Lr))) | 
 | 	ptrace64(_PT_READ_GPR, int64(pid), 132, 0, uintptr(unsafe.Pointer(®sout.Ctr))) | 
 | 	ptrace64(_PT_READ_GPR, int64(pid), 133, 0, uintptr(unsafe.Pointer(®sout.Xer))) | 
 | 	return nil | 
 | } | 
 |  | 
 | func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { | 
 | 	for i := 0; i < len(regs.Gpr); i++ { | 
 | 		ptrace64(_PT_WRITE_GPR, int64(pid), int64(i), 0, uintptr(unsafe.Pointer(®s.Gpr[i]))) | 
 | 	} | 
 | 	ptrace64(_PT_WRITE_GPR, int64(pid), 128, 0, uintptr(unsafe.Pointer(®s.Iar))) | 
 | 	ptrace64(_PT_WRITE_GPR, int64(pid), 129, 0, uintptr(unsafe.Pointer(®s.Msr))) | 
 | 	ptrace64(_PT_WRITE_GPR, int64(pid), 130, 0, uintptr(unsafe.Pointer(®s.Cr))) | 
 | 	ptrace64(_PT_WRITE_GPR, int64(pid), 131, 0, uintptr(unsafe.Pointer(®s.Lr))) | 
 | 	ptrace64(_PT_WRITE_GPR, int64(pid), 132, 0, uintptr(unsafe.Pointer(®s.Ctr))) | 
 | 	ptrace64(_PT_WRITE_GPR, int64(pid), 133, 0, uintptr(unsafe.Pointer(®s.Xer))) | 
 | 	return nil | 
 | } |