(continued) patch7.diff: src/libgo/go/syscall/wait.c Set WCONTINUED to zero if not defined (same fix as for lto in gcc-4.9)
patch8.diff: src/libgo/mksysinfo.sh Add special treatment of EWOULDBLOCK, SYS_FCNTL and st_dev since they are either not defined or defined differently for the script to catch them. The patch for st_dev by Thomas Schwinge was not liked by Samuel so I have included a more clumsy version. A better solution is needed. Thomas version is commented out in the patch. patch9.diff: src/libgo/runtime/netpoll.goc Rename errno to errno1 since errno clashes with <errno.h> included in that file on Hurd.
--- a/src/libgo/go/syscall/wait.c +++ b/src/libgo/go/syscall/wait.c @@ -8,6 +8,9 @@ OS-independent. */ #include <stdint.h> +#ifndef WCONTINUED +#define WCONTINUED 0 +#endif #include <sys/wait.h> #include "runtime.h"
--- a/src/libgo/mksysinfo.sh +++ b/src/libgo/mksysinfo.sh @@ -210,6 +210,11 @@ 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 +egrep '^const EWOULDBLOCK = Errno(_EWOULDBLOCK)' ${OUT} | \ + sed -i.bak -e 's/_EWOULDBLOCK/_EAGAIN/' ${OUT} + # The O_xxx flags. egrep '^const _(O|F|FD)_' gen-sysinfo.go | \ sed -e 's/^\(const \)_\([^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT} @@ -225,6 +230,11 @@ echo "const F_DUPFD_CLOEXEC = 0" >> ${OUT} fi +# Special treatment of SYS_FCNTL for GNU/Hurd +if ! grep '^const SYS_FCNTL' ${OUT} >/dev/null 2>&1; then + echo "const SYS_FCNTL = 0" >> ${OUT} +fi + # These flags can be lost on i386 GNU/Linux when using # -D_FILE_OFFSET_BITS=64, because we see "#define F_SETLK F_SETLK64" # before we see the definition of F_SETLK64. @@ -528,6 +538,15 @@ # 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 + grep '^type _stat ' gen-sysinfo.go | \ + sed -i.bak -e 's/st_fsid\([^;]*\)/st_fsid\1; st_dev\1/' gen-sysinfo.go + grep '^type _stat ' ${OUT} | \ + sed -i.bak -e 's/st_fsid\([^;]*\)/&; st_dev\1/' ${OUT} +fi +# -e 's/st_fsid/Dev/' stat=`grep '^type _stat64 ' gen-sysinfo.go || true` if test "$stat" != ""; then grep '^type _stat64 ' gen-sysinfo.go
--- a/src/libgo/runtime/netpoll.goc.orig 2013-11-07 01:23:21.000000000 +0100 +++ b/src/libgo/runtime/netpoll.goc 2014-03-28 09:07:15.000000000 +0100 @@ -68,7 +68,7 @@ runtime_netpollinit(); } -func runtime_pollOpen(fd uintptr) (pd *PollDesc, errno int) { +func runtime_pollOpen(fd uintptr) (pd *PollDesc, errno1 int) { pd = allocPollDesc(); runtime_lock(pd); if(pd->wg != nil && pd->wg != READY) @@ -84,7 +84,7 @@ pd->wd = 0; runtime_unlock(pd); - errno = runtime_netpollopen(fd, pd); + errno1 = runtime_netpollopen(fd, pd); } func runtime_pollClose(pd *PollDesc) {