diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-07-13 03:44:14 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2017-07-13 03:44:14 +0000 |
commit | 6eecb2932650cab7b3a19cce9e0cc90daf093f12 (patch) | |
tree | f93911623579339a6644b40a2fd75d2f96731d2d /libgo/go/syscall/syscall_linux_s390.go | |
parent | 258d772a7c2d7bfc234913775495f04820133d58 (diff) | |
download | gcc-6eecb2932650cab7b3a19cce9e0cc90daf093f12.zip gcc-6eecb2932650cab7b3a19cce9e0cc90daf093f12.tar.gz gcc-6eecb2932650cab7b3a19cce9e0cc90daf093f12.tar.bz2 |
re PR go/81393 (Bootstrap failure on s390x-linux while building libgo against recent glibc)
PR go/81393
syscall: don't use GETREGS/SETREGS on s390
They were removed in recent glibc.
Patch by Andreas Krebbel for GCC PR 81393.
Reviewed-on: https://go-review.googlesource.com/48231
From-SVN: r250174
Diffstat (limited to 'libgo/go/syscall/syscall_linux_s390.go')
-rw-r--r-- | libgo/go/syscall/syscall_linux_s390.go | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/libgo/go/syscall/syscall_linux_s390.go b/libgo/go/syscall/syscall_linux_s390.go index d6d3f6a..8b00542 100644 --- a/libgo/go/syscall/syscall_linux_s390.go +++ b/libgo/go/syscall/syscall_linux_s390.go @@ -4,6 +4,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// See the s390x version for why we don't use GETREGSET/SETREGSET + package syscall import "unsafe" @@ -12,10 +14,20 @@ func (r *PtraceRegs) PC() uint64 { return uint64(r.Psw.addr) } func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.addr = uint32(pc) } -func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { - return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +func PtraceGetRegs(pid int, regs *PtraceRegs) (err error) { + parea := _ptrace_area{ + _sizeof_ptrace_area, + 0, + uint32(uintptr(unsafe.Pointer(regs))), + } + return ptrace(PTRACE_PEEKUSR_AREA, pid, uintptr(unsafe.Pointer(&parea)), 0) } func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { - return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) + parea := _ptrace_area{ + _sizeof_ptrace_area, + 0, + uint32(uintptr(unsafe.Pointer(regs))), + } + return ptrace(PTRACE_POKEUSR_AREA, pid, uintptr(unsafe.Pointer(&parea)), 0) } |