Message ID | CAOyqgcX_+-FFFb54uOUWgJacsVqAzumHGdMOH6Xn8ySQ634cLA@mail.gmail.com |
---|---|
State | New |
Headers | show |
On Jun 21 2017, Ian Lance Taylor <iant@golang.org> wrote: > Index: libgo/sysinfo.c > =================================================================== > --- libgo/sysinfo.c (revision 249205) > +++ libgo/sysinfo.c (working copy) > @@ -102,6 +102,9 @@ > #if defined(HAVE_LINUX_NETLINK_H) > #include <linux/netlink.h> > #endif > +#if defined(HAVE_LINUX_PTRACE_H) > +#include <linux/ptrace.h> > +#endif > #if defined(HAVE_LINUX_RTNETLINK_H) > #include <linux/rtnetlink.h> > #endif That breaks ia64: In file included from /usr/include/asm/ptrace.h:58:0, from /usr/include/linux/ptrace.h:69, from ../../../libgo/sysinfo.c:106: /usr/include/asm/fpu.h:57:8: error: redefinition of 'struct ia64_fpreg' struct ia64_fpreg { ^~~~~~~~~~ In file included from /usr/include/signal.h:339:0, from /usr/local/gcc/gcc-20170622/Build/gcc/include-fixed/sys/ucontext.h:32, from /usr/include/ucontext.h:27, from ../../../libgo/sysinfo.c:17: /usr/include/bits/sigcontext.h:32:8: note: originally defined here struct ia64_fpreg ^~~~~~~~~~ In file included from /usr/include/linux/ptrace.h:69:0, from ../../../libgo/sysinfo.c:106: /usr/include/asm/ptrace.h:208:8: error: redefinition of 'struct pt_all_user_regs' struct pt_all_user_regs { ^~~~~~~~~~~~~~~~ In file included from ../../../libgo/sysinfo.c:66:0: /usr/include/sys/ptrace.h:116:8: note: originally defined here struct pt_all_user_regs ^~~~~~~~~~~~~~~~ Andreas.
James, any thoughts? Ian On Thu, Jun 22, 2017 at 12:55 AM, Andreas Schwab <schwab@suse.de> wrote: > On Jun 21 2017, Ian Lance Taylor <iant@golang.org> wrote: > >> Index: libgo/sysinfo.c >> =================================================================== >> --- libgo/sysinfo.c (revision 249205) >> +++ libgo/sysinfo.c (working copy) >> @@ -102,6 +102,9 @@ >> #if defined(HAVE_LINUX_NETLINK_H) >> #include <linux/netlink.h> >> #endif >> +#if defined(HAVE_LINUX_PTRACE_H) >> +#include <linux/ptrace.h> >> +#endif >> #if defined(HAVE_LINUX_RTNETLINK_H) >> #include <linux/rtnetlink.h> >> #endif > > That breaks ia64: > > In file included from /usr/include/asm/ptrace.h:58:0, > from /usr/include/linux/ptrace.h:69, > from ../../../libgo/sysinfo.c:106: > /usr/include/asm/fpu.h:57:8: error: redefinition of 'struct ia64_fpreg' > struct ia64_fpreg { > ^~~~~~~~~~ > In file included from /usr/include/signal.h:339:0, > from /usr/local/gcc/gcc-20170622/Build/gcc/include-fixed/sys/ucontext.h:32, > from /usr/include/ucontext.h:27, > from ../../../libgo/sysinfo.c:17: > /usr/include/bits/sigcontext.h:32:8: note: originally defined here > struct ia64_fpreg > ^~~~~~~~~~ > In file included from /usr/include/linux/ptrace.h:69:0, > from ../../../libgo/sysinfo.c:106: > /usr/include/asm/ptrace.h:208:8: error: redefinition of 'struct pt_all_user_regs' > struct pt_all_user_regs { > ^~~~~~~~~~~~~~~~ > In file included from ../../../libgo/sysinfo.c:66:0: > /usr/include/sys/ptrace.h:116:8: note: originally defined here > struct pt_all_user_regs > ^~~~~~~~~~~~~~~~ > > Andreas. > > -- > Andreas Schwab, SUSE Labs, schwab@suse.de > GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 > "And now for something completely different."
Hi, On 22/06/17 20:59, Ian Lance Taylor wrote: > James, any thoughts? > > Ian > > On Thu, Jun 22, 2017 at 12:55 AM, Andreas Schwab <schwab@suse.de> wrote: >> On Jun 21 2017, Ian Lance Taylor <iant@golang.org> wrote: >> >>> Index: libgo/sysinfo.c >>> =================================================================== >>> --- libgo/sysinfo.c (revision 249205) >>> +++ libgo/sysinfo.c (working copy) >>> @@ -102,6 +102,9 @@ >>> #if defined(HAVE_LINUX_NETLINK_H) >>> #include <linux/netlink.h> >>> #endif >>> +#if defined(HAVE_LINUX_PTRACE_H) >>> +#include <linux/ptrace.h> >>> +#endif >>> #if defined(HAVE_LINUX_RTNETLINK_H) >>> #include <linux/rtnetlink.h> >>> #endif >> >> That breaks ia64: >> >> In file included from /usr/include/asm/ptrace.h:58:0, >> from /usr/include/linux/ptrace.h:69, >> from ../../../libgo/sysinfo.c:106: >> /usr/include/asm/fpu.h:57:8: error: redefinition of 'struct ia64_fpreg' >> struct ia64_fpreg { >> ^~~~~~~~~~ >> In file included from /usr/include/signal.h:339:0, >> from /usr/local/gcc/gcc-20170622/Build/gcc/include-fixed/sys/ucontext.h:32, >> from /usr/include/ucontext.h:27, >> from ../../../libgo/sysinfo.c:17: >> /usr/include/bits/sigcontext.h:32:8: note: originally defined here >> struct ia64_fpreg >> ^~~~~~~~~~ >> In file included from /usr/include/linux/ptrace.h:69:0, >> from ../../../libgo/sysinfo.c:106: >> /usr/include/asm/ptrace.h:208:8: error: redefinition of 'struct pt_all_user_regs' >> struct pt_all_user_regs { >> ^~~~~~~~~~~~~~~~ >> In file included from ../../../libgo/sysinfo.c:66:0: >> /usr/include/sys/ptrace.h:116:8: note: originally defined here >> struct pt_all_user_regs >> ^~~~~~~~~~~~~~~~ This looks like this glibc bug which was fixed in 2.19. https://sourceware.org/bugzilla/show_bug.cgi?id=762 James
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 249208) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -6449e2832eef94eacf89c88fa16bede637f729ba +b2bebba1f8a8185546c47f8460a3d5c2e31d0434 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: libgo/configure.ac =================================================================== --- libgo/configure.ac (revision 249205) +++ libgo/configure.ac (working copy) @@ -580,7 +580,7 @@ AC_C_BIGENDIAN GCC_CHECK_UNWIND_GETIPINFO -AC_CHECK_HEADERS(port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h) +AC_CHECK_HEADERS(port.h sched.h semaphore.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/event.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/ptrace.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h) AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [], [#ifdef HAVE_SYS_SOCKET_H Index: libgo/go/syscall/syscall_linux_mipsx.go =================================================================== --- libgo/go/syscall/syscall_linux_mipsx.go (revision 249205) +++ libgo/go/syscall/syscall_linux_mipsx.go (working copy) @@ -3,10 +3,24 @@ // license that can be found in the LICENSE file. // +build linux -// +build mips mipsle +// +build mips mipsle mips64 mips64le mips64p32 mips64p32le package syscall -func (r *PtraceRegs) PC() uint64 { return uint64(r.Regs[64]) } +import "unsafe" -func (r *PtraceRegs) SetPC(pc uint64) { r.Regs[64] = uint32(pc) } +func (r *PtraceRegs) PC() uint64 { + return r.Cp0_epc +} + +func (r *PtraceRegs) SetPC(pc uint64) { + r.Cp0_epc = pc +} + +func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} Index: libgo/mksysinfo.sh =================================================================== --- libgo/mksysinfo.sh (revision 249205) +++ libgo/mksysinfo.sh (working copy) @@ -317,9 +317,13 @@ if test "$regs" = ""; then upcase_fields "__user_psw_struct" "PtracePsw" >> ${OUT} || true upcase_fields "__user_fpregs_struct" "PtraceFpregs" >> ${OUT} || true upcase_fields "__user_per_struct" "PtracePer" >> ${OUT} || true + else + # mips* + regs=`grep '^type _pt_regs struct' gen-sysinfo.go || true` fi fi if test "$regs" != ""; then + regs=`echo $regs | sed -e 's/type _pt_regs struct//'` regs=`echo $regs | sed -e 's/type __*user_regs_struct struct //' -e 's/[{}]//g'` regs=`echo $regs | sed -e s'/^ *//'` Index: libgo/sysinfo.c =================================================================== --- libgo/sysinfo.c (revision 249205) +++ libgo/sysinfo.c (working copy) @@ -102,6 +102,9 @@ #if defined(HAVE_LINUX_NETLINK_H) #include <linux/netlink.h> #endif +#if defined(HAVE_LINUX_PTRACE_H) +#include <linux/ptrace.h> +#endif #if defined(HAVE_LINUX_RTNETLINK_H) #include <linux/rtnetlink.h> #endif