Re: Hurd port for gcc-7 go PATCH 1-3(15)
Hello, Svante Signell, on lun. 06 nov. 2017 16:36:39 +0100, wrote: > Another issue is that /proc/self/exe has to return an absolute path for the > built program go-7 to execute properly. This is solved by a pending patch for > glibc in Debian and will be available in the next upload of glibc-2.24. FI, this was uploaded. > Adding to this, the executable ./build/gotools/go does work displaying the > help > text, but e.g. ./build/gotools/go env exits with a SIGILL: Illegal > instruction. That seems to be still happening with the updated libc. Samuel
Re: Hurd port for gcc-7 go PATCH 1-3(15)
On Thu, 2017-11-16 at 14:12 +0100, Svante Signell wrote: > On Wed, 2017-11-15 at 21:54 +0100, Svante Signell wrote: > > > > Attached is an updated patch for gcc-7. An updated patch for gcc-8 will follow > shortly when I have build tested gcc-8 go on both Linux and Hurd. > > The patch for src/libgo/mksysinfo.sh worked fine in gcc-5 and gcc-6. The > problem is that in gcc-7 and gcc-8 generation of build/ triplet>/libgo/sysinfo.go is made differently. Well, in gcc-5 and gcc-6 the gccgo patches in debian/rules.patch are conditional, and were not in gcc-7-7.2.0-15. In gcc-7-7.2.0-16 they are conditional again. > The Hurd-specific entry about SYS_IOCTL had to be moved after: > > # The syscall numbers. We force the names to upper case. > grep '^const _SYS_' gen-sysinfo.go | \ > sed -e 's/const _\(SYS_[^= ]*\).*$/\1/' | \ > while read sys; do > sup=`echo $sys | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` > echo "const $sup = _$sys" >> ${OUT} > done For completeness updated patches for gcc-6 and gcc-8 are attached. gcc-6-6.4.0-10: src_libgo_mksysinfo.sh.diff gcc-8-8-20171108-1: srs_libgo_build.diff And thank you for finding the bug in the patches by making them (temporarily) unconditional. Thanks!Index: gcc-6-6.4.0/src/libgo/mksysinfo.sh === --- gcc-6-6.4.0.orig/src/libgo/mksysinfo.sh +++ gcc-6-6.4.0/src/libgo/mksysinfo.sh @@ -304,6 +304,13 @@ echo '#include ' | ${CC} -x c - egrep '#define E[A-Z0-9_]+ ' | \ sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(_\1)/' >> ${OUT} +# Special treatment of EWOULDBLOCK for GNU/Hurd +# /usr/include/bits/errno.h: #define EWOULDBLOCK EAGAIN +if egrep 'define EWOULDBLOCK EAGAIN' gen-sysinfo.go > /dev/null 2>&1; then + egrep '^const EWOULDBLOCK = Errno(_EWOULDBLOCK)' ${OUT} | \ +sed -i -e 's/_EWOULDBLOCK/_EAGAIN/' ${OUT} +fi + # The O_xxx flags. egrep '^const _(O|F|FD)_' gen-sysinfo.go | \ sed -e 's/^\(const \)_\([^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} @@ -362,6 +369,11 @@ grep '^const _SYS_' gen-sysinfo.go | \ echo "const $sup = _$sys" >> ${OUT} done +# Special treatment of SYS_IOCTL for GNU/Hurd +if ! grep '^const SYS_IOCTL' ${OUT} > /dev/null 2>&1; then + echo "const SYS_IOCTL = 0" >> ${OUT} +fi + # The GNU/Linux support wants to use SYS_GETDENTS64 if available. if ! grep '^const SYS_GETDENTS ' ${OUT} >/dev/null 2>&1; then echo "const SYS_GETDENTS = 0" >> ${OUT} @@ -676,6 +688,11 @@ grep '^type _tms ' gen-sysinfo.go | \ # The stat type. # Prefer largefile variant if available. +# Special treatment of st_dev for GNU/Hurd +# /usr/include/i386-gnu/bits/stat.h: #define st_dev st_fsid +if grep 'define st_dev st_fsid' gen-sysinfo.go > /dev/null 2>&1; then + sed -i -e 's/; st_fsid/; st_dev/' gen-sysinfo.go +fi stat=`grep '^type _stat64 ' gen-sysinfo.go || true` if test "$stat" != ""; then grep '^type _stat64 ' gen-sysinfo.go Index: gcc-8-8-20171108/src/libgo/configure.ac === --- gcc-8-8-20171108.orig/src/libgo/configure.ac +++ gcc-8-8-20171108/src/libgo/configure.ac @@ -154,7 +154,7 @@ AC_SUBST(go_include) # All known GOOS values. This is the union of all operating systems # supported by the gofrontend and all operating systems supported by # the gc toolchain. -ALLGOOS="aix android darwin dragonfly freebsd irix linux netbsd openbsd plan9 rtems solaris windows" +ALLGOOS="aix android darwin dragonfly freebsd irix gnu linux netbsd openbsd plan9 rtems solaris windows" is_darwin=no is_freebsd=no @@ -166,6 +166,7 @@ is_dragonfly=no is_rtems=no is_solaris=no is_aix=no +is_gnu=no GOOS=unknown case ${host} in *-*-darwin*) is_darwin=yes; GOOS=darwin ;; @@ -178,6 +179,7 @@ case ${host} in *-*-rtems*)is_rtems=yes; GOOS=rtems ;; *-*-solaris2*) is_solaris=yes; GOOS=solaris ;; *-*-aix*) is_aix=yes; GOOS=aix ;; + *-*-gnu*) is_gnu=yes; GOOS=gnu ;; esac AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes) AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes) @@ -189,6 +191,7 @@ AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes) AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes) AM_CONDITIONAL(LIBGO_IS_AIX, test $is_aix = yes) +AM_CONDITIONAL(LIBGO_IS_GNU, test $is_gnu = yes) AM_CONDITIONAL(LIBGO_IS_BSD, test $is_darwin = yes -o $is_dragonfly = yes -o $is_freebsd = yes -o $is_netbsd = yes -o $is_openbsd = yes) AC_SUBST(GOOS) AC_SUBST(ALLGOOS) @@ -853,6 +856,13 @@ main () CFLAGS="$CFLAGS_hold" LIBS="$LIBS_hold" ]) +case ${host} in + *-*-gnu*) + LIBS="$LIBS -lpthread" + AC_SUBST(LIBS) + ;; +esac + dnl overwrite for the mips* 64bit multilibs, fails on some buildds if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then case "$target" in Index: gcc-8-8-20171108/src/libgo/Makefile.am === ---
Re: Hurd port for gcc-7 go PATCH 1-3(15)
On Wed, 2017-11-15 at 21:54 +0100, Svante Signell wrote: > On Wed, 2017-11-15 at 21:40 +0100, Matthias Klose wrote: > > On 06.11.2017 16:36, Svante Signell wrote: > > > Hi, > > > > > > Attached are patches to enable gccgo to build properly on Debian > > > GNU/Hurd on gcc-7 (7-7.2.0-12). > > > > sysinfo.go:6744:7: error: redefinition of 'SYS_IOCTL' > > const SYS_IOCTL = _SYS_ioctl > > ^ > > sysinfo.go:6403:7: note: previous definition of 'SYS_IOCTL' was here > > const SYS_IOCTL = 0 > > ^ > > the patches break the build on any Linux architecture. Please could you > > test > > your patches against a linux target as well? > > I'm really sorry. I regularly do that, but missed this one for gcc-7. Do you > mean the patches against gcc-8 you asked me for? You wrote that gcc-7 is not > of > interest and I should concentrate on gcc-8. > > Again, I'm really sorry. Will fix this tomorrow hopefully. > > Thanks! Attached is an updated patch for gcc-7. An updated patch for gcc-8 will follow shortly when I have build tested gcc-8 go on both Linux and Hurd. The patch for src/libgo/mksysinfo.sh worked fine in gcc-5 and gcc-6. The problem is that in gcc-7 and gcc-8 generation of build//libgo/sysinfo.go is made differently. The Hurd-specific entry about SYS_IOCTL had to be moved after: # The syscall numbers. We force the names to upper case. grep '^const _SYS_' gen-sysinfo.go | \ sed -e 's/const _\(SYS_[^= ]*\).*$/\1/' | \ while read sys; do sup=`echo $sys | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` echo "const $sup = _$sys" >> ${OUT} done Thanks!Index: gcc-7-7.2.0/src/libgo/configure.ac === --- gcc-7-7.2.0.orig/src/libgo/configure.ac +++ gcc-7-7.2.0/src/libgo/configure.ac @@ -146,7 +146,7 @@ AC_SUBST(go_include) # All known GOOS values. This is the union of all operating systems # supported by the gofrontend and all operating systems supported by # the gc toolchain. -ALLGOOS="android darwin dragonfly freebsd irix linux netbsd openbsd plan9 rtems solaris windows" +ALLGOOS="android darwin dragonfly freebsd irix gnu linux netbsd openbsd plan9 rtems solaris windows" is_darwin=no is_freebsd=no @@ -157,6 +157,7 @@ is_openbsd=no is_dragonfly=no is_rtems=no is_solaris=no +is_gnu=no GOOS=unknown case ${host} in *-*-darwin*) is_darwin=yes; GOOS=darwin ;; @@ -168,6 +169,7 @@ case ${host} in *-*-dragonfly*) is_dragonfly=yes; GOOS=dragonfly ;; *-*-rtems*)is_rtems=yes; GOOS=rtems ;; *-*-solaris2*) is_solaris=yes; GOOS=solaris ;; + *-*-gnu*) is_gnu=yes; GOOS=gnu ;; esac AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes) AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes) @@ -178,6 +180,7 @@ AM_CONDITIONAL(LIBGO_IS_OPENBSD, test $i AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test $is_dragonfly = yes) AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes) AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes) +AM_CONDITIONAL(LIBGO_IS_GNU, test $is_gnu = yes) AM_CONDITIONAL(LIBGO_IS_BSD, test $is_darwin = yes -o $is_dragonfly = yes -o $is_freebsd = yes -o $is_netbsd = yes -o $is_openbsd = yes) AC_SUBST(GOOS) AC_SUBST(ALLGOOS) @@ -838,6 +841,14 @@ main () CFLAGS="$CFLAGS_hold" LIBS="$LIBS_hold" ]) + +case ${host} in + *-*-gnu*) + LIBS="$LIBS -lpthread" + AC_SUBST(LIBS) + ;; +esac + dnl overwrite for the mips* 64bit multilibs, fails on some buildds if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then case "$target" in Index: gcc-7-7.2.0/src/libgo/Makefile.am === --- gcc-7-7.2.0.orig/src/libgo/Makefile.am +++ gcc-7-7.2.0/src/libgo/Makefile.am @@ -420,10 +420,14 @@ else if LIBGO_IS_NETBSD runtime_getncpu_file = runtime/getncpu-bsd.c else +if LIBGO_IS_GNU +runtime_getncpu_file = runtime/getncpu-gnu.c +else runtime_getncpu_file = runtime/getncpu-none.c endif endif endif +endif endif endif endif Index: gcc-7-7.2.0/src/libgo/Makefile.in === --- gcc-7-7.2.0.orig/src/libgo/Makefile.in +++ gcc-7-7.2.0/src/libgo/Makefile.in @@ -183,7 +183,8 @@ libgo_llgo_la_DEPENDENCIES = $(am__DEPEN @LIBGO_IS_LINUX_FALSE@am__objects_2 = thread-sema.lo @LIBGO_IS_LINUX_TRUE@am__objects_2 = thread-linux.lo @LIBGO_IS_RTEMS_TRUE@am__objects_3 = rtems-task-variable-add.lo -@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_4 = getncpu-none.lo +@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_GNU_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_4 = getncpu-none.lo +@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_GNU_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_4 = getncpu-gnu.lo
Re: Hurd port for gcc-7 go PATCH 1-3(15)
On Wed, 2017-11-15 at 21:40 +0100, Matthias Klose wrote: > On 06.11.2017 16:36, Svante Signell wrote: > > Hi, > > > > Attached are patches to enable gccgo to build properly on Debian > > GNU/Hurd on gcc-7 (7-7.2.0-12). > > sysinfo.go:6744:7: error: redefinition of 'SYS_IOCTL' > const SYS_IOCTL = _SYS_ioctl > ^ > sysinfo.go:6403:7: note: previous definition of 'SYS_IOCTL' was here > const SYS_IOCTL = 0 > ^ > the patches break the build on any Linux architecture. Please could you test > your patches against a linux target as well? I'm really sorry. I regularly do that, but missed this one for gcc-7. Do you mean the patches against gcc-8 you asked me for? You wrote that gcc-7 is not of interest and I should concentrate on gcc-8. Again, I'm really sorry. Wil fix this tomorrow hopefully. Thanks!
Re: Hurd port for gcc-7 go PATCH 1-3(15)
On 06.11.2017 16:36, Svante Signell wrote: > Hi, > > Attached are patches to enable gccgo to build properly on Debian > GNU/Hurd on gcc-7 (7-7.2.0-12). sysinfo.go:6744:7: error: redefinition of 'SYS_IOCTL' const SYS_IOCTL = _SYS_ioctl ^ sysinfo.go:6403:7: note: previous definition of 'SYS_IOCTL' was here const SYS_IOCTL = 0 ^ the patches break the build on any Linux architecture. Please could you test your patches against a linux target as well?
Re: Hurd port for gcc-7 go PATCH 1-3(15)
On 06.11.2017 16:36, Svante Signell wrote: > Hi, > > Attached are patches to enable gccgo to build properly on Debian > GNU/Hurd on gcc-7 (7-7.2.0-12). Svante, please could you base your patches on upstream trunk, or the gcc-8 packages from experimental, which follow upstream trunk until gcc-8 branches? I think upstream would rather like to see your patches against the current trunk. Thanks, Matthias
Hurd port for gcc-7 go PATCH 1-3(15)
Hi, Attached are patches to enable gccgo to build properly on Debian GNU/Hurd on gcc-7 (7-7.2.0-12). The first two patches are Debian-specific: Enable build of gccgo for GNU/Hurd: * debian_rules.defs.diff Define patches for the generated series file: * debian_rules.patch.diff The third enables split-stack support: * src_gcc_config_i386_gnu.h.diff The test suite results are as follows: === go Summary === # of expected passes7359 # of unexpected failures13 # of expected failures 1 # of untested testcases 7 # of unsupported tests 2 === libgo Summary === # of expected passes119 # of unexpected failures26 Most failing go tests and more than half of the libgo tests are runtime errors probably due to exception handling not working as expected, stopping execution with SIGSEGV. These issues are also present in the gcc-6 port (where libgo is implemented with more C code) and might be due to issues in gnumach/hurd/glibc yet to be solved. Another large group of tests, mainly in libgo, fails with SIGILL. The reason for these failures are also currently unknown. Maybe it is still some more things to address with the port, but the cause can also be due to the above. Unfortunately gdb and rpctrace are not especially usable, the former due to hangs, and the second due to bugs?? in multi-thread support. Another issue is that /proc/self/exe has to return an absolute path for the built program go-7 to execute properly. This is solved by a pending patch for glibc in Debian and will be available in the next upload of glibc-2.24. Adding to this, the executable ./build/gotools/go does work displaying the help text, but e.g. ./build/gotools/go env exits with a SIGILL: Illegal instruction. Furthermore, since more code is written in go the previous routine src/libgo/rutime/netpoll_select.c has to be rewritten in go. The supplied file src/libgo/go/runtime/netpoll_gnu.go is merely a stub for now and has to be implemented using either select or poll since neither epoll or kqueue or exists in GNU/Hurd. Nevertheless, it seems like not so much is left for gccgo working properly on GNU/Hurd, as for gcc-6. However, since I'm currently stuck, having spent a lot of time debugging, it is time to hand over to more people taking a look at this port. More detailed information on specific issues will be supplied on request. Thanks! --- a/debian/rules.defs.orig 2017-08-14 14:40:23.0 +0200 +++ b/debian/rules.defs 2017-08-14 15:26:42.0 +0200 @@ -804,7 +804,7 @@ ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick natty oneiric)) go_no_cpus := $(filter-out arm, $(go_no_cpus)) endif -go_no_systems := gnu kfreebsd-gnu +go_no_systems := kfreebsd ifneq ($(with_base_only),yes) ifneq ($(separate_lang),yes) --- a/debian/rules.patch 2017-09-06 11:49:38.0 +0200 +++ b/debian/rules.patch 2017-09-06 12:02:13.0 +0200 @@ -235,7 +235,21 @@ endif ifeq ($(DEB_TARGET_ARCH_OS),hurd) - debian_patches += hurd-changes + debian_patches += hurd-changes \ +src_gcc_config_i386_gnu.h \ +src_libgo_build \ +src_libgo_runtime \ +src_libgo_go_crypto \ +src_libgo_go_net \ +src_libgo_go_os \ +src_libgo_go_runtime \ +src_libgo_go_syscall \ +src_libgo_go_go_build_syslist.go \ +add-gnu-to-libgo-headers \ +add-gnu-to-libgo-test-headers \ +src_libgo_go_syscall_syscall_gnu_test.go \ +src_libgo_testsuite_gotest \ + endif debian_patches += gcc-ice-dump Index: gcc-7-7.2.0-12.1/src/gcc/config/i386/gnu.h === --- gcc-7-7.2.0-12.1.orig/src/gcc/config/i386/gnu.h +++ gcc-7-7.2.0-12.1/src/gcc/config/i386/gnu.h @@ -37,11 +37,14 @@ along with GCC. If not, see