]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR go/81393 (Bootstrap failure on s390x-linux while building libgo against recent...
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 20 Jul 2017 22:04:02 +0000 (22:04 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 20 Jul 2017 22:04:02 +0000 (22:04 +0000)
PR go/81393
syscall: don't use GETREGS/SETREGS on s390

They were removed in recent glibc.

This is a backport of https://golang.org/cl/48231 to earlier branches.
Define required type and constants in syscall package directly, don't
try to pull them from the system header files.

From-SVN: r250404

libgo/go/syscall/syscall_linux_s390.go
libgo/go/syscall/syscall_linux_s390x.go

index a744f6b78419ab1c911b996d390a455c42670b2d..4903783b61a21366fb04e748252d544bdc8101ed 100644 (file)
@@ -12,10 +12,29 @@ 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)))
+const syscall_PTRACE_PEEKUSR_AREA = 0x5000
+const syscall_PTRACE_POKEUSR_AREA = 0x5001
+
+type syscall_ptrace_area struct {
+       len          uint32
+       kernel_addr  uint32
+       process_addr uint32
+}
+
+func PtraceGetRegs(pid int, regs *PtraceRegs) (err error) {
+       parea := syscall_ptrace_area{
+               12,
+               0,
+               uint32(uintptr(unsafe.Pointer(regs))),
+       }
+       return ptrace(syscall_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 := syscall_ptrace_area{
+               12,
+               0,
+               uint32(uintptr(unsafe.Pointer(regs))),
+       }
+       return ptrace(syscall_PTRACE_POKEUSR_AREA, pid, uintptr(unsafe.Pointer(&parea)), 0)
 }
index 44d567983c8db9802ec66fc342ed61543b2c06aa..daa094c6f1753dbc453cc41d40490dd516a3d502 100644 (file)
@@ -12,10 +12,29 @@ func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr }
 
 func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc }
 
-func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {
-       return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))
+const syscall_PTRACE_PEEKUSR_AREA = 0x5000
+const syscall_PTRACE_POKEUSR_AREA = 0x5001
+
+type syscall_ptrace_area struct {
+       len          uint32
+       kernel_addr  uint64
+       process_addr uint64
+}
+
+func PtraceGetRegs(pid int, regs *PtraceRegs) (err error) {
+       parea := syscall_ptrace_area{
+               24,
+               0,
+               uint64(uintptr(unsafe.Pointer(regs))),
+       }
+       return ptrace(syscall_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 := syscall_ptrace_area{
+               24,
+               0,
+               uint64(uintptr(unsafe.Pointer(regs))),
+       }
+       return ptrace(syscall_PTRACE_POKEUSR_AREA, pid, uintptr(unsafe.Pointer(&parea)), 0)
 }