12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // 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
- }
|