[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

PATCH: Hurd port of go to gcc-8 (gcc-8-8-20180310+) 16 patches



Hi,

Attached are patches to enable gccgo to build properly on Debian
GNU/Hurd on gcc-8 (8-8-20180308/10-1).

The gcc-8-8-2018030810-1 version did FTBFS due to a regression in the
gcc/ gcc/lra*.c code. Finding the reverting commit and applying it 
gcc.git-b12c2c48c2c6aa1db9e6c50f6b26330deeee9caf.patch
gcc+gccgo builds fine again.

I know that 8-8-20180312-1,2 versions are released. I will report the build
status when the latest version is built. (an eventually provide updated patches)

The libgo tests results are improved further:

                === libgo Summary ===

# of expected passes            141
# of unexpected failures        21

The patches really changed are only four:
src_libgo_runtime.diff
src_libgo_go_go_build_syslist.go.diff
src_libgo_go_runtime.diff
src_libgo_build.diff

but for completeness, and hopefully an upstream accept, the whole set (16
patches) is supplied here. Only 14 of them are upstream material, 2 of them are
Debian specific. Additionally, a part of src_libgo_build.diff pacthing
mksigtab.sh is already committed upstream: mksigtab.sh.patch
commit a5c86484648ca0d6eb54b13a0c9e740b16568f68
but included here until Debian updates gccgo from upstream.

Thanks!
Index: b/src/libgo/go/cmd/go/internal/base/signal_unix.go
===================================================================
--- a/src/libgo/go/cmd/go/internal/base/signal_unix.go
+++ b/src/libgo/go/cmd/go/internal/base/signal_unix.go
@@ -1,8 +1,9 @@
+
 // Copyright 2012 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package base
 
Index: b/src/libgo/go/crypto/x509/root_unix.go
===================================================================
--- a/src/libgo/go/crypto/x509/root_unix.go
+++ b/src/libgo/go/crypto/x509/root_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package x509
 
Index: b/src/libgo/go/net/interface_stub.go
===================================================================
--- a/src/libgo/go/net/interface_stub.go
+++ b/src/libgo/go/net/interface_stub.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix nacl
+// +build aix nacl gnu
 
 package net
 
Index: b/src/libgo/go/net/internal/socktest/switch_unix.go
===================================================================
--- a/src/libgo/go/net/internal/socktest/switch_unix.go
+++ b/src/libgo/go/net/internal/socktest/switch_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package socktest
 
Index: b/src/libgo/go/net/port_unix.go
===================================================================
--- a/src/libgo/go/net/port_unix.go
+++ b/src/libgo/go/net/port_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris nacl
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris nacl
 
 // Read system port mappings from /etc/services
 
Index: b/src/libgo/go/os/dir_largefile.go
===================================================================
--- a/src/libgo/go/os/dir_largefile.go
+++ b/src/libgo/go/os/dir_largefile.go
@@ -5,7 +5,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux solaris,386 solaris,sparc
+// +build aix gnu linux solaris,386 solaris,sparc
 
 package os
 
Index: b/src/libgo/go/os/dir_regfile.go
===================================================================
--- a/src/libgo/go/os/dir_regfile.go
+++ b/src/libgo/go/os/dir_regfile.go
@@ -6,6 +6,7 @@
 // license that can be found in the LICENSE file.
 
 // +build !aix
+// +build !gnu
 // +build !linux
 // +build !solaris !386
 // +build !solaris !sparc
Index: b/src/libgo/go/os/dir_unix.go
===================================================================
--- a/src/libgo/go/os/dir_unix.go
+++ b/src/libgo/go/os/dir_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: b/src/libgo/go/os/exec_unix.go
===================================================================
--- a/src/libgo/go/os/exec_unix.go
+++ b/src/libgo/go/os/exec_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: b/src/libgo/go/os/stat_atim.go
===================================================================
--- a/src/libgo/go/os/stat_atim.go
+++ b/src/libgo/go/os/stat_atim.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build linux openbsd solaristag
+// +build gnu linux openbsd solaristag
 
 package os
 
Index: b/src/libgo/go/os/stat_unix.go
===================================================================
--- a/src/libgo/go/os/stat_unix.go
+++ b/src/libgo/go/os/stat_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: b/src/libgo/go/os/sys_uname.go
===================================================================
--- a/src/libgo/go/os/sys_uname.go
+++ b/src/libgo/go/os/sys_uname.go
@@ -4,7 +4,7 @@
 
 // For systems which only store the hostname in uname (Solaris).
 
-// +build aix solaris irix rtems
+// +build aix gnu solaris irix rtems
 
 package os
 
Index: b/src/libgo/go/os/user/listgroups_unix.go
===================================================================
--- a/src/libgo/go/os/user/listgroups_unix.go
+++ b/src/libgo/go/os/user/listgroups_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build dragonfly darwin freebsd !android,linux netbsd openbsd
+// +build dragonfly darwin freebsd gnu !android,linux netbsd openbsd
 
 package user
 
Index: b/src/libgo/go/os/wait_unimp.go
===================================================================
--- a/src/libgo/go/os/wait_unimp.go
+++ b/src/libgo/go/os/wait_unimp.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly nacl netbsd openbsd solaris
+// +build aix darwin dragonfly gnu nacl netbsd openbsd solaris
 
 package os
 
Index: b/src/libgo/go/path/filepath/path_unix.go
===================================================================
--- a/src/libgo/go/path/filepath/path_unix.go
+++ b/src/libgo/go/path/filepath/path_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package filepath
 
Index: b/src/libgo/go/runtime/env_posix.go
===================================================================
--- a/src/libgo/go/runtime/env_posix.go
+++ b/src/libgo/go/runtime/env_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package runtime
 
Index: b/src/libgo/go/runtime/lock_sema.go
===================================================================
--- a/src/libgo/go/runtime/lock_sema.go
+++ b/src/libgo/go/runtime/lock_sema.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin nacl netbsd openbsd plan9 solaris windows
+// +build aix darwin gnu nacl netbsd openbsd plan9 solaris windows
 
 package runtime
 
Index: b/src/libgo/go/runtime/netpoll.go
===================================================================
--- a/src/libgo/go/runtime/netpoll.go
+++ b/src/libgo/go/runtime/netpoll.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package runtime
 
Index: b/src/libgo/go/runtime/signal_gccgo.go
===================================================================
--- a/src/libgo/go/runtime/signal_gccgo.go
+++ b/src/libgo/go/runtime/signal_gccgo.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package runtime
 
Index: b/src/libgo/go/runtime/signal_sighandler.go
===================================================================
--- a/src/libgo/go/runtime/signal_sighandler.go
+++ b/src/libgo/go/runtime/signal_sighandler.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package runtime
 
Index: b/src/libgo/go/syscall/errstr.go
===================================================================
--- a/src/libgo/go/syscall/errstr.go
+++ b/src/libgo/go/syscall/errstr.go
@@ -4,6 +4,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build !gnu
 // +build !linux
 
 package syscall
Index: b/src/libgo/go/syscall/libcall_posix.go
===================================================================
--- a/src/libgo/go/syscall/libcall_posix.go
+++ b/src/libgo/go/syscall/libcall_posix.go
@@ -9,6 +9,8 @@
 // Note that sometimes we use a lowercase //sys name and
 // wrap it in our own nicer implementation.
 
+// +build !gnu
+
 package syscall
 
 import "unsafe"
Index: b/src/libgo/go/syscall/libcall_posix_largefile.go
===================================================================
--- a/src/libgo/go/syscall/libcall_posix_largefile.go
+++ b/src/libgo/go/syscall/libcall_posix_largefile.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux solaris,386 solaris,sparc
+// +build aix gnu linux solaris,386 solaris,sparc
 
 // POSIX library calls on systems which use the largefile interface.
 
Index: b/src/libgo/go/syscall/libcall_posix_regfile.go
===================================================================
--- a/src/libgo/go/syscall/libcall_posix_regfile.go
+++ b/src/libgo/go/syscall/libcall_posix_regfile.go
@@ -3,6 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build !aix
+// +build !gnu
 // +build !linux
 // +build !solaris !386
 // +build !solaris !sparc
Index: b/src/libgo/go/syscall/libcall_posix_utimesnano.go
===================================================================
--- a/src/libgo/go/syscall/libcall_posix_utimesnano.go
+++ b/src/libgo/go/syscall/libcall_posix_utimesnano.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd openbsd netbsd solaris
+// +build aix darwin dragonfly freebsd gnu openbsd netbsd solaris
 
 // General POSIX version of UtimesNano.
 
Index: b/src/libgo/go/net/cgo_resnew.go
===================================================================
--- a/src/libgo/go/net/cgo_resnew.go
+++ b/src/libgo/go/net/cgo_resnew.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build cgo,!netgo
-// +build aix darwin linux,!android netbsd solaris
+// +build aix darwin gnu linux,!android netbsd solaris
 
 package net
 
Index: b/src/libgo/go/net/cgo_sockold.go
===================================================================
--- a/src/libgo/go/net/cgo_sockold.go
+++ b/src/libgo/go/net/cgo_sockold.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build cgo,!netgo
-// +build aix darwin dragonfly freebsd netbsd openbsd
+// +build aix darwin dragonfly freebsd gnu netbsd openbsd
 
 package net
 
Index: b/src/libgo/go/internal/poll/fd_poll_runtime.go
===================================================================
--- a/src/libgo/go/internal/poll/fd_poll_runtime.go
+++ b/src/libgo/go/internal/poll/fd_poll_runtime.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd windows solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd windows solaris
 
 package poll
 
Index: b/src/libgo/go/internal/poll/hook_cloexec.go
===================================================================
--- a/src/libgo/go/internal/poll/hook_cloexec.go
+++ b/src/libgo/go/internal/poll/hook_cloexec.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package poll
 
Index: b/src/libgo/go/internal/poll/fd_posix.go
===================================================================
--- a/src/libgo/go/internal/poll/fd_posix.go
+++ b/src/libgo/go/internal/poll/fd_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package poll
 
Index: b/src/libgo/go/net/sock_cloexec.go
===================================================================
--- a/src/libgo/go/net/sock_cloexec.go
+++ b/src/libgo/go/net/sock_cloexec.go
@@ -5,7 +5,7 @@
 // This file implements sysSocket and accept for platforms that
 // provide a fast path for setting SetNonblock and CloseOnExec.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package net
 
Index: b/src/libgo/go/syscall/exec_unix.go
===================================================================
--- a/src/libgo/go/syscall/exec_unix.go
+++ b/src/libgo/go/syscall/exec_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // Fork, exec, wait, etc.
 
Index: b/src/libgo/go/os/exec/lp_unix.go
===================================================================
--- a/src/libgo/go/os/exec/lp_unix.go
+++ b/src/libgo/go/os/exec/lp_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package exec
 
Index: b/src/libgo/go/os/signal/signal_unix.go
===================================================================
--- a/src/libgo/go/os/signal/signal_unix.go
+++ b/src/libgo/go/os/signal/signal_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package signal
 
Index: b/src/libgo/go/os/error_unix.go
===================================================================
--- a/src/libgo/go/os/error_unix.go
+++ b/src/libgo/go/os/error_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: b/src/libgo/go/os/file_posix.go
===================================================================
--- a/src/libgo/go/os/file_posix.go
+++ b/src/libgo/go/os/file_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package os
 
Index: b/src/libgo/go/os/path_unix.go
===================================================================
--- a/src/libgo/go/os/path_unix.go
+++ b/src/libgo/go/os/path_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: b/src/libgo/go/os/sys_unix.go
===================================================================
--- a/src/libgo/go/os/sys_unix.go
+++ b/src/libgo/go/os/sys_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix dragonfly linux netbsd openbsd solaris
+// +build aix dragonfly gnu linux netbsd openbsd solaris
 
 package os
 
Index: b/src/libgo/go/os/user/decls_unix.go
===================================================================
--- a/src/libgo/go/os/user/decls_unix.go
+++ b/src/libgo/go/os/user/decls_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd
 // +build cgo
 
 package user
Index: b/src/libgo/go/os/user/lookup_unix.go
===================================================================
--- a/src/libgo/go/os/user/lookup_unix.go
+++ b/src/libgo/go/os/user/lookup_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd !android,linux nacl netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu !android,linux nacl netbsd openbsd solaris
 // +build !cgo
 
 package user
Index: b/src/libgo/go/syscall/env_unix.go
===================================================================
--- a/src/libgo/go/syscall/env_unix.go
+++ b/src/libgo/go/syscall/env_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 // Unix environment variables.
 
Index: b/src/libgo/go/syscall/exec_bsd.go
===================================================================
--- a/src/libgo/go/syscall/exec_bsd.go
+++ b/src/libgo/go/syscall/exec_bsd.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu netbsd openbsd solaris
 
 package syscall
 
Index: b/src/libgo/go/syscall/sockcmsg_unix.go
===================================================================
--- a/src/libgo/go/syscall/sockcmsg_unix.go
+++ b/src/libgo/go/syscall/sockcmsg_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // Socket control messages
 
Index: b/src/libgo/go/syscall/syscall_unix.go
===================================================================
--- a/src/libgo/go/syscall/syscall_unix.go
+++ b/src/libgo/go/syscall/syscall_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package syscall
 
Index: b/src/libgo/go/time/sys_unix.go
===================================================================
--- a/src/libgo/go/time/sys_unix.go
+++ b/src/libgo/go/time/sys_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package time
 
Index: b/src/libgo/go/time/zoneinfo_unix.go
===================================================================
--- a/src/libgo/go/time/zoneinfo_unix.go
+++ b/src/libgo/go/time/zoneinfo_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin,386 darwin,amd64 dragonfly freebsd linux,!android nacl netbsd openbsd solaris
+// +build aix darwin,386 darwin,amd64 dragonfly freebsd gnu linux,!android nacl netbsd openbsd solaris
 
 // Parse "zoneinfo" time zone file.
 // This is a fairly standard file format used on OS X, Linux, BSD, Sun, and others.
Index: b/src/libgo/go/net/addrselect.go
===================================================================
--- a/src/libgo/go/net/addrselect.go
+++ b/src/libgo/go/net/addrselect.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // Minimal RFC 6724 address selection.
 
Index: b/src/libgo/go/net/conf.go
===================================================================
--- a/src/libgo/go/net/conf.go
+++ b/src/libgo/go/net/conf.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: b/src/libgo/go/net/dnsclient_unix.go
===================================================================
--- a/src/libgo/go/net/dnsclient_unix.go
+++ b/src/libgo/go/net/dnsclient_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // DNS client: see RFC 1035.
 // Has to be linked into package net for Dial.
Index: b/src/libgo/go/net/dnsconfig_unix.go
===================================================================
--- a/src/libgo/go/net/dnsconfig_unix.go
+++ b/src/libgo/go/net/dnsconfig_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // Read system DNS config from /etc/resolv.conf
 
Index: b/src/libgo/go/net/fd_unix.go
===================================================================
--- a/src/libgo/go/net/fd_unix.go
+++ b/src/libgo/go/net/fd_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package net
 
Index: b/src/libgo/go/net/file_unix.go
===================================================================
--- a/src/libgo/go/net/file_unix.go
+++ b/src/libgo/go/net/file_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: b/src/libgo/go/net/hook_unix.go
===================================================================
--- a/src/libgo/go/net/hook_unix.go
+++ b/src/libgo/go/net/hook_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package net
 
Index: b/src/libgo/go/net/iprawsock_posix.go
===================================================================
--- a/src/libgo/go/net/iprawsock_posix.go
+++ b/src/libgo/go/net/iprawsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/net/ipsock_posix.go
===================================================================
--- a/src/libgo/go/net/ipsock_posix.go
+++ b/src/libgo/go/net/ipsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/net/lookup_unix.go
===================================================================
--- a/src/libgo/go/net/lookup_unix.go
+++ b/src/libgo/go/net/lookup_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: b/src/libgo/go/net/nss.go
===================================================================
--- a/src/libgo/go/net/nss.go
+++ b/src/libgo/go/net/nss.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: b/src/libgo/go/net/sockopt_posix.go
===================================================================
--- a/src/libgo/go/net/sockopt_posix.go
+++ b/src/libgo/go/net/sockopt_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/net/sock_posix.go
===================================================================
--- a/src/libgo/go/net/sock_posix.go
+++ b/src/libgo/go/net/sock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/net/tcpsockopt_posix.go
===================================================================
--- a/src/libgo/go/net/tcpsockopt_posix.go
+++ b/src/libgo/go/net/tcpsockopt_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/net/tcpsockopt_unix.go
===================================================================
--- a/src/libgo/go/net/tcpsockopt_unix.go
+++ b/src/libgo/go/net/tcpsockopt_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix freebsd linux netbsd
+// +build aix freebsd gnu linux netbsd
 
 package net
 
Index: b/src/libgo/go/net/tcpsock_posix.go
===================================================================
--- a/src/libgo/go/net/tcpsock_posix.go
+++ b/src/libgo/go/net/tcpsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/net/udpsock_posix.go
===================================================================
--- a/src/libgo/go/net/udpsock_posix.go
+++ b/src/libgo/go/net/udpsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/net/unixsock_posix.go
===================================================================
--- a/src/libgo/go/net/unixsock_posix.go
+++ b/src/libgo/go/net/unixsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/os/exec_posix.go
===================================================================
--- a/src/libgo/go/os/exec_posix.go
+++ b/src/libgo/go/os/exec_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package os
 
Index: b/src/libgo/go/os/file_unix.go
===================================================================
--- a/src/libgo/go/os/file_unix.go
+++ b/src/libgo/go/os/file_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: b/src/libgo/go/os/executable_procfs.go
===================================================================
--- a/src/libgo/go/os/executable_procfs.go
+++ b/src/libgo/go/os/executable_procfs.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build linux netbsd dragonfly nacl
+// +build gnu linux netbsd dragonfly nacl
 
 package os
 
Index: b/src/libgo/go/syscall/timestruct.go
===================================================================
--- a/src/libgo/go/syscall/timestruct.go
+++ b/src/libgo/go/syscall/timestruct.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package syscall
 
Index: b/src/libgo/go/net/cgo_unix.go
===================================================================
--- a/src/libgo/go/net/cgo_unix.go
+++ b/src/libgo/go/net/cgo_unix.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build cgo,!netgo
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: b/src/libgo/go/archive/tar/stat_unix.go
===================================================================
--- a/src/libgo/go/archive/tar/stat_unix.go
+++ b/src/libgo/go/archive/tar/stat_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux darwin dragonfly freebsd openbsd netbsd solaris
+// +build aix gnu linux darwin dragonfly freebsd openbsd netbsd solaris
 
 package tar
 
Index: b/src/libgo/go/crypto/rand/eagain.go
===================================================================
--- a/src/libgo/go/crypto/rand/eagain.go
+++ b/src/libgo/go/crypto/rand/eagain.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package rand
 
Index: b/src/libgo/go/crypto/rand/rand_unix.go
===================================================================
--- a/src/libgo/go/crypto/rand/rand_unix.go
+++ b/src/libgo/go/crypto/rand/rand_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd plan9 solaris
 
 // Unix cryptographically secure pseudorandom number
 // generator.
Index: b/src/libgo/go/mime/type_unix.go
===================================================================
--- a/src/libgo/go/mime/type_unix.go
+++ b/src/libgo/go/mime/type_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package mime
 
Index: b/src/libgo/go/plugin/plugin_dlopen.go
===================================================================
--- a/src/libgo/go/plugin/plugin_dlopen.go
+++ b/src/libgo/go/plugin/plugin_dlopen.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build linux,cgo darwin,cgo
+// +build linux,cgo darwin,cgo gnu,cgo
 
 package plugin
 
Index: b/src/libgo/go/syscall/dirent.go
===================================================================
--- a/src/libgo/go/syscall/dirent.go
+++ b/src/libgo/go/syscall/dirent.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package syscall
 
Index: b/src/libgo/runtime/env_posix.c
===================================================================
--- a/src/libgo/runtime/env_posix.c
+++ b/src/libgo/runtime/env_posix.c
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 #include "runtime.h"
 #include "array.h"
Index: b/src/libgo/go/net/internal/socktest/sys_unix.go
===================================================================
--- a/src/libgo/go/net/internal/socktest/sys_unix.go
+++ b/src/libgo/go/net/internal/socktest/sys_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package socktest
 
Index: b/src/libgo/go/plugin/plugin_stubs.go
===================================================================
--- a/src/libgo/go/plugin/plugin_stubs.go
+++ b/src/libgo/go/plugin/plugin_stubs.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build !linux,!darwin !cgo
+// +build !gnu !linux,!darwin !cgo
 
 package plugin
 
Index: b/src/libgo/go/net/internal/socktest/sys_cloexec.go
===================================================================
--- a/src/libgo/go/net/internal/socktest/sys_cloexec.go
+++ b/src/libgo/go/net/internal/socktest/sys_cloexec.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package socktest
 
Index: b/src/libgo/go/os/user/cgo_lookup_unix.go
===================================================================
--- a/src/libgo/go/os/user/cgo_lookup_unix.go
+++ b/src/libgo/go/os/user/cgo_lookup_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd !android,linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu !android,linux netbsd openbsd solaris
 // +build cgo
 
 package user
Index: b/src/libgo/go/net/error_posix.go
===================================================================
--- a/src/libgo/go/net/error_posix.go
+++ b/src/libgo/go/net/error_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: b/src/libgo/go/internal/poll/fd_unix.go
===================================================================
--- a/src/libgo/go/internal/poll/fd_unix.go
+++ b/src/libgo/go/internal/poll/fd_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package poll
 
Index: b/src/libgo/go/syscall/forkpipe_bsd.go
===================================================================
--- a/src/libgo/go/syscall/forkpipe_bsd.go
+++ b/src/libgo/go/syscall/forkpipe_bsd.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly netbsd openbsd solaris
+// +build aix darwin dragonfly gnu netbsd openbsd solaris
 
 package syscall
 
Index: b/src/libgo/go/internal/poll/hook_unix.go
===================================================================
--- a/src/libgo/go/internal/poll/hook_unix.go
+++ b/src/libgo/go/internal/poll/hook_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package poll
 
Index: b/src/libgo/go/internal/poll/sock_cloexec.go
===================================================================
--- a/src/libgo/go/internal/poll/sock_cloexec.go
+++ b/src/libgo/go/internal/poll/sock_cloexec.go
@@ -5,7 +5,7 @@
 // This file implements sysSocket and accept for platforms that
 // provide a fast path for setting SetNonblock and CloseOnExec.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package poll
 
Index: b/src/libgo/go/internal/poll/sockopt.go
===================================================================
--- a/src/libgo/go/internal/poll/sockopt.go
+++ b/src/libgo/go/internal/poll/sockopt.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package poll
 
Index: b/src/libgo/go/internal/poll/sockoptip.go
===================================================================
--- a/src/libgo/go/internal/poll/sockoptip.go
+++ b/src/libgo/go/internal/poll/sockoptip.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package poll
 
Index: b/src/libgo/go/internal/poll/sockopt_unix.go
===================================================================
--- a/src/libgo/go/internal/poll/sockopt_unix.go
+++ b/src/libgo/go/internal/poll/sockopt_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package poll
 
Index: b/src/libgo/go/archive/tar/stat_actime1.go
===================================================================
--- a/src/libgo/go/archive/tar/stat_actime1.go
+++ b/src/libgo/go/archive/tar/stat_actime1.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux dragonfly openbsd solaris
+// +build aix gnu linux dragonfly openbsd solaris
 
 package tar
 
--- a/src/libgo/go/golang_org/x/net/internal/nettest/helper_nobsd.go	2018-01-10 11:13:47.000000000 +0100
+++ b/src/libgo/go/golang_org/x/net/internal/nettest/helper_nobsd.go	2018-03-02 13:37:11.000000000 +0100
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux solaris
+// +build aix gnu linux solaris
 
 package nettest
 
--- a/src/libgo/go/golang_org/x/net/internal/nettest/helper_posix.go	2018-01-10 11:13:47.000000000 +0100
+++ b/src/libgo/go/golang_org/x/net/internal/nettest/helper_posix.go	2018-03-01 23:01:22.000000000 +0100
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package nettest
 
--- a/src/libgo/go/golang_org/x/net/internal/nettest/helper_unix.go	2018-01-10 11:13:47.000000000 +0100
+++ b/src/libgo/go/golang_org/x/net/internal/nettest/helper_unix.go	2018-03-02 13:40:42.000000000 +0100
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package nettest
 
--- a/src/libgo/go/net/sockoptip_posix.go	2018-01-09 04:04:37.000000000 +0100
+++ b/src/libgo/go/net/sockoptip_posix.go	2018-03-01 22:55:56.000000000 +0100
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package net
 
--- a/src/libgo/go/os/signal/internal/pty/pty.go	2018-02-08 18:22:43.000000000 +0100
+++ b/src/libgo/go/os/signal/internal/pty/pty.go	2018-03-01 23:09:21.000000000 +0100
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux,!android netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux,!android netbsd openbsd solaris
 
 // Package pty is a simple pseudo-terminal package for Unix systems,
 // implemented by calling C functions via cgo.
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/main_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/main_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/main_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/os/exec/lp_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/os/exec/lp_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/os/exec/lp_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package exec
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/os/os_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/os/os_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/os/os_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package os_test
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/os/signal/signal_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/os/signal/signal_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/os/signal/signal_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package signal
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/runtime/crash_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/runtime/crash_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/runtime/crash_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package runtime_test
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/syscall/exec_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/syscall/exec_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/syscall/exec_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package syscall_test
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/runtime/runtime_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/runtime/runtime_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/runtime/runtime_unix_test.go
@@ -6,7 +6,7 @@
 // We need a fast system call to provoke the race,
 // and Close(-1) is nearly universally fast.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd plan9
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd plan9
 
 package runtime_test
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/syscall/export_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/syscall/export_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/syscall/export_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package syscall
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/syscall/mmap_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/syscall/mmap_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/syscall/mmap_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd
 
 package syscall_test
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/addrselect_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/addrselect_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/addrselect_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/cgo_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/cgo_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/cgo_unix_test.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build cgo,!netgo
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/conf_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/conf_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/conf_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/dnsconfig_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/dnsconfig_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/dnsconfig_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/nss_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/nss_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/nss_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/cmd/go/go_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/cmd/go/go_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/cmd/go/go_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package main_test
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/dial_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/dial_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/dial_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/main_cloexec_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/main_cloexec_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/main_cloexec_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/dnsclient_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/net/dnsclient_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/dnsclient_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/os/env_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/os/env_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/os/env_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package os_test
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/os/error_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/os/error_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/os/error_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os_test
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/internal/poll/export_posix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/internal/poll/export_posix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/internal/poll/export_posix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 // Export guts for testing on posix.
 // Since testing imports os and os imports internal/poll,
Index: gcc-8-8-20171108-1.1/src/libgo/go/runtime/export_unix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/runtime/export_unix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/runtime/export_unix_test.go
@@ -1,8 +1,9 @@
+
 // Copyright 2017 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package runtime
 
Index: gcc-8-8-20171108-1.1/src/libgo/go/internal/poll/fd_posix_test.go
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/go/internal/poll/fd_posix_test.go
+++ gcc-8-8-20171108-1.1/src/libgo/go/internal/poll/fd_posix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package poll_test
 
--- a/debian/rules.defs	2018-03-08 14:26:03.000000000 +0100
+++ b/debian/rules.defs	2018-03-08 14:30:53.000000000 +0100
@@ -851,7 +851,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
+go_no_systems := kfreebsd
 
 ifneq ($(with_base_only),yes)
   ifneq ($(separate_lang),yes)
--- a/debian/rules.patch	2018-03-08 14:45:25.000000000 +0100
+++ b/debian/rules.patch	2018-03-08 14:49:19.000000000 +0100
@@ -230,6 +230,20 @@
 ifeq ($(DEB_TARGET_ARCH_OS),hurd)
   debian_patches += hurd-changes
 endif
+debian_patches += \
+                  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 \
 
 debian_patches += gcc-ice-dump
 debian_patches += gcc-ice-apport
Index: gcc-8-8-20171108-1.1/src/gcc/config/i386/gnu.h
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/gcc/config/i386/gnu.h
+++ gcc-8-8-20171108-1.1/src/gcc/config/i386/gnu.h
@@ -37,11 +37,14 @@ along with GCC.  If not, see <http://www
 
 #ifdef TARGET_LIBC_PROVIDES_SSP
 
-/* Not supported yet.  */
-# undef TARGET_THREAD_SSP_OFFSET
-
-/* Not supported yet.  */
-# undef TARGET_CAN_SPLIT_STACK
-# undef TARGET_THREAD_SPLIT_STACK_OFFSET
+/* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
+#define TARGET_THREAD_SSP_OFFSET        0x14
 
+/* We only build the -fsplit-stack support in libgcc if the
+   assembler has full support for the CFI directives.  */
+#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
+#define TARGET_CAN_SPLIT_STACK
+#endif
+/* We steal the last transactional memory word.  */
+#define TARGET_THREAD_SPLIT_STACK_OFFSET 0x30
 #endif
Index: gcc-8-8-20180310-1.1/src/libgo/configure.ac
===================================================================
--- gcc-8-8-20180310-1.1.orig/src/libgo/configure.ac
+++ gcc-8-8-20180310-1.1/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)
@@ -798,6 +801,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-20180310-1.1/src/libgo/Makefile.am
===================================================================
--- gcc-8-8-20180310-1.1.orig/src/libgo/Makefile.am
+++ gcc-8-8-20180310-1.1/src/libgo/Makefile.am
@@ -429,10 +429,14 @@ else
 if LIBGO_IS_AIX
 runtime_getncpu_file = runtime/getncpu-aix.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-8-8-20180310-1.1/src/libgo/Makefile.in
===================================================================
--- gcc-8-8-20180310-1.1.orig/src/libgo/Makefile.in
+++ gcc-8-8-20180310-1.1/src/libgo/Makefile.in
@@ -186,7 +186,8 @@ am__DEPENDENCIES_4 = $(am__DEPENDENCIES_
 	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_3)
 libgo_llgo_la_DEPENDENCIES = $(am__DEPENDENCIES_4)
 @LIBGO_IS_RTEMS_TRUE@am__objects_1 = rtems-task-variable-add.lo
-@LIBGO_IS_AIX_FALSE@@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_2 = getncpu-none.lo
+@LIBGO_IS_AIX_FALSE@@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_2 = getncpu-none.lo
+@LIBGO_IS_AIX_FALSE@@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_2 = getncpu-gnu.lo
 @LIBGO_IS_AIX_TRUE@@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_2 = getncpu-aix.lo
 @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_TRUE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = getncpu-bsd.lo
 @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = getncpu-bsd.lo
@@ -233,10 +234,10 @@ LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLF
 SOURCES = $(libgobegin_llgo_a_SOURCES) $(libgobegin_a_SOURCES) \
 	$(libgolibbegin_a_SOURCES) $(libgotool_a_SOURCES) \
 	$(libgo_llgo_la_SOURCES) $(libgo_la_SOURCES)
-MULTISRCTOP = 
-MULTIBUILDTOP = 
-MULTIDIRS = 
-MULTISUBDIR = 
+MULTISRCTOP =
+MULTIBUILDTOP =
+MULTIDIRS =
+MULTISUBDIR =
 MULTIDO = true
 MULTICLEAN = true
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -459,7 +460,7 @@ AM_LDFLAGS = $(am__append_1) $(am__appen
 @LIBGO_IS_AIX_TRUE@EXTRA_libgo_la_DEPENDENCIES = libgo.imp
 
 # Multilib support.
-MAKEOVERRIDES = 
+MAKEOVERRIDES =
 
 # Work around what appears to be a GNU make  handling MAKEFLAGS
 # values defined in terms of make variables, as is the case for CC and
@@ -762,7 +763,8 @@ noinst_DATA = golang_org/x/net/internal/
 	os/signal/internal/pty.gox zstdpkglist.go zdefaultcc.go
 @LIBGO_IS_RTEMS_FALSE@rtems_task_variable_add_file = 
 @LIBGO_IS_RTEMS_TRUE@rtems_task_variable_add_file = runtime/rtems-task-variable-add.c
-@LIBGO_IS_AIX_FALSE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-none.c
+@LIBGO_IS_AIX_FALSE@@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@runtime_getncpu_file = runtime/getncpu-none.c
+@LIBGO_IS_AIX_FALSE@@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@runtime_getncpu_file = runtime/getncpu-gnu.c
 @LIBGO_IS_AIX_TRUE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-aix.c
 @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_TRUE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-bsd.c
 @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-bsd.c
@@ -812,13 +814,13 @@ runtime_files = \
 GCCGO_INSTALL_NAME := $(shell echo gccgo|sed '$(program_transform_name)')
 GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
 GXX_INSTALL_NAME := $(shell echo g++|sed '$(program_transform_name)')
-@LIBGO_IS_LINUX_FALSE@syscall_epoll_file = 
+@LIBGO_IS_LINUX_FALSE@syscall_epoll_file =
 @LIBGO_IS_LINUX_TRUE@syscall_epoll_file = epoll.go
 SYSINFO_FLAGS = \
 	$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(OSCFLAGS) -O
 
-@LIBGO_IS_LINUX_FALSE@syscall_lib_clone_lo = 
+@LIBGO_IS_LINUX_FALSE@syscall_lib_clone_lo =
 @LIBGO_IS_LINUX_TRUE@syscall_lib_clone_lo = syscall/clone_linux.lo
 PACKAGES = \
 	archive/tar \
@@ -1074,7 +1076,7 @@ GOTOOL_PACKAGES = \
 	cmd/vet/internal/cfg \
 	cmd/vet/internal/whitelist
 
-libgotool_a_SOURCES = 
+libgotool_a_SOURCES =
 libgotool_a_DEPENDENCIES = $(addsuffix .lo,$(GOTOOL_PACKAGES))
 libgotool_a_LIBADD = $(addsuffix .o,$(GOTOOL_PACKAGES))
 LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
@@ -1117,7 +1119,7 @@ BUILDGOX = \
 	$(OBJCOPY) -j .go_export $$f $@.tmp; \
 	$(SHELL) $(srcdir)/mvifdiff.sh $@.tmp `echo $@ | sed -e 's/s-gox/gox/'`
 
-GOTESTFLAGS = 
+GOTESTFLAGS =
 GOBENCH =
 
 # Check a package.
@@ -1203,7 +1205,7 @@ runtime_internal_atomic_lo_GOCFLAGS = -f
 runtime_internal_atomic_lo_check_GOCFLAGS = -fgo-compiling-runtime
 runtime_internal_sys_lo_GOCFLAGS = -fgo-compiling-runtime
 runtime_internal_sys_lo_check_GOCFLAGS = -fgo-compiling-runtime
-@USE_LIBFFI_FALSE@matchargs_runtime = 
+@USE_LIBFFI_FALSE@matchargs_runtime =
 
 # If libffi is supported (the normal case) use the ffi build tag for
 # the runtime package.
@@ -1418,6 +1420,7 @@ MOSTLYCLEANFILES = \
 CLEANFILES = *.go *.c s-* libgo.sum libgo.log runtime.inc \
 	*.dep */*.dep */*/*.dep */*/*/*.dep */*/*.dep */*/*/*/*.dep \
 	*/*/*/*/*/*.dep
+
 all: config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
@@ -1465,7 +1468,7 @@ config.h: stamp-h1
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
 	cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
 	rm -f stamp-h1
 	touch $@
@@ -1506,19 +1509,19 @@ uninstall-toolexeclibLIBRARIES:
 
 clean-toolexeclibLIBRARIES:
 	-test -z "$(toolexeclib_LIBRARIES)" || rm -f $(toolexeclib_LIBRARIES)
-libgobegin-llgo.a: $(libgobegin_llgo_a_OBJECTS) $(libgobegin_llgo_a_DEPENDENCIES) $(EXTRA_libgobegin_llgo_a_DEPENDENCIES) 
+libgobegin-llgo.a: $(libgobegin_llgo_a_OBJECTS) $(libgobegin_llgo_a_DEPENDENCIES) $(EXTRA_libgobegin_llgo_a_DEPENDENCIES)
 	-rm -f libgobegin-llgo.a
 	$(libgobegin_llgo_a_AR) libgobegin-llgo.a $(libgobegin_llgo_a_OBJECTS) $(libgobegin_llgo_a_LIBADD)
 	$(RANLIB) libgobegin-llgo.a
-libgobegin.a: $(libgobegin_a_OBJECTS) $(libgobegin_a_DEPENDENCIES) $(EXTRA_libgobegin_a_DEPENDENCIES) 
+libgobegin.a: $(libgobegin_a_OBJECTS) $(libgobegin_a_DEPENDENCIES) $(EXTRA_libgobegin_a_DEPENDENCIES)
 	-rm -f libgobegin.a
 	$(libgobegin_a_AR) libgobegin.a $(libgobegin_a_OBJECTS) $(libgobegin_a_LIBADD)
 	$(RANLIB) libgobegin.a
-libgolibbegin.a: $(libgolibbegin_a_OBJECTS) $(libgolibbegin_a_DEPENDENCIES) $(EXTRA_libgolibbegin_a_DEPENDENCIES) 
+libgolibbegin.a: $(libgolibbegin_a_OBJECTS) $(libgolibbegin_a_DEPENDENCIES) $(EXTRA_libgolibbegin_a_DEPENDENCIES)
 	-rm -f libgolibbegin.a
 	$(libgolibbegin_a_AR) libgolibbegin.a $(libgolibbegin_a_OBJECTS) $(libgolibbegin_a_LIBADD)
 	$(RANLIB) libgolibbegin.a
-libgotool.a: $(libgotool_a_OBJECTS) $(libgotool_a_DEPENDENCIES) $(EXTRA_libgotool_a_DEPENDENCIES) 
+libgotool.a: $(libgotool_a_OBJECTS) $(libgotool_a_DEPENDENCIES) $(EXTRA_libgotool_a_DEPENDENCIES)
 	-rm -f libgotool.a
 	$(libgotool_a_AR) libgotool.a $(libgotool_a_OBJECTS) $(libgotool_a_LIBADD)
 	$(RANLIB) libgotool.a
@@ -1554,9 +1557,9 @@ clean-toolexeclibLTLIBRARIES:
 	  echo "rm -f \"$${dir}/so_locations\""; \
 	  rm -f "$${dir}/so_locations"; \
 	done
-libgo-llgo.la: $(libgo_llgo_la_OBJECTS) $(libgo_llgo_la_DEPENDENCIES) $(EXTRA_libgo_llgo_la_DEPENDENCIES) 
+libgo-llgo.la: $(libgo_llgo_la_OBJECTS) $(libgo_llgo_la_DEPENDENCIES) $(EXTRA_libgo_llgo_la_DEPENDENCIES)
 	$(libgo_llgo_la_LINK) $(am_libgo_llgo_la_rpath) $(libgo_llgo_la_OBJECTS) $(libgo_llgo_la_LIBADD) $(LIBS)
-libgo.la: $(libgo_la_OBJECTS) $(libgo_la_DEPENDENCIES) $(EXTRA_libgo_la_DEPENDENCIES) 
+libgo.la: $(libgo_la_OBJECTS) $(libgo_la_DEPENDENCIES) $(EXTRA_libgo_la_DEPENDENCIES)
 	$(libgo_la_LINK) $(am_libgo_la_rpath) $(libgo_la_OBJECTS) $(libgo_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -1569,6 +1572,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env_posix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-aix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-bsd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-gnu.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-irix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-linux.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-none.Plo@am__quote@
@@ -1933,6 +1937,13 @@ getncpu-none.lo: runtime/getncpu-none.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getncpu-none.lo `test -f 'runtime/getncpu-none.c' || echo '$(srcdir)/'`runtime/getncpu-none.c
 
+getncpu-gnu.lo: runtime/getncpu-gnu.c
+@am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getncpu-gnu.lo -MD -MP -MF $(DEPDIR)/getncpu-gnu.Tpo -c -o getncpu-gnu.lo `test -f 'runtime/getncpu-gnu.c' || echo '$(srcdir)/'`runtime/getncpu-gnu.c
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/getncpu-gnu.Tpo $(DEPDIR)/getncpu-gnu.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='runtime/getncpu-gnu.c' object='getncpu-gnu.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getncpu-gnu.lo `test -f 'runtime/getncpu-gnu.c' || echo '$(srcdir)/'`runtime/getncpu-gnu.c
+
 getncpu-aix.lo: runtime/getncpu-aix.c
 @am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getncpu-aix.lo -MD -MP -MF $(DEPDIR)/getncpu-aix.Tpo -c -o getncpu-aix.lo `test -f 'runtime/getncpu-aix.c' || echo '$(srcdir)/'`runtime/getncpu-aix.c
 @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/getncpu-aix.Tpo $(DEPDIR)/getncpu-aix.Plo
@@ -3179,7 +3190,7 @@ s-zdefaultcc: Makefile
 	echo 'const DefaultPkgConfig = "pkg-config"' >> zdefaultcc.go.tmp
 	echo 'var OSArchSupportsCgo = map[string]bool{}' >> zdefaultcc.go.tmp
 	$(SHELL) $(srcdir)/../move-if-change zdefaultcc.go.tmp zdefaultcc.go
-	$(STAMP) $@ 
+	$(STAMP) $@
 
 # _Complex_lock and _Reader_lock are Go translations of some AIX system
 # types and should not be exported back to C
Index: gcc-8-8-20180310-1.1/src/libgo/match.sh
===================================================================
--- gcc-8-8-20180310-1.1.orig/src/libgo/match.sh
+++ gcc-8-8-20180310-1.1/src/libgo/match.sh
@@ -113,7 +113,7 @@ for f in $gofiles; do
 	"") ;;
 	$goarch) ;;
 	$goos) ;;
-	aix | android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
+	aix | android | darwin | dragonfly | freebsd | gnu | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 	    tag1=nonmatchingtag
 	    ;;
 	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64)
@@ -125,7 +125,7 @@ for f in $gofiles; do
 	"") ;;
 	$goarch) ;;
 	$goos) ;;
-	aix | android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
+	aix | android | darwin | dragonfly | freebsd | gnu | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 	    tag2=nonmatchingtag
 	    ;;
 	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64)
Index: gcc-8-8-20180310-1.1/src/libgo/mksigtab.sh
===================================================================
--- gcc-8-8-20180310-1.1.orig/src/libgo/mksigtab.sh
+++ gcc-8-8-20180310-1.1/src/libgo/mksigtab.sh
@@ -43,7 +43,13 @@ addsig _SIGINT     '{_SigNotify + _SigKi
 addsig _SIGQUIT    '{_SigNotify + _SigThrow, "SIGQUIT: quit"}'
 addsig _SIGILL     '{_SigThrow + _SigUnblock, "SIGILL: illegal instruction"}'
 addsig _SIGTRAP    '{_SigThrow + _SigUnblock, "SIGTRAP: trace trap"}'
+# Special treatment of SIGABRT for GNU/Hurd
+# /usr/include/i386-gnu/bits/signum.h: #define SIGABRT SIGIOT
+if egrep 'define SIGABRT SIGIOT' gen-sysinfo.go > /dev/null 2>&1; then
+addsig _SIGIOT     '{_SigNotify + _SigThrow, "SIGIOT: abort"}'
+else
 addsig _SIGABRT    '{_SigNotify + _SigThrow, "SIGABRT: abort"}'
+fi
 addsig _SIGBUS     '{_SigPanic + _SigUnblock, "SIGBUS: bus error"}'
 addsig _SIGFPE     '{_SigPanic + _SigUnblock, "SIGFPE: floating-point exception"}'
 addsig _SIGKILL    '{0, "SIGKILL: kill"}'
@@ -91,6 +97,7 @@ checksig _SIGCANCEL  '{_SigSetStack + _S
 checksig _SIGXRES    '{_SigNotify, "SIGXRES: resource control exceeded"}'
 checksig _SIGJVM1    '{_SigNotify, "SIGJVM1: reserved signal for Java Virtual Machine"}'
 checksig _SIGJVM2    '{_SigNotify, "SIGJVM2: reserved signal for Java Virtual Machine"}'
+checksig _SIGLOST '   {_SigNotify, "SIGLOST: resource lost (Sun); server died (GNU)"}'
 
 # Special handling of signals 32 and 33 on GNU/Linux systems,
 # because they are special to glibc.
@@ -112,6 +119,11 @@ else
 	    rtmax=`grep 'const _*SIGRTMAX = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
 	    if test -n "$rtmax"; then
 		nsig=`expr $rtmax + 1`
+	    elif grep 'const _*SIGRTMAX = [ (]*_*SIGRTMIN[ )]*' gen-sysinfo.go >/dev/null 2>&1; then
+		rtmin=`grep 'const _*SIGRTMIN = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
+		if test -n "$rtmin"; then
+		    nsig=`expr $rtmin + 1`
+		fi
 	    fi
 	fi
     fi
Index: gcc-8-8-20180310-1.1/src/libgo/mksysinfo.sh
===================================================================
--- gcc-8-8-20180310-1.1.orig/src/libgo/mksysinfo.sh
+++ gcc-8-8-20180310-1.1/src/libgo/mksysinfo.sh
@@ -54,8 +54,33 @@ grep '^type _mld_hdr_t ' gen-sysinfo.go
   sed -e 's/_in6_addr/[16]byte/' >> ${OUT}
 
 # The errno constants.  These get type Errno.
-  egrep '#define E[A-Z0-9_]+ ' errno.i | \
-  sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(_\1)/' >> ${OUT}
+#  egrep '#define E[A-Z0-9_]+ ' errno.i | \
+#  sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(_\1)/' >> ${OUT}
+
+egrep '#define E[A-Z0-9_]+ [0-9]' errno.i | \
+    sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(_\1)/' >> ${OUT}
+# Workaround for GNU/Hurd _EMIG_* errors having negative values
+egrep '#define E[A-Z0-9_]+ -[0-9]' errno.i | \
+  sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(-_\1)/' >> ${OUT}
+
+# Special treatment of EWOULDBLOCK for GNU/Hurd
+# /usr/include/i386-gnu/bits/errno.h: #define EWOULDBLOCK EAGAIN
+if egrep '^const _EWOULDBLOCK = _EAGAIN' gen-sysinfo.go > /dev/null 2>&1; then
+  if egrep '^const EAGAIN = Errno\(_EAGAIN\)' ${OUT}; then
+      echo 'const EWOULDBLOCK = Errno(_EAGAIN)' >> ${OUT}
+  fi
+fi
+
+# Special treatment of _NSIG for GNU/Hurd
+# /usr/include/i386-gnu/bits/signum-generic.h:
+#define __SIGRTMIN      32
+#define __SIGRTMAX      __SIGRTMIN
+#define _NSIG           (__SIGRTMAX + 1)
+# Brute force method (mksigtab.sh bug):
+#if egrep '^const ___SIGRTMAX = ___SIGRTMIN' gen-sysinfo.go > /dev/null 2>&1; then
+#  egrep '^const ___SIGRTMIN = 32' gen-sysinfo.go > /dev/null 2>&1 | \
+#    echo "const __SIGRTMAX = 32" >> gen-sysinfo.go
+#fi
 
 # The O_xxx flags.
 egrep '^const _(O|F|FD)_' gen-sysinfo.go | \
@@ -124,6 +149,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}
@@ -451,6 +481,11 @@ grep '^type _st_timespec ' gen-sysinfo.g
 
 # 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-1.1/src/libgo/go/crypto/x509/root_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171108-1.1/src/libgo/go/crypto/x509/root_gnu.go
@@ -0,0 +1,11 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from root_linux.go
+
+package x509
+
+// Possible certificate files; stop after finding one.
+var certFiles = []string{
+	"/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo etc.
+}
Index: gcc-8-8-20180308-1.1/src/libgo/go/go/build/syslist.go
===================================================================
--- gcc-8-8-20180308-1.1.orig/src/libgo/go/go/build/syslist.go
+++ gcc-8-8-20180308-1.1/src/libgo/go/go/build/syslist.go
@@ -4,5 +4,5 @@
 
 package build
 
-const goosList = "aix android darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris windows zos "
+const goosList = "aix android darwin dragonfly freebsd gnu linux nacl netbsd openbsd plan9 solaris windows zos "
 const goarchList = "386 amd64 amd64p32 arm armbe arm64 arm64be alpha m68k ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc riscv64 s390 s390x sh shbe sparc sparc64"
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/cgo_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/cgo_gnu.go
@@ -0,0 +1,17 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from cgo_bsd.go
+
+// +build cgo,!netgo
+// +build gnu
+
+package net
+
+/*
+#include <netdb.h>
+*/
+
+import "syscall"
+
+const cgoAddrInfoFlags = syscall.AI_CANONNAME | syscall.AI_V4MAPPED | syscall.AI_ALL
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/sendfile_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/sendfile_gnu.go
@@ -0,0 +1,42 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to sendfile_linux.go
+
+package net
+
+import (
+	"internal/poll"
+	"io"
+	"os"
+)
+
+// sendFile copies the contents of r to c using the sendfile
+// system call to minimize copies.
+//
+// if handled == true, sendFile returns the number of bytes copied and any
+// non-EOF error.
+//
+// if handled == false, sendFile performed no work.
+func sendFile(c *netFD, r io.Reader) (written int64, err error, handled bool) {
+	var remain int64 = 1 << 62 // by default, copy until EOF
+
+	lr, ok := r.(*io.LimitedReader)
+	if ok {
+		remain, r = lr.N, lr.R
+		if remain <= 0 {
+			return 0, nil, true
+		}
+	}
+	f, ok := r.(*os.File)
+	if !ok {
+		return 0, nil, false
+	}
+
+	written, err = poll.SendFile(&c.pfd, int(f.Fd()), remain)
+
+	if lr != nil {
+		lr.N = remain - written
+	}
+	return written, wrapSyscallError("sendfile", err), written > 0
+}
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/sock_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/sock_gnu.go
@@ -0,0 +1,15 @@
+// Copyright 2014 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from sock_stub.go
+
+// +build gnu
+
+package net
+
+import "syscall"
+
+func maxListenerBacklog() int {
+       // From /usr/include/i386-gnu/bits/socket.h
+       return syscall.SOMAXCONN
+}
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/sockopt_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/sockopt_gnu.go
@@ -0,0 +1,33 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to sockopt_linux.go
+
+package net
+
+import (
+	"os"
+	"syscall"
+)
+
+func setDefaultSockopts(s, family, sotype int, ipv6only bool) error {
+	if family == syscall.AF_INET6 && sotype != syscall.SOCK_RAW {
+		// Allow both IP versions even if the OS default
+		// is otherwise. Note that some operating systems
+		// never admit this option.
+		syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, boolint(ipv6only))
+	}
+	// Allow broadcast.
+	return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1))
+}
+
+func setDefaultListenerSockopts(s int) error {
+	// Allow reuse of recently-used addresses.
+	return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1))
+}
+
+func setDefaultMulticastSockopts(s int) error {
+	// Allow multicast UDP and raw IP datagram sockets to listen
+	// concurrently across multiple listeners.
+	return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1))
+}
Index: gcc-8-8-20171108-1.1/src/libgo/go/net/sockoptip_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171108-1.1/src/libgo/go/net/sockoptip_gnu.go
@@ -0,0 +1,31 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to sockoptip_bsd.go
+
+// +build gnu
+
+package net
+
+import (
+	"runtime"
+	"syscall"
+)
+
+func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
+	ip, err := interfaceToIPv4Addr(ifi)
+	if err != nil {
+		return wrapSyscallError("setsockopt", err)
+	}
+	var a [4]byte
+	copy(a[:], ip.To4())
+	err = fd.pfd.SetsockoptInet4Addr(syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, a)
+	runtime.KeepAlive(fd)
+	return wrapSyscallError("setsockopt", err)
+}
+
+func setIPv4MulticastLoopback(fd *netFD, v bool) error {
+	err := fd.pfd.SetsockoptByte(syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, byte(boolint(v)))
+	runtime.KeepAlive(fd)
+	return wrapSyscallError("setsockopt", err)
+}
Index: gcc-8-8-20171108-1.1/src/libgo/go/internal/poll/sendfile_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171108-1.1/src/libgo/go/internal/poll/sendfile_gnu.go
@@ -0,0 +1,51 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to sendfile_linux.go
+
+package poll
+
+import "syscall"
+
+// maxSendfileSize is the largest chunk size we ask the kernel to copy
+// at a time.
+const maxSendfileSize int = 4 << 20
+
+// SendFile wraps the sendfile system call.
+func SendFile(dstFD *FD, src int, remain int64) (int64, error) {
+	if err := dstFD.writeLock(); err != nil {
+		return 0, err
+	}
+	defer dstFD.writeUnlock()
+
+	dst := int(dstFD.Sysfd)
+	var written int64
+	var err error
+	for remain > 0 {
+		n := maxSendfileSize
+		if int64(n) > remain {
+			n = int(remain)
+		}
+		n, err1 := syscall.Sendfile(dst, src, nil, n)
+		if n > 0 {
+			written += int64(n)
+			remain -= int64(n)
+		}
+		if n == 0 && err1 == nil {
+			break
+		}
+		if err1 == syscall.EAGAIN {
+			if err1 = dstFD.pd.waitWrite(dstFD.isFile); err1 == nil {
+				continue
+			}
+		}
+		if err1 != nil {
+			// This includes syscall.ENOSYS (no kernel
+			// support) and syscall.EINVAL (fd types which
+			// don't implement sendfile)
+			err = err1
+			break
+		}
+	}
+	return written, err
+}
Index: gcc-8-8-20171102-1.1/src/libgo/go/os/executable_procfs.go
===================================================================
--- gcc-8-8-20171102-1.1.orig/src/libgo/go/os/executable_procfs.go
+++ gcc-8-8-20171102-1.1/src/libgo/go/os/executable_procfs.go
@@ -19,7 +19,7 @@ var executablePath, executablePathErr =
 	switch runtime.GOOS {
 	default:
 		return "", errors.New("Executable not implemented for " + runtime.GOOS)
-	case "linux", "android":
+	case "gnu", "linux", "android":
 		procfn = "/proc/self/exe"
 	case "netbsd":
 		procfn = "/proc/curproc/exe"
Index: gcc-8-8-20171102-1.1/src/libgo/go/os/pipe_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171102-1.1/src/libgo/go/os/pipe_gnu.go
@@ -0,0 +1,38 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from pipe_linux.go
+
+// +build gnu
+
+package os
+
+import "syscall"
+
+// Pipe returns a connected pair of Files; reads from r return bytes written to w.
+// It returns the files and an error, if any.
+func Pipe() (r *File, w *File, err error) {
+	var p [2]int
+
+	e := syscall.Pipe2(p[0:], syscall.O_CLOEXEC)
+	// pipe2 was added in 2.6.27 and our minimum requirement is 2.6.23, so it
+	// might not be implemented.
+	if e == syscall.ENOSYS {
+		// See ../syscall/exec.go for description of lock.
+		syscall.ForkLock.RLock()
+		e = syscall.Pipe(p[0:])
+		if e != nil {
+			syscall.ForkLock.RUnlock()
+			return nil, nil, NewSyscallError("pipe", e)
+		}
+		syscall.CloseOnExec(p[0])
+		syscall.CloseOnExec(p[1])
+		syscall.ForkLock.RUnlock()
+	} else if e != nil {
+		return nil, nil, NewSyscallError("pipe2", e)
+	}
+
+	return NewFile(uintptr(p[0]), "|0"), NewFile(uintptr(p[1]), "|1"), nil
+//FIXME: When netpoll_poll.go is implemented
+//	return newFile(uintptr(p[0]), "|0", true), newFile(uintptr(p[1]), "|1", true), nil
+}
Index: gcc-8-8-20180308-1.1/src/libgo/go/runtime/netpoll_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180308-1.1/src/libgo/go/runtime/netpoll_gnu.go
@@ -0,0 +1,303 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// FIXME: Fake network poller for gnu.
+// This is based on the former libgo/runtime/netpoll_select.c implementation
+// except that it uses poll instead of select and is written in Go.
+// Inspiration was also taken from netpoll_aix.go and netpoll_solaris.go
+
+// +build gnu
+
+package runtime
+
+import (
+	"unsafe"
+)
+
+//From /usr/include/i386-gnu/bits/poll.h
+const _POLLIN   =  01           // There is data to read.
+const _POLLPRI  =  02           // There is urgent data to read.
+const _POLLOUT  =  04           // Writing now will not block.
+const _POLLERR  = 010           // Error condition.
+const _POLLHUP  = 020           // Hung up.
+const _POLLNVAL = 040           // Invalid polling request.
+
+type pollfd struct {
+        fd      int32           // File descriptor to poll.
+        events  int16           // Types of events poller cares about.
+        revents int16           // Types of events that actually occurred.
+}
+
+//From /usr/include/x86_64-linux-gnu/sys/poll.h
+//extern poll
+func poll (polldata_array *pollfd, nfds int32, timeout int32) int32
+
+//extern pipe2
+func libc_pipe2(fd *int32, flags int32) int32
+
+var (
+	pipefd      [2]int32
+	pollfds     int32 = -1
+	nfds        int32 = 0
+	rdwake      int32
+	wrwake      int32
+	fds         [207]pollfd
+	data        [207]*pollDesc
+	pd          *pollDesc
+	pmtx        mutex
+	needsUpdate bool
+	b           byte
+	err         int32 = 0
+)
+
+func netpollinit() {
+
+	ret := libc_pipe2(&pipefd[0], _O_CLOEXEC|_O_NONBLOCK);
+	if ret == -1 {
+		throw("runtime:netpollinit(): failed to create pipe2")
+	}
+
+	rdwake = pipefd[0]
+	wrwake = pipefd[1]
+
+	// Add the read side of the pipe to the pollset.
+	lock(&pmtx)
+	fds[0].fd = int32(rdwake)
+	fds[0].events = int16(_POLLIN)
+	fds[0].revents = int16(0)
+
+// 	Checks for pd != nil are made in netpoll()
+	data[0] = nil
+	unlock(&pmtx)
+
+	nfds = 1
+	pollfds = 1
+
+	return
+}
+
+func netpolldescriptor() uintptr {
+	// FIXME: see src/libgo/go/os/exec/exec_test.go
+	// Need to return two fds here: wrwake and rdwake
+	return ^uintptr(0)
+}
+
+func fdadd(fd uintptr, events int16, pd *pollDesc) {
+//	println("netpollopen:fdadd: nfds =", nfds, "fd =", fd)
+
+	fdfound := false
+	// Omit fds[0].fd = rdwake
+	for i := int32(1); i < nfds; i++ {
+		fdsi := fds[i]
+		if fdsi.fd == int32(fd) {
+			fdfound = true
+			fdsi.events = int16(events)
+			fdsi.revents = int16(0)
+			data[i] = pd
+			break
+		}
+	}
+	// fd not found, add it.
+	if fdfound == false {
+		fds[nfds].fd = int32(fd)
+		fds[nfds].events = int16(events)
+		fds[nfds].revents = int16(0)
+		data[nfds] = pd
+		nfds++
+	}
+
+//	for l := int32(0); l < nfds; l++ {
+//		println("fds[", l, "].fd =", fds[l].fd)
+//	}
+
+	return
+}
+
+func netpollopen(fd uintptr, pd *pollDesc) int32 {
+	lock(&pmtx)
+	needsUpdate = true
+	unlock(&pmtx)
+
+	// poll will block so wakeup using wrwake first.
+wrloop1:
+	nwritten := write(uintptr(wrwake), unsafe.Pointer(&b), 1)
+	if nwritten == 0 {
+		println("runtime:netpollopen: write retuned zero, fd =", wrwake)
+		return -1
+	}
+	if nwritten == -1 {
+		err = int32(errno())
+		if err == _EAGAIN {
+			goto wrloop1
+		}
+		println("runtime:netpollopen: write failed fd =", wrwake, "errno =", err)
+		return err
+	}
+
+	// Add fd to the pollset.
+	lock(&pmtx)
+	fdadd(fd, _POLLIN|_POLLOUT, pd)
+	needsUpdate = false
+	unlock(&pmtx)
+
+	return 0
+}
+
+func fdremove(fd uintptr) {
+//	println("netpollclose():fdremove() nfds =", nfds, "fd =", fd)
+
+	fdfound := false
+	// Omit fds[0].fd = rdwake
+	j := 1
+	for i := int32(1); i < nfds; i++ {
+		fdsi := fds[i]
+		if fdsi.fd == int32(fd) {
+			fdfound = true
+			fdsi.fd = int32(0)
+			fdsi.events = int16(0)
+			fdsi.revents = int16(0)
+			data[i] = nil
+		} else {
+			fds[j].fd = fdsi.fd
+			fds[j].events = fdsi.events
+			fds[j].revents = int16(0)
+			data[j] = data[i]
+			j++
+		}
+	}
+	nfds--
+	// fd not found, print an error
+	//FIXME: Still output from here
+	if fdfound == false {
+		println("netpollclose:fdremove: fd =", fd, "NOT FOUND")
+	}
+
+//	for l := int32(0); l < nfds; l++ {
+//		println("fds[", l, "].fd =", fds[l].fd)
+//	}
+
+	return
+}
+
+func netpollclose(fd uintptr) int32 {
+	lock(&pmtx)
+	needsUpdate = true
+	unlock(&pmtx)
+
+	// poll will block so wakeup using wrwake first.
+wrloop2:
+	nwritten := write(uintptr(wrwake), unsafe.Pointer(&b), 1)
+	if nwritten == 0 {
+		println("runtime:netpollclose: write retuned zero, fd =", wrwake)
+		return -1
+	}
+	if nwritten == -1 {
+		err = int32(errno())
+		if err == _EAGAIN {
+			goto wrloop2
+		}
+		println("runtime:netpollclose: write failed fd =", wrwake, "errno =", err)
+		return err
+	}
+
+	// Remove fd from the pollset.
+	lock(&pmtx)
+	fdremove(fd)
+	needsUpdate = false
+	unlock(&pmtx)
+
+	return 0
+}
+
+func netpollarm(pd *pollDesc, mode int) {
+	throw("runtime:netpollarm() unused")
+}
+
+// polls for ready network connections
+// returns list of goroutines that become runnable
+func netpoll(block bool) *g {
+	if pollfds == -1 {
+		return nil
+	}
+
+	timeout := int32(-1)
+	if !block {
+		timeout = 0
+	}
+
+retry:
+	lock(&pmtx)
+	if needsUpdate {
+		unlock(&pmtx)
+		osyield()
+		goto retry
+	}
+	unlock(&pmtx)
+
+	// Note: poll only returns fds with non-zero revents!
+	nfound := poll(&fds[0], nfds, timeout)
+	if nfound == 0 {
+		return nil
+	}
+	if nfound < 0 {
+		err = int32(errno())
+		if err == _EINTR || err == _EAGAIN {
+			goto retry
+		}
+		println("runtime: poll failed errno =", err)
+		throw("runtime: netpoll failed")
+	}
+
+	var mode int32
+	var gp guintptr
+	// We assume that nfound <= nfds
+	for i := int32(0); i < nfds; i++ {
+		fdsi := &fds[i]
+
+		// Skip fds with zero revents as poll does
+		if fdsi.revents == 0 {
+			continue
+		}
+
+	    	mode = 0
+		if fdsi.revents&(_POLLIN|_POLLHUP|_POLLERR) != 0 {
+			if fdsi.fd == rdwake {
+rdloop:
+				nread := read(fdsi.fd, unsafe.Pointer(&b), 1)
+				// EOF
+				if nread == 0 {
+					println("runtime:netpoll: read returned zero fd =", fdsi.fd)
+					return nil
+				}
+				if nread == -1 {
+					err = int32(errno())
+					if err == _EAGAIN {
+						goto rdloop
+					}
+				 	println("runtime:netpoll: read failed fd =", fdsi.fd, "errno =", err)
+				 	return nil
+				}
+				continue
+			}
+			mode += 'r'
+		}
+		if fdsi.revents&(_POLLOUT|_POLLHUP|_POLLERR) != 0 {
+			mode += 'w'
+		}
+		if mode != 0 {
+			lock(&pmtx)
+			pd = data[i]
+			unlock(&pmtx)
+			if pd != nil {
+				netpollready(&gp, pd, mode)
+			}
+		}
+	}
+
+	if block && gp == 0 {
+		goto retry
+	}
+
+        return gp.ptr()
+}
Index: gcc-8-8-20180308-1.1/src/libgo/go/runtime/os_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180308-1.1/src/libgo/go/runtime/os_gnu.go
@@ -0,0 +1,87 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from os_solaris.go
+
+package runtime
+
+import "unsafe"
+
+type mOS struct {
+	waitsema uintptr // semaphore for parking on locks
+}
+
+//extern malloc
+func libc_malloc(uintptr) unsafe.Pointer
+
+//go:noescape
+//extern sem_init
+func sem_init(sem *_sem_t, pshared int32, value uint32) int32
+
+//go:noescape
+//extern sem_wait
+func sem_wait(sem *_sem_t) int32
+
+//go:noescape
+//extern sem_post
+func sem_post(sem *_sem_t) int32
+
+//go:noescape
+//extern sem_timedwait
+func sem_timedwait(sem *_sem_t, timeout *timespec) int32
+
+//go:nosplit
+func semacreate(mp *m) {
+	if mp.mos.waitsema != 0 {
+		return
+	}
+
+	var sem *_sem_t
+
+	// Call libc's malloc rather than malloc. This will
+	// allocate space on the C heap. We can't call malloc
+	// here because it could cause a deadlock.
+	sem = (*_sem_t)(libc_malloc(unsafe.Sizeof(*sem)))
+	if sem_init(sem, 0, 0) != 0 {
+		throw("sem_init")
+	}
+	mp.mos.waitsema = uintptr(unsafe.Pointer(sem))
+}
+
+//go:nosplit
+func semasleep(ns int64) int32 {
+	_m_ := getg().m
+	if ns >= 0 {
+		var ts timespec
+		ts.set_sec(ns / 1000000000)
+		ts.set_nsec(int32(ns % 1000000000))
+
+		if sem_timedwait((*_sem_t)(unsafe.Pointer(_m_.mos.waitsema)), &ts) != 0 {
+			err := errno()
+			if err == _ETIMEDOUT || err == _EAGAIN || err == _EINTR {
+				return -1
+			}
+			throw("sem_timedwait")
+		}
+		return 0
+	}
+	for {
+		r1 := sem_wait((*_sem_t)(unsafe.Pointer(_m_.mos.waitsema)))
+		if r1 == 0 {
+			break
+		}
+		if errno() == _EINTR {
+			continue
+		}
+		throw("sem_wait")
+	}
+	return 0
+}
+
+//go:nosplit
+func semawakeup(mp *m) {
+	if sem_post((*_sem_t)(unsafe.Pointer(mp.mos.waitsema))) != 0 {
+		throw("sem_post")
+	}
+}
+
Index: gcc-8-8-20180308-1.1/src/libgo/go/runtime/signal_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180308-1.1/src/libgo/go/runtime/signal_gnu.go
@@ -0,0 +1,750 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to signal_unix.go except for
+// dieFromSignal(_SIGIOT) instead of dieFromSignal(_SIGABRT)
+
+
+// +build gnu
+
+package runtime
+
+import (
+	"runtime/internal/atomic"
+	"unsafe"
+)
+
+// For gccgo's C code to call:
+//go:linkname initsig runtime.initsig
+//go:linkname sigtrampgo runtime.sigtrampgo
+
+// sigTabT is the type of an entry in the global sigtable array.
+// sigtable is inherently system dependent, and appears in OS-specific files,
+// but sigTabT is the same for all Unixy systems.
+// The sigtable array is indexed by a system signal number to get the flags
+// and printable name of each signal.
+type sigTabT struct {
+	flags int32
+	name  string
+}
+
+//go:linkname os_sigpipe os.sigpipe
+func os_sigpipe() {
+	systemstack(sigpipe)
+}
+
+func signame(sig uint32) string {
+	if sig >= uint32(len(sigtable)) {
+		return ""
+	}
+	return sigtable[sig].name
+}
+
+const (
+	_SIG_DFL uintptr = 0
+	_SIG_IGN uintptr = 1
+)
+
+// Stores the signal handlers registered before Go installed its own.
+// These signal handlers will be invoked in cases where Go doesn't want to
+// handle a particular signal (e.g., signal occurred on a non-Go thread).
+// See sigfwdgo for more information on when the signals are forwarded.
+//
+// This is read by the signal handler; accesses should use
+// atomic.Loaduintptr and atomic.Storeuintptr.
+var fwdSig [_NSIG]uintptr
+
+// handlingSig is indexed by signal number and is non-zero if we are
+// currently handling the signal. Or, to put it another way, whether
+// the signal handler is currently set to the Go signal handler or not.
+// This is uint32 rather than bool so that we can use atomic instructions.
+var handlingSig [_NSIG]uint32
+
+// channels for synchronizing signal mask updates with the signal mask
+// thread
+var (
+	disableSigChan  chan uint32
+	enableSigChan   chan uint32
+	maskUpdatedChan chan struct{}
+)
+
+func init() {
+	// _NSIG is the number of signals on this operating system.
+	// sigtable should describe what to do for all the possible signals.
+	if len(sigtable) != _NSIG {
+		print("runtime: len(sigtable)=", len(sigtable), " _NSIG=", _NSIG, "\n")
+		throw("bad sigtable len")
+	}
+}
+
+var signalsOK bool
+
+// Initialize signals.
+// Called by libpreinit so runtime may not be initialized.
+//go:nosplit
+//go:nowritebarrierrec
+func initsig(preinit bool) {
+	if preinit {
+		// preinit is only passed as true if isarchive should be true.
+		isarchive = true
+	}
+
+	if !preinit {
+		// It's now OK for signal handlers to run.
+		signalsOK = true
+	}
+
+	// For c-archive/c-shared this is called by libpreinit with
+	// preinit == true.
+	if (isarchive || islibrary) && !preinit {
+		return
+	}
+
+	for i := uint32(0); i < _NSIG; i++ {
+		t := &sigtable[i]
+		if t.flags == 0 || t.flags&_SigDefault != 0 {
+			continue
+		}
+
+		// We don't need to use atomic operations here because
+		// there shouldn't be any other goroutines running yet.
+		fwdSig[i] = getsig(i)
+
+		if !sigInstallGoHandler(i) {
+			// Even if we are not installing a signal handler,
+			// set SA_ONSTACK if necessary.
+			if fwdSig[i] != _SIG_DFL && fwdSig[i] != _SIG_IGN {
+				setsigstack(i)
+			}
+			continue
+		}
+
+		handlingSig[i] = 1
+		setsig(i, getSigtramp())
+	}
+}
+
+//go:nosplit
+//go:nowritebarrierrec
+func sigInstallGoHandler(sig uint32) bool {
+	// For some signals, we respect an inherited SIG_IGN handler
+	// rather than insist on installing our own default handler.
+	// Even these signals can be fetched using the os/signal package.
+	switch sig {
+	case _SIGHUP, _SIGINT:
+		if atomic.Loaduintptr(&fwdSig[sig]) == _SIG_IGN {
+			return false
+		}
+	}
+
+	t := &sigtable[sig]
+	if t.flags&_SigSetStack != 0 {
+		return false
+	}
+
+	// When built using c-archive or c-shared, only install signal
+	// handlers for synchronous signals and SIGPIPE.
+	if (isarchive || islibrary) && t.flags&_SigPanic == 0 && sig != _SIGPIPE {
+		return false
+	}
+
+	return true
+}
+
+// sigenable enables the Go signal handler to catch the signal sig.
+// It is only called while holding the os/signal.handlers lock,
+// via os/signal.enableSignal and signal_enable.
+func sigenable(sig uint32) {
+	if sig >= uint32(len(sigtable)) {
+		return
+	}
+
+	// SIGPROF is handled specially for profiling.
+	if sig == _SIGPROF {
+		return
+	}
+
+	t := &sigtable[sig]
+	if t.flags&_SigNotify != 0 {
+		ensureSigM()
+		enableSigChan <- sig
+		<-maskUpdatedChan
+		if atomic.Cas(&handlingSig[sig], 0, 1) {
+			atomic.Storeuintptr(&fwdSig[sig], getsig(sig))
+			setsig(sig, getSigtramp())
+		}
+	}
+}
+
+// sigdisable disables the Go signal handler for the signal sig.
+// It is only called while holding the os/signal.handlers lock,
+// via os/signal.disableSignal and signal_disable.
+func sigdisable(sig uint32) {
+	if sig >= uint32(len(sigtable)) {
+		return
+	}
+
+	// SIGPROF is handled specially for profiling.
+	if sig == _SIGPROF {
+		return
+	}
+
+	t := &sigtable[sig]
+	if t.flags&_SigNotify != 0 {
+		ensureSigM()
+		disableSigChan <- sig
+		<-maskUpdatedChan
+
+		// If initsig does not install a signal handler for a
+		// signal, then to go back to the state before Notify
+		// we should remove the one we installed.
+		if !sigInstallGoHandler(sig) {
+			atomic.Store(&handlingSig[sig], 0)
+			setsig(sig, atomic.Loaduintptr(&fwdSig[sig]))
+		}
+	}
+}
+
+// sigignore ignores the signal sig.
+// It is only called while holding the os/signal.handlers lock,
+// via os/signal.ignoreSignal and signal_ignore.
+func sigignore(sig uint32) {
+	if sig >= uint32(len(sigtable)) {
+		return
+	}
+
+	// SIGPROF is handled specially for profiling.
+	if sig == _SIGPROF {
+		return
+	}
+
+	t := &sigtable[sig]
+	if t.flags&_SigNotify != 0 {
+		atomic.Store(&handlingSig[sig], 0)
+		setsig(sig, _SIG_IGN)
+	}
+}
+
+// clearSignalHandlers clears all signal handlers that are not ignored
+// back to the default. This is called by the child after a fork, so that
+// we can enable the signal mask for the exec without worrying about
+// running a signal handler in the child.
+//go:nosplit
+//go:nowritebarrierrec
+func clearSignalHandlers() {
+	for i := uint32(0); i < _NSIG; i++ {
+		if atomic.Load(&handlingSig[i]) != 0 {
+			setsig(i, _SIG_DFL)
+		}
+	}
+}
+
+// setProcessCPUProfiler is called when the profiling timer changes.
+// It is called with prof.lock held. hz is the new timer, and is 0 if
+// profiling is being disabled. Enable or disable the signal as
+// required for -buildmode=c-archive.
+func setProcessCPUProfiler(hz int32) {
+	if hz != 0 {
+		// Enable the Go signal handler if not enabled.
+		if atomic.Cas(&handlingSig[_SIGPROF], 0, 1) {
+			atomic.Storeuintptr(&fwdSig[_SIGPROF], getsig(_SIGPROF))
+			setsig(_SIGPROF, getSigtramp())
+		}
+	} else {
+		// If the Go signal handler should be disabled by default,
+		// disable it if it is enabled.
+		if !sigInstallGoHandler(_SIGPROF) {
+			if atomic.Cas(&handlingSig[_SIGPROF], 1, 0) {
+				setsig(_SIGPROF, atomic.Loaduintptr(&fwdSig[_SIGPROF]))
+			}
+		}
+	}
+}
+
+// setThreadCPUProfiler makes any thread-specific changes required to
+// implement profiling at a rate of hz.
+func setThreadCPUProfiler(hz int32) {
+	var it _itimerval
+	if hz == 0 {
+		setitimer(_ITIMER_PROF, &it, nil)
+	} else {
+		it.it_interval.tv_sec = 0
+		it.it_interval.set_usec(1000000 / hz)
+		it.it_value = it.it_interval
+		setitimer(_ITIMER_PROF, &it, nil)
+	}
+	_g_ := getg()
+	_g_.m.profilehz = hz
+}
+
+func sigpipe() {
+	if sigsend(_SIGPIPE) {
+		return
+	}
+	dieFromSignal(_SIGPIPE)
+}
+
+// sigtrampgo is called from the signal handler function, sigtramp,
+// written in assembly code.
+// This is called by the signal handler, and the world may be stopped.
+//
+// It must be nosplit because getg() is still the G that was running
+// (if any) when the signal was delivered, but it's (usually) called
+// on the gsignal stack. Until this switches the G to gsignal, the
+// stack bounds check won't work.
+//
+//go:nosplit
+//go:nowritebarrierrec
+func sigtrampgo(sig uint32, info *_siginfo_t, ctx unsafe.Pointer) {
+	if sigfwdgo(sig, info, ctx) {
+		return
+	}
+	g := getg()
+	if g == nil {
+		c := sigctxt{info, ctx}
+		if sig == _SIGPROF {
+			_, pc := getSiginfo(info, ctx)
+			sigprofNonGo(pc)
+			return
+		}
+		badsignal(uintptr(sig), &c)
+		return
+	}
+
+	setg(g.m.gsignal)
+	sighandler(sig, info, ctx, g)
+	setg(g)
+}
+
+// sigpanic turns a synchronous signal into a run-time panic.
+// If the signal handler sees a synchronous panic, it arranges the
+// stack to look like the function where the signal occurred called
+// sigpanic, sets the signal's PC value to sigpanic, and returns from
+// the signal handler. The effect is that the program will act as
+// though the function that got the signal simply called sigpanic
+// instead.
+//
+// This must NOT be nosplit because the linker doesn't know where
+// sigpanic calls can be injected.
+//
+// The signal handler must not inject a call to sigpanic if
+// getg().throwsplit, since sigpanic may need to grow the stack.
+func sigpanic() {
+	g := getg()
+	if !canpanic(g) {
+		throw("unexpected signal during runtime execution")
+	}
+
+	switch g.sig {
+	case _SIGBUS:
+		if g.sigcode0 == _BUS_ADRERR && g.sigcode1 < 0x1000 {
+			panicmem()
+		}
+		// Support runtime/debug.SetPanicOnFault.
+		if g.paniconfault {
+			panicmem()
+		}
+		print("unexpected fault address ", hex(g.sigcode1), "\n")
+		throw("fault")
+	case _SIGSEGV:
+		if (g.sigcode0 == 0 || g.sigcode0 == _SEGV_MAPERR || g.sigcode0 == _SEGV_ACCERR) && g.sigcode1 < 0x1000 {
+			panicmem()
+		}
+		// Support runtime/debug.SetPanicOnFault.
+		if g.paniconfault {
+			panicmem()
+		}
+		print("unexpected fault address ", hex(g.sigcode1), "\n")
+		throw("fault")
+	case _SIGFPE:
+		switch g.sigcode0 {
+		case _FPE_INTDIV:
+			panicdivide()
+		case _FPE_INTOVF:
+			panicoverflow()
+		}
+		panicfloat()
+	}
+
+	if g.sig >= uint32(len(sigtable)) {
+		// can't happen: we looked up g.sig in sigtable to decide to call sigpanic
+		throw("unexpected signal value")
+	}
+	panic(errorString(sigtable[g.sig].name))
+}
+
+// dieFromSignal kills the program with a signal.
+// This provides the expected exit status for the shell.
+// This is only called with fatal signals expected to kill the process.
+//go:nosplit
+//go:nowritebarrierrec
+func dieFromSignal(sig uint32) {
+	unblocksig(sig)
+	// Mark the signal as unhandled to ensure it is forwarded.
+	atomic.Store(&handlingSig[sig], 0)
+	raise(sig)
+
+	// That should have killed us. On some systems, though, raise
+	// sends the signal to the whole process rather than to just
+	// the current thread, which means that the signal may not yet
+	// have been delivered. Give other threads a chance to run and
+	// pick up the signal.
+	osyield()
+	osyield()
+	osyield()
+
+	// If that didn't work, try _SIG_DFL.
+	setsig(sig, _SIG_DFL)
+	raise(sig)
+
+	osyield()
+	osyield()
+	osyield()
+
+	// On Darwin we may still fail to die, because raise sends the
+	// signal to the whole process rather than just the current thread,
+	// and osyield just sleeps briefly rather than letting all other
+	// threads run. See issue 20315. Sleep longer.
+	if GOOS == "darwin" {
+		usleep(100)
+	}
+
+	// If we are still somehow running, just exit with the wrong status.
+	exit(2)
+}
+
+// raisebadsignal is called when a signal is received on a non-Go
+// thread, and the Go program does not want to handle it (that is, the
+// program has not called os/signal.Notify for the signal).
+func raisebadsignal(sig uint32, c *sigctxt) {
+	if sig == _SIGPROF {
+		// Ignore profiling signals that arrive on non-Go threads.
+		return
+	}
+
+	var handler uintptr
+	if sig >= _NSIG {
+		handler = _SIG_DFL
+	} else {
+		handler = atomic.Loaduintptr(&fwdSig[sig])
+	}
+
+	// Reset the signal handler and raise the signal.
+	// We are currently running inside a signal handler, so the
+	// signal is blocked. We need to unblock it before raising the
+	// signal, or the signal we raise will be ignored until we return
+	// from the signal handler. We know that the signal was unblocked
+	// before entering the handler, or else we would not have received
+	// it. That means that we don't have to worry about blocking it
+	// again.
+	unblocksig(sig)
+	setsig(sig, handler)
+
+	// If we're linked into a non-Go program we want to try to
+	// avoid modifying the original context in which the signal
+	// was raised. If the handler is the default, we know it
+	// is non-recoverable, so we don't have to worry about
+	// re-installing sighandler. At this point we can just
+	// return and the signal will be re-raised and caught by
+	// the default handler with the correct context.
+	if (isarchive || islibrary) && handler == _SIG_DFL && c.sigcode() != _SI_USER {
+		return
+	}
+
+	raise(sig)
+
+	// Give the signal a chance to be delivered.
+	// In almost all real cases the program is about to crash,
+	// so sleeping here is not a waste of time.
+	usleep(1000)
+
+	// If the signal didn't cause the program to exit, restore the
+	// Go signal handler and carry on.
+	//
+	// We may receive another instance of the signal before we
+	// restore the Go handler, but that is not so bad: we know
+	// that the Go program has been ignoring the signal.
+	setsig(sig, getSigtramp())
+}
+
+func crash() {
+	if GOOS == "darwin" {
+		// OS X core dumps are linear dumps of the mapped memory,
+		// from the first virtual byte to the last, with zeros in the gaps.
+		// Because of the way we arrange the address space on 64-bit systems,
+		// this means the OS X core file will be >128 GB and even on a zippy
+		// workstation can take OS X well over an hour to write (uninterruptible).
+		// Save users from making that mistake.
+		if GOARCH == "amd64" {
+			return
+		}
+	}
+
+	dieFromSignal(_SIGIOT)
+}
+
+// ensureSigM starts one global, sleeping thread to make sure at least one thread
+// is available to catch signals enabled for os/signal.
+func ensureSigM() {
+	if maskUpdatedChan != nil {
+		return
+	}
+	maskUpdatedChan = make(chan struct{})
+	disableSigChan = make(chan uint32)
+	enableSigChan = make(chan uint32)
+	go func() {
+		// Signal masks are per-thread, so make sure this goroutine stays on one
+		// thread.
+		LockOSThread()
+		defer UnlockOSThread()
+		// The sigBlocked mask contains the signals not active for os/signal,
+		// initially all signals except the essential. When signal.Notify()/Stop is called,
+		// sigenable/sigdisable in turn notify this thread to update its signal
+		// mask accordingly.
+		var sigBlocked sigset
+		sigfillset(&sigBlocked)
+		for i := range sigtable {
+			if !blockableSig(uint32(i)) {
+				sigdelset(&sigBlocked, i)
+			}
+		}
+		sigprocmask(_SIG_SETMASK, &sigBlocked, nil)
+		for {
+			select {
+			case sig := <-enableSigChan:
+				if sig > 0 {
+					sigdelset(&sigBlocked, int(sig))
+				}
+			case sig := <-disableSigChan:
+				if sig > 0 && blockableSig(sig) {
+					sigaddset(&sigBlocked, int(sig))
+				}
+			}
+			sigprocmask(_SIG_SETMASK, &sigBlocked, nil)
+			maskUpdatedChan <- struct{}{}
+		}
+	}()
+}
+
+// This is called when we receive a signal when there is no signal stack.
+// This can only happen if non-Go code calls sigaltstack to disable the
+// signal stack.
+func noSignalStack(sig uint32) {
+	println("signal", sig, "received on thread with no signal stack")
+	throw("non-Go code disabled sigaltstack")
+}
+
+// This is called if we receive a signal when there is a signal stack
+// but we are not on it. This can only happen if non-Go code called
+// sigaction without setting the SS_ONSTACK flag.
+func sigNotOnStack(sig uint32) {
+	println("signal", sig, "received but handler not on signal stack")
+	throw("non-Go code set up signal handler without SA_ONSTACK flag")
+}
+
+// signalDuringFork is called if we receive a signal while doing a fork.
+// We do not want signals at that time, as a signal sent to the process
+// group may be delivered to the child process, causing confusion.
+// This should never be called, because we block signals across the fork;
+// this function is just a safety check. See issue 18600 for background.
+func signalDuringFork(sig uint32) {
+	println("signal", sig, "received during fork")
+	throw("signal received during fork")
+}
+
+// This runs on a foreign stack, without an m or a g. No stack split.
+//go:nosplit
+//go:norace
+//go:nowritebarrierrec
+func badsignal(sig uintptr, c *sigctxt) {
+	needm(0)
+	if !sigsend(uint32(sig)) {
+		// A foreign thread received the signal sig, and the
+		// Go code does not want to handle it.
+		raisebadsignal(uint32(sig), c)
+	}
+	dropm()
+}
+
+// Determines if the signal should be handled by Go and if not, forwards the
+// signal to the handler that was installed before Go's. Returns whether the
+// signal was forwarded.
+// This is called by the signal handler, and the world may be stopped.
+//go:nosplit
+//go:nowritebarrierrec
+func sigfwdgo(sig uint32, info *_siginfo_t, ctx unsafe.Pointer) bool {
+	if sig >= uint32(len(sigtable)) {
+		return false
+	}
+	fwdFn := atomic.Loaduintptr(&fwdSig[sig])
+	flags := sigtable[sig].flags
+
+	// If we aren't handling the signal, forward it.
+	if atomic.Load(&handlingSig[sig]) == 0 || !signalsOK {
+		// If the signal is ignored, doing nothing is the same as forwarding.
+		if fwdFn == _SIG_IGN || (fwdFn == _SIG_DFL && flags&_SigIgn != 0) {
+			return true
+		}
+		// We are not handling the signal and there is no other handler to forward to.
+		// Crash with the default behavior.
+		if fwdFn == _SIG_DFL {
+			setsig(sig, _SIG_DFL)
+			dieFromSignal(sig)
+			return false
+		}
+
+		sigfwd(fwdFn, sig, info, ctx)
+		return true
+	}
+
+	// If there is no handler to forward to, no need to forward.
+	if fwdFn == _SIG_DFL {
+		return false
+	}
+
+	c := sigctxt{info, ctx}
+	// Only forward synchronous signals and SIGPIPE.
+	// Unfortunately, user generated SIGPIPEs will also be forwarded, because si_code
+	// is set to _SI_USER even for a SIGPIPE raised from a write to a closed socket
+	// or pipe.
+	if (c.sigcode() == _SI_USER || flags&_SigPanic == 0) && sig != _SIGPIPE {
+		return false
+	}
+	// Determine if the signal occurred inside Go code. We test that:
+	//   (1) we were in a goroutine (i.e., m.curg != nil), and
+	//   (2) we weren't in CGO.
+	g := getg()
+	if g != nil && g.m != nil && g.m.curg != nil && !g.m.incgo {
+		return false
+	}
+
+	// Signal not handled by Go, forward it.
+	if fwdFn != _SIG_IGN {
+		sigfwd(fwdFn, sig, info, ctx)
+	}
+
+	return true
+}
+
+// msigsave saves the current thread's signal mask into mp.sigmask.
+// This is used to preserve the non-Go signal mask when a non-Go
+// thread calls a Go function.
+// This is nosplit and nowritebarrierrec because it is called by needm
+// which may be called on a non-Go thread with no g available.
+//go:nosplit
+//go:nowritebarrierrec
+func msigsave(mp *m) {
+	sigprocmask(_SIG_SETMASK, nil, &mp.sigmask)
+}
+
+// msigrestore sets the current thread's signal mask to sigmask.
+// This is used to restore the non-Go signal mask when a non-Go thread
+// calls a Go function.
+// This is nosplit and nowritebarrierrec because it is called by dropm
+// after g has been cleared.
+//go:nosplit
+//go:nowritebarrierrec
+func msigrestore(sigmask sigset) {
+	sigprocmask(_SIG_SETMASK, &sigmask, nil)
+}
+
+// sigblock blocks all signals in the current thread's signal mask.
+// This is used to block signals while setting up and tearing down g
+// when a non-Go thread calls a Go function.
+// The OS-specific code is expected to define sigset_all.
+// This is nosplit and nowritebarrierrec because it is called by needm
+// which may be called on a non-Go thread with no g available.
+//go:nosplit
+//go:nowritebarrierrec
+func sigblock() {
+	var set sigset
+	sigfillset(&set)
+	sigprocmask(_SIG_SETMASK, &set, nil)
+}
+
+// unblocksig removes sig from the current thread's signal mask.
+// This is nosplit and nowritebarrierrec because it is called from
+// dieFromSignal, which can be called by sigfwdgo while running in the
+// signal handler, on the signal stack, with no g available.
+//go:nosplit
+//go:nowritebarrierrec
+func unblocksig(sig uint32) {
+	var set sigset
+	sigemptyset(&set)
+	sigaddset(&set, int(sig))
+	sigprocmask(_SIG_UNBLOCK, &set, nil)
+}
+
+// minitSignals is called when initializing a new m to set the
+// thread's alternate signal stack and signal mask.
+func minitSignals() {
+	minitSignalStack()
+	minitSignalMask()
+}
+
+// minitSignalStack is called when initializing a new m to set the
+// alternate signal stack. If the alternate signal stack is not set
+// for the thread (the normal case) then set the alternate signal
+// stack to the gsignal stack. If the alternate signal stack is set
+// for the thread (the case when a non-Go thread sets the alternate
+// signal stack and then calls a Go function) then set the gsignal
+// stack to the alternate signal stack. Record which choice was made
+// in newSigstack, so that it can be undone in unminit.
+func minitSignalStack() {
+	_g_ := getg()
+	var st _stack_t
+	sigaltstack(nil, &st)
+	if st.ss_flags&_SS_DISABLE != 0 {
+		signalstack(_g_.m.gsignalstack, _g_.m.gsignalstacksize)
+		_g_.m.newSigstack = true
+	} else {
+		_g_.m.newSigstack = false
+	}
+}
+
+// minitSignalMask is called when initializing a new m to set the
+// thread's signal mask. When this is called all signals have been
+// blocked for the thread.  This starts with m.sigmask, which was set
+// either from initSigmask for a newly created thread or by calling
+// msigsave if this is a non-Go thread calling a Go function. It
+// removes all essential signals from the mask, thus causing those
+// signals to not be blocked. Then it sets the thread's signal mask.
+// After this is called the thread can receive signals.
+func minitSignalMask() {
+	nmask := getg().m.sigmask
+	for i := range sigtable {
+		if !blockableSig(uint32(i)) {
+			sigdelset(&nmask, i)
+		}
+	}
+	sigprocmask(_SIG_SETMASK, &nmask, nil)
+}
+
+// unminitSignals is called from dropm, via unminit, to undo the
+// effect of calling minit on a non-Go thread.
+//go:nosplit
+//go:nowritebarrierrec
+func unminitSignals() {
+	if getg().m.newSigstack {
+		signalstack(nil, 0)
+	}
+}
+
+// blockableSig returns whether sig may be blocked by the signal mask.
+// We never want to block the signals marked _SigUnblock;
+// these are the synchronous signals that turn into a Go panic.
+// In a Go program--not a c-archive/c-shared--we never want to block
+// the signals marked _SigKill or _SigThrow, as otherwise it's possible
+// for all running threads to block them and delay their delivery until
+// we start a new thread. When linked into a C program we let the C code
+// decide on the disposition of those signals.
+func blockableSig(sig uint32) bool {
+	flags := sigtable[sig].flags
+	if flags&_SigUnblock != 0 {
+		return false
+	}
+	if isarchive || islibrary {
+		return true
+	}
+	return flags&(_SigKill|_SigThrow) == 0
+}
Index: gcc-8-8-20180218/src/libgo/go/syscall/errstr_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180218/src/libgo/go/syscall/errstr_gnu.go
@@ -0,0 +1,32 @@
+// errstr_gnu.go -- GNU/Hurd specific error strings.
+
+// Copyright 2010 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// We use this rather than errstr.go because on GNU/Linux sterror_r
+// returns a pointer to the error message, and may not use buf at all.
+// This file is derived from errstr_linux.go
+
+package syscall
+
+import "unsafe"
+
+//sysnb	strerror_r(errnum int, b []byte) (errstr *byte)
+//strerror_r(errnum _C_int, b *byte, len Size_t) *byte
+
+func Errstr(errnum int) string {
+	a := make([]byte, 128)
+	p := strerror_r(errnum, a)
+	b := (*[1000]byte)(unsafe.Pointer(p))
+	i := 0
+	for b[i] != 0 {
+		i++
+	}
+	// Lowercase first letter: Bad -> bad, but STREAM -> STREAM.
+	if i > 1 && 'A' <= b[0] && b[0] <= 'Z' && 'a' <= b[1] && b[1] <= 'z' {
+		c := b[0] + 'a' - 'A'
+		return string(c) + string(b[1:i])
+	}
+	return string(b[:i])
+}
Index: gcc-8-8-20180218/src/libgo/go/syscall/libcall_gnu_386.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180218/src/libgo/go/syscall/libcall_gnu_386.go
@@ -0,0 +1,10 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// GNU/Hurd library calls 386 specific.
+
+package syscall
+
+//sys	Ioperm(from int, num int, on int) (err error)
+//ioperm(from _C_long, num _C_long, on _C_int) _C_int
Index: gcc-8-8-20180218/src/libgo/go/syscall/libcall_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180218/src/libgo/go/syscall/libcall_gnu.go
@@ -0,0 +1,184 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// GNU/Hurd library calls.
+// This file is derived from libcall_linux.go
+// Dummy function: raw_ptrace
+// Removed functions: {P,p}trace*, Reboot, Gettid, Splice, Tgkill, Unlinkat, Unmount, Unshare
+
+package syscall
+
+import "unsafe"
+
+//sys   Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)
+//__go_openat(dirfd _C_int, path *byte, flags _C_int, mode Mode_t) _C_int
+
+//sys   futimesat(dirfd int, path *byte, times *[2]Timeval) (err error)
+//futimesat(dirfd _C_int, path *byte, times *[2]Timeval) _C_int
+func Futimesat(dirfd int, path string, tv []Timeval) (err error) {
+	if len(tv) != 2 {
+		return EINVAL
+	}
+	return futimesat(dirfd, StringBytePtr(path), (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
+func Futimes(fd int, tv []Timeval) (err error) {
+	// Believe it or not, this is the best we can do on GNU/Linux
+	// (and is what glibc does).
+	return Utimes("/proc/self/fd/"+itoa(fd), tv)
+}
+
+//sys   ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
+//ptrace(request _C_int, pid Pid_t, addr *byte, data *byte) _C_long
+
+// Dummy function
+func raw_ptrace(request int, pid int, addr *byte, data *byte) Errno {
+	return ENOSYS
+}
+
+//sys   accept4(fd int, sa *RawSockaddrAny, len *Socklen_t, flags int) (nfd int, err error)
+//accept4(fd _C_int, sa *RawSockaddrAny, len *Socklen_t, flags _C_int) _C_int
+
+func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
+	var rsa RawSockaddrAny
+	var len Socklen_t = SizeofSockaddrAny
+	nfd, err = accept4(fd, &rsa, &len, flags)
+	if err != nil {
+		return -1, nil, err
+	}
+	sa, err = anyToSockaddr(&rsa)
+	if err != nil {
+		Close(nfd)
+		return -1, nil, err
+	}
+	return nfd, sa, nil
+}
+
+///INCLUDE?
+///sys   Acct(path string) (err error)
+///acct(path *byte) _C_int
+
+//sysnb Dup3(oldfd int, newfd int, flags int) (err error)
+//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
+
+//sys   Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
+//faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
+
+//sys   Fallocate(fd int, mode uint32, off int64, len int64) (err error)
+//fallocate(fd _C_int, mode _C_int, offset Offset_t, len Offset_t) _C_int
+
+//sys   Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
+//fchmodat(dirfd _C_int, pathname *byte, mode Mode_t, flags _C_int) _C_int
+
+//sys   Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
+//fchownat(dirfd _C_int, path *byte, owner Uid_t, group Gid_t, flags _C_int) _C_int
+
+//sys   Flock(fd int, how int) (err error)
+//flock(fd _C_int, how _C_int) _C_int
+
+//sys   Fstatfs(fd int, buf *Statfs_t) (err error)
+//fstatfs(fd _C_int, buf *Statfs_t) _C_int
+
+func Getdents(fd int, buf []byte) (n int, err error) {
+	var p *byte
+	if len(buf) > 0 {
+		p = &buf[0]
+	} else {
+		p = (*byte)(unsafe.Pointer(&_zero))
+	}
+	s := SYS_GETDENTS64
+	if s == 0 {
+		s = SYS_GETDENTS
+	}
+	r1, _, errno := Syscall(uintptr(s), uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(len(buf)))
+	n = int(r1)
+	if n < 0 {
+		err = errno
+	}
+	return
+}
+
+func clen(n []byte) int {
+	for i := 0; i < len(n); i++ {
+		if n[i] == 0 {
+			return i
+		}
+	}
+	return len(n)
+}
+
+func ReadDirent(fd int, buf []byte) (n int, err error) {
+	return Getdents(fd, buf)
+}
+
+
+///INCLUDE??
+///sys   Getxattr(path string, attr string, dest []byte) (sz int, err error)
+///getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
+
+///INCLUDE??
+///sys   Listxattr(path string, dest []byte) (sz int, err error)
+///listxattr(path *byte, list *byte, size Size_t) Ssize_t
+
+//sys   Mkdirat(dirfd int, path string, mode uint32) (err error)
+//mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
+
+//sys   Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
+//mknodat(dirfd _C_int, path *byte, mode Mode_t, dev _dev_t) _C_int
+
+//sysnb pipe2(p *[2]_C_int, flags int) (err error)
+//pipe2(p *[2]_C_int, flags _C_int) _C_int
+func Pipe2(p []int, flags int) (err error) {
+	if len(p) != 2 {
+		return EINVAL
+	}
+	var pp [2]_C_int
+	err = pipe2(&pp, flags)
+	p[0] = int(pp[0])
+	p[1] = int(pp[1])
+	return
+}
+
+///INCLUDE??
+///sys   Removexattr(path string, attr string) (err error)
+///removexattr(path *byte, name *byte) _C_int
+
+///INCLUDE??
+///sys   Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
+///renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
+
+//INCLUDE??
+///sys   Setxattr(path string, attr string, data []byte, flags int) (err error)
+///setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
+
+//sys   SyncFileRange(fd int, off int64, n int64, flags int) (err error)
+//sync_file_range(fd _C_int, off Offset_t, n Offset_t, flags _C_uint) _C_int
+
+//INCLUDE??
+///sysnb Sysinfo(info *Sysinfo_t) (err error)
+///sysinfo(info *Sysinfo_t) _C_int
+
+//func Unlinkat(dirfd int, path string) (err error) {
+//	return unlinkat(dirfd, path, 0)
+//}
+
+///INCLUDE??
+///sys   Ustat(dev int, ubuf *Ustat_t) (err error)
+///ustat(dev _dev_t, ubuf *Ustat_t) _C_int
+
+//sys	sendfile(outfd int, infd int, offset *Offset_t, count int) (written int, err error)
+//sendfile64(outfd _C_int, infd _C_int, offset *Offset_t, count Size_t) Ssize_t
+func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
+	var soff Offset_t
+	var psoff *Offset_t
+	if offset != nil {
+		soff = Offset_t(*offset)
+		psoff = &soff
+	}
+	written, err = sendfile(outfd, infd, psoff, count)
+	if offset != nil {
+		*offset = int64(soff)
+	}
+	return
+}
Index: gcc-8-8-20180218/src/libgo/go/syscall/libcall_posix_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180218/src/libgo/go/syscall/libcall_posix_gnu.go
@@ -0,0 +1,400 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// POSIX library calls.
+// This file is compiled as ordinary Go code,
+// but it is also input to mksyscall,
+// which parses the //sys lines and generates library call stubs.
+// Note that sometimes we use a lowercase //sys name and
+// wrap it in our own nicer implementation.
+// Removed the mount call for GNU/Hurd, it exists but use translators.
+// Functionality is not the same as descibed in Linux <sys/mount.h>
+// Removed the madvise call for GNU/Hurd, not yet implemented.
+// This file is derived from libchall_posix.go
+
+// +build gnu
+
+package syscall
+
+import "unsafe"
+
+/*
+ * Wrapped
+ */
+
+//sysnb	pipe(p *[2]_C_int) (err error)
+//pipe(p *[2]_C_int) _C_int
+func Pipe(p []int) (err error) {
+	if len(p) != 2 {
+		return EINVAL
+	}
+	var pp [2]_C_int
+	err = pipe(&pp)
+	p[0] = int(pp[0])
+	p[1] = int(pp[1])
+	return
+}
+
+//sys	utimes(path string, times *[2]Timeval) (err error)
+//utimes(path *byte, times *[2]Timeval) _C_int
+func Utimes(path string, tv []Timeval) (err error) {
+	if len(tv) != 2 {
+		return EINVAL
+	}
+	return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))
+}
+
+//sys	getcwd(buf *byte, size Size_t) (err error)
+//getcwd(buf *byte, size Size_t) *byte
+
+const ImplementsGetwd = true
+
+func Getwd() (ret string, err error) {
+	for len := Size_t(4096); ; len *= 2 {
+		b := make([]byte, len)
+		err := getcwd(&b[0], len)
+		if err == nil {
+			i := 0
+			for b[i] != 0 {
+				i++
+			}
+			return string(b[0:i]), nil
+		}
+		if err != ERANGE {
+			return "", err
+		}
+	}
+}
+
+func Getcwd(buf []byte) (n int, err error) {
+	err = getcwd(&buf[0], Size_t(len(buf)))
+	if err == nil {
+		i := 0
+		for buf[i] != 0 {
+			i++
+		}
+		n = i + 1
+	}
+	return
+}
+
+//sysnb	getgroups(size int, list *Gid_t) (nn int, err error)
+//getgroups(size _C_int, list *Gid_t) _C_int
+
+func Getgroups() (gids []int, err error) {
+	n, err := getgroups(0, nil)
+	if err != nil {
+		return nil, err
+	}
+	if n == 0 {
+		return nil, nil
+	}
+
+	// Sanity check group count.  Max is 1<<16 on GNU/Linux.
+	if n < 0 || n > 1<<20 {
+		return nil, EINVAL
+	}
+
+	a := make([]Gid_t, n)
+	n, err = getgroups(n, &a[0])
+	if err != nil {
+		return nil, err
+	}
+	gids = make([]int, n)
+	for i, v := range a[0:n] {
+		gids[i] = int(v)
+	}
+	return
+}
+
+//sysnb	setgroups(n int, list *Gid_t) (err error)
+//setgroups(n Size_t, list *Gid_t) _C_int
+
+func Setgroups(gids []int) (err error) {
+	if len(gids) == 0 {
+		return setgroups(0, nil)
+	}
+
+	a := make([]Gid_t, len(gids))
+	for i, v := range gids {
+		a[i] = Gid_t(v)
+	}
+	return setgroups(len(a), &a[0])
+}
+
+type WaitStatus uint32
+
+// The WaitStatus methods are implemented in C, to pick up the macros
+// #defines in <sys/wait.h>.
+
+func (w WaitStatus) Exited() bool
+func (w WaitStatus) Signaled() bool
+func (w WaitStatus) Stopped() bool
+func (w WaitStatus) Continued() bool
+func (w WaitStatus) CoreDump() bool
+func (w WaitStatus) ExitStatus() int
+func (w WaitStatus) Signal() Signal
+func (w WaitStatus) StopSignal() Signal
+func (w WaitStatus) TrapCause() int
+
+//sys	Mkfifo(path string, mode uint32) (err error)
+//mkfifo(path *byte, mode Mode_t) _C_int
+
+//sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
+//select(nfd _C_int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) _C_int
+
+const nfdbits = int(unsafe.Sizeof(fds_bits_type(0)) * 8)
+
+type FdSet struct {
+	Bits [(FD_SETSIZE + nfdbits - 1) / nfdbits]fds_bits_type
+}
+
+func FDSet(fd int, set *FdSet) {
+	set.Bits[fd/nfdbits] |= (1 << (uint)(fd%nfdbits))
+}
+
+func FDClr(fd int, set *FdSet) {
+	set.Bits[fd/nfdbits] &^= (1 << (uint)(fd%nfdbits))
+}
+
+func FDIsSet(fd int, set *FdSet) bool {
+	if set.Bits[fd/nfdbits]&(1<<(uint)(fd%nfdbits)) != 0 {
+		return true
+	} else {
+		return false
+	}
+}
+
+func FDZero(set *FdSet) {
+	for i := range set.Bits {
+		set.Bits[i] = 0
+	}
+}
+
+//sys	Access(path string, mode uint32) (err error)
+//access(path *byte, mode _C_int) _C_int
+
+//sys	Chdir(path string) (err error)
+//chdir(path *byte) _C_int
+
+//sys	Chmod(path string, mode uint32) (err error)
+//chmod(path *byte, mode Mode_t) _C_int
+
+//sys	Chown(path string, uid int, gid int) (err error)
+//chown(path *byte, uid Uid_t, gid Gid_t) _C_int
+
+//sys	Chroot(path string) (err error)
+//chroot(path *byte) _C_int
+
+//sys	Close(fd int) (err error)
+//close(fd _C_int) _C_int
+
+//sys	Creat(path string, mode uint32) (fd int, err error)
+//creat(path *byte, mode Mode_t) _C_int
+
+//sysnb	Dup(oldfd int) (fd int, err error)
+//dup(oldfd _C_int) _C_int
+
+//sysnb	Dup2(oldfd int, newfd int) (err error)
+//dup2(oldfd _C_int, newfd _C_int) _C_int
+
+//sys	Fchdir(fd int) (err error)
+//fchdir(fd _C_int) _C_int
+
+//sys	Fchmod(fd int, mode uint32) (err error)
+//fchmod(fd _C_int, mode Mode_t) _C_int
+
+//sys	Fchown(fd int, uid int, gid int) (err error)
+//fchown(fd _C_int, uid Uid_t, gid Gid_t) _C_int
+
+//sys	fcntl(fd int, cmd int, arg int) (val int, err error)
+//__go_fcntl(fd _C_int, cmd _C_int, arg _C_int) _C_int
+
+//sys	FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error)
+//__go_fcntl_flock(fd _C_int, cmd _C_int, arg *Flock_t) _C_int
+
+//sys	Fdatasync(fd int) (err error)
+//fdatasync(fd _C_int) _C_int
+
+//sys	Fsync(fd int) (err error)
+//fsync(fd _C_int) _C_int
+
+//sysnb Getegid() (egid int)
+//getegid() Gid_t
+
+//sysnb Geteuid() (euid int)
+//geteuid() Uid_t
+
+//sysnb Getgid() (gid int)
+//getgid() Gid_t
+
+//sysnb	Getpgid(pid int) (pgid int, err error)
+//getpgid(pid Pid_t) Pid_t
+
+//sysnb	Getpgrp() (pid int)
+//getpgrp() Pid_t
+
+//sysnb	Getpid() (pid int)
+//getpid() Pid_t
+
+//sysnb	Getppid() (ppid int)
+//getppid() Pid_t
+
+//sys Getpriority(which int, who int) (prio int, err error)
+//getpriority(which _C_int, who _C_int) _C_int
+
+//sysnb	Getrusage(who int, rusage *Rusage) (err error)
+//getrusage(who _C_int, rusage *Rusage) _C_int
+
+//sysnb	gettimeofday(tv *Timeval, tz *byte) (err error)
+//gettimeofday(tv *Timeval, tz *byte) _C_int
+func Gettimeofday(tv *Timeval) (err error) {
+	return gettimeofday(tv, nil)
+}
+
+//sysnb Getuid() (uid int)
+//getuid() Uid_t
+
+//sysnb	Kill(pid int, sig Signal) (err error)
+//kill(pid Pid_t, sig _C_int) _C_int
+
+//sys	Lchown(path string, uid int, gid int) (err error)
+//lchown(path *byte, uid Uid_t, gid Gid_t) _C_int
+
+//sys	Link(oldpath string, newpath string) (err error)
+//link(oldpath *byte, newpath *byte) _C_int
+
+//sys	Mkdir(path string, mode uint32) (err error)
+//mkdir(path *byte, mode Mode_t) _C_int
+
+//sys	Mknod(path string, mode uint32, dev int) (err error)
+//mknod(path *byte, mode Mode_t, dev _dev_t) _C_int
+
+//sys	Nanosleep(time *Timespec, leftover *Timespec) (err error)
+//nanosleep(time *Timespec, leftover *Timespec) _C_int
+
+//sys	Pause() (err error)
+//pause() _C_int
+
+//sys	read(fd int, p []byte) (n int, err error)
+//read(fd _C_int, buf *byte, count Size_t) Ssize_t
+
+//sys	readlen(fd int, p *byte, np int) (n int, err error)
+//read(fd _C_int, buf *byte, count Size_t) Ssize_t
+
+//sys	Readlink(path string, buf []byte) (n int, err error)
+//readlink(path *byte, buf *byte, bufsiz Size_t) Ssize_t
+
+//sys	Rename(oldpath string, newpath string) (err error)
+//rename(oldpath *byte, newpath *byte) _C_int
+
+//sys	Rmdir(path string) (err error)
+//rmdir(path *byte) _C_int
+
+//sys	Setdomainname(p []byte) (err error)
+//setdomainname(name *byte, len Size_t) _C_int
+
+//sys	Sethostname(p []byte) (err error)
+//sethostname(name *byte, len Size_t) _C_int
+
+//sysnb	Setgid(gid int) (err error)
+//setgid(gid Gid_t) _C_int
+
+//sysnb Setregid(rgid int, egid int) (err error)
+//setregid(rgid Gid_t, egid Gid_t) _C_int
+
+//sysnb	Setpgid(pid int, pgid int) (err error)
+//setpgid(pid Pid_t, pgid Pid_t) _C_int
+
+//sys Setpriority(which int, who int, prio int) (err error)
+//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
+
+//sysnb	Setreuid(ruid int, euid int) (err error)
+//setreuid(ruid Uid_t, euid Uid_t) _C_int
+
+//sysnb	Setsid() (pid int, err error)
+//setsid() Pid_t
+
+//sysnb	settimeofday(tv *Timeval, tz *byte) (err error)
+//settimeofday(tv *Timeval, tz *byte) _C_int
+
+func Settimeofday(tv *Timeval) (err error) {
+	return settimeofday(tv, nil)
+}
+
+//sysnb	Setuid(uid int) (err error)
+//setuid(uid Uid_t) _C_int
+
+//sys	Symlink(oldpath string, newpath string) (err error)
+//symlink(oldpath *byte, newpath *byte) _C_int
+
+//sys	Sync()
+//sync()
+
+//sysnb	Time(t *Time_t) (tt Time_t, err error)
+//time(t *Time_t) Time_t
+
+//sysnb	Times(tms *Tms) (ticks uintptr, err error)
+//times(tms *Tms) _clock_t
+
+//sysnb	Umask(mask int) (oldmask int)
+//umask(mask Mode_t) Mode_t
+
+//sys	Unlink(path string) (err error)
+//unlink(path *byte) _C_int
+
+//sys	Utime(path string, buf *Utimbuf) (err error)
+//utime(path *byte, buf *Utimbuf) _C_int
+
+//sys	write(fd int, p []byte) (n int, err error)
+//write(fd _C_int, buf *byte, count Size_t) Ssize_t
+
+//sys	writelen(fd int, p *byte, np int) (n int, err error)
+//write(fd _C_int, buf *byte, count Size_t) Ssize_t
+
+//sys	munmap(addr uintptr, length uintptr) (err error)
+//munmap(addr *byte, length Size_t) _C_int
+
+//sys	Mprotect(b []byte, prot int) (err error)
+//mprotect(addr *byte, len Size_t, prot _C_int) _C_int
+
+//sys	Mlock(b []byte) (err error)
+//mlock(addr *byte, len Size_t) _C_int
+
+//sys	Munlock(b []byte) (err error)
+//munlock(addr *byte, len Size_t) _C_int
+
+//sys	Mlockall(flags int) (err error)
+//mlockall(flags _C_int) _C_int
+
+//sys	Munlockall() (err error)
+//munlockall() _C_int
+
+func setTimespec(sec, nsec int64) Timespec {
+	return Timespec{Sec: Timespec_sec_t(sec), Nsec: Timespec_nsec_t(nsec)}
+}
+
+func setTimeval(sec, usec int64) Timeval {
+	return Timeval{Sec: Timeval_sec_t(sec), Usec: Timeval_usec_t(usec)}
+}
+
+//sysnb	Tcgetattr(fd int, p *Termios) (err error)
+//tcgetattr(fd _C_int, p *Termios) _C_int
+
+//sys	Tcsetattr(fd int, actions int, p *Termios) (err error)
+//tcsetattr(fd _C_int, actions _C_int, p *Termios) _C_int
+
+//sys	sysconf(name int) (ret int64, err error)
+//sysconf(name _C_int) _C_long
+
+func Sysconf(name int) (ret int64, err error) {
+	// If an option is not available, sysconf returns -1 without
+	// changing errno.  Detect this case and return err == nil.
+	SetErrno(0)
+	ret, err = sysconf(name)
+	if err == Errno(0) {
+		err = nil
+	}
+	return ret, err
+}
Index: gcc-8-8-20180218/src/libgo/go/syscall/socket_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180218/src/libgo/go/syscall/socket_gnu.go
@@ -0,0 +1,91 @@
+// socket_gnu.go -- Socket handling specific to GNU/Hurd.
+
+// Copyright 2010 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from syscall_bsd.go
+
+// +build gnu
+
+package syscall
+
+import "unsafe"
+
+const SizeofSockaddrInet4 = 16
+const SizeofSockaddrInet6 = 28
+const SizeofSockaddrUnix = 110
+
+type RawSockaddrInet4 struct {
+	Len    uint8
+	Family uint8
+	Port   uint16
+	Addr   [4]byte /* in_addr */
+	Zero   [8]uint8
+}
+
+func (sa *RawSockaddrInet4) setLen() Socklen_t {
+	sa.Len = SizeofSockaddrInet4
+	return SizeofSockaddrInet4
+}
+
+type RawSockaddrInet6 struct {
+	Len      uint8
+	Family   uint8
+	Port     uint16
+	Flowinfo uint32
+	Addr     [16]byte /* in6_addr */
+	Scope_id uint32
+}
+
+func (sa *RawSockaddrInet6) setLen() Socklen_t {
+	sa.Len = SizeofSockaddrInet6
+	return SizeofSockaddrInet6
+}
+
+type RawSockaddrUnix struct {
+	Len    uint8
+	Family uint8
+	Path   [108]int8
+}
+
+func (sa *RawSockaddrUnix) setLen(n int) {
+	sa.Len = uint8(3 + n) // 2 for Family, Len; 1 for NUL.
+}
+
+func (sa *RawSockaddrUnix) getLen() (int, error) {
+	if sa.Len < 3 || sa.Len > SizeofSockaddrUnix {
+		return 0, EINVAL
+	}
+	// Assume path ends at NUL.
+	n := 0
+	for n < len(sa.Path) && sa.Path[n] != 0 {
+		n++
+	}
+	return n, nil
+}
+
+func (sa *RawSockaddrUnix) adjustAbstract(sl Socklen_t) Socklen_t {
+	return sl
+}
+
+type RawSockaddr struct {
+	Len    uint8
+	Family uint8
+	Data   [14]int8
+}
+
+// BindToDevice binds the socket associated with fd to device.
+func BindToDevice(fd int, device string) (err error) {
+	return ENOSYS
+}
+
+func anyToSockaddrOS(rsa *RawSockaddrAny) (Sockaddr, error) {
+	return nil, EAFNOSUPPORT
+}
+
+func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {
+	var value IPv6MTUInfo
+	vallen := Socklen_t(SizeofIPv6MTUInfo)
+	err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)
+	return &value, err
+}
Index: gcc-8-8-20180218/src/libgo/go/syscall/syscall_gnu.go
===================================================================
--- /dev/null
+++ gcc-8-8-20180218/src/libgo/go/syscall/syscall_gnu.go
@@ -0,0 +1,24 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to syscall_linux.go
+
+package syscall
+
+import "unsafe"
+
+func direntIno(buf []byte) (uint64, bool) {
+	return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))
+}
+
+func direntReclen(buf []byte) (uint64, bool) {
+	return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))
+}
+
+func direntNamlen(buf []byte) (uint64, bool) {
+	reclen, ok := direntReclen(buf)
+	if !ok {
+		return 0, false
+	}
+	return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true
+}
Index: gcc-8-8-20180218/src/libgo/go/syscall/wait.c
===================================================================
--- gcc-8-8-20180218.orig/src/libgo/go/syscall/wait.c
+++ gcc-8-8-20180218/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/go/syscall/syscall_errno.go	2015-01-17 11:50:12.000000000 +0100
+++ b/src/libgo/go/syscall/syscall_errno.go	2018-02-27 17:29:33.000000000 +0100
@@ -11,7 +11,7 @@
 //	if errno != 0 {
 //		err = errno
 //	}
-type Errno uintptr
+type Errno int32
 
 func (e Errno) Error() string {
 	return Errstr(int(e))
Index: gcc-8-8-20171108-1.1/src/libgo/go/syscall/syscall_gnu_test.go
===================================================================
--- /dev/null
+++ gcc-8-8-20171108-1.1/src/libgo/go/syscall/syscall_gnu_test.go
@@ -0,0 +1,356 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build gnu
+
+package syscall_test
+
+import (
+	"flag"
+	"fmt"
+	"internal/testenv"
+	"io/ioutil"
+	"net"
+	"os"
+	"os/exec"
+	"path/filepath"
+	"runtime"
+	"syscall"
+	"testing"
+	"time"
+)
+
+// Tests that below functions, structures and constants are consistent
+// on all Unix-like systems.
+func _() {
+	// program scheduling priority functions and constants
+	var (
+		_ func(int, int, int) error   = syscall.Setpriority
+		_ func(int, int) (int, error) = syscall.Getpriority
+	)
+	const (
+		_ int = syscall.PRIO_USER
+		_ int = syscall.PRIO_PROCESS
+		_ int = syscall.PRIO_PGRP
+	)
+
+	// termios constants
+	const (
+		_ int = syscall.TCIFLUSH
+		_ int = syscall.TCIOFLUSH
+		_ int = syscall.TCOFLUSH
+	)
+
+	// fcntl file locking structure and constants
+	var (
+		_ = syscall.Flock_t{
+			Type:   int32(0),
+			Whence: int32(0),
+			Start:  int64(0),
+			Len:    int64(0),
+			Pid:    int32(0),
+		}
+	)
+	const (
+		_ = syscall.F_GETLK
+		_ = syscall.F_SETLK
+		_ = syscall.F_SETLKW
+	)
+}
+
+// TestFcntlFlock tests whether the file locking structure matches
+// the calling convention of each kernel.
+// On some Linux systems, glibc uses another set of values for the
+// commands and translates them to the correct value that the kernel
+// expects just before the actual fcntl syscall. As Go uses raw
+// syscalls directly, it must use the real value, not the glibc value.
+// Thus this test also verifies that the Flock_t structure can be
+// roundtripped with F_SETLK and F_GETLK.
+func TestFcntlFlock(t *testing.T) {
+	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+		t.Skip("skipping; no child processes allowed on iOS")
+	}
+	flock := syscall.Flock_t{
+		Type:  syscall.F_WRLCK,
+		Start: 31415, Len: 271828, Whence: 1,
+	}
+	if os.Getenv("GO_WANT_HELPER_PROCESS") == "" {
+		// parent
+		name := filepath.Join(os.TempDir(), "TestFcntlFlock")
+		fd, err := syscall.Open(name, syscall.O_CREAT|syscall.O_RDWR|syscall.O_CLOEXEC, 0)
+		if err != nil {
+			t.Fatalf("Open failed: %v", err)
+		}
+		defer syscall.Unlink(name)
+		defer syscall.Close(fd)
+		if err := syscall.Ftruncate(fd, 1<<20); err != nil {
+			t.Fatalf("Ftruncate(1<<20) failed: %v", err)
+		}
+		if err := syscall.FcntlFlock(uintptr(fd), syscall.F_SETLK, &flock); err != nil {
+			t.Fatalf("FcntlFlock(F_SETLK) failed: %v", err)
+		}
+		cmd := exec.Command(os.Args[0], "-test.run=^TestFcntlFlock$")
+		cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1")
+		cmd.ExtraFiles = []*os.File{os.NewFile(uintptr(fd), name)}
+		out, err := cmd.CombinedOutput()
+		if len(out) > 0 || err != nil {
+			t.Fatalf("child process: %q, %v", out, err)
+		}
+	} else {
+		// child
+		got := flock
+		// make sure the child lock is conflicting with the parent lock
+		got.Start--
+		got.Len++
+		if err := syscall.FcntlFlock(3, syscall.F_GETLK, &got); err != nil {
+			t.Fatalf("FcntlFlock(F_GETLK) failed: %v", err)
+		}
+		flock.Pid = int32(syscall.Getppid())
+		// Linux kernel always set Whence to 0
+		flock.Whence = 0
+		if got.Type == flock.Type && got.Start == flock.Start && got.Len == flock.Len && got.Pid == flock.Pid && got.Whence == flock.Whence {
+			os.Exit(0)
+		}
+		t.Fatalf("FcntlFlock got %v, want %v", got, flock)
+	}
+}
+
+// TestPassFD tests passing a file descriptor over a Unix socket.
+//
+// This test involved both a parent and child process. The parent
+// process is invoked as a normal test, with "go test", which then
+// runs the child process by running the current test binary with args
+// "-test.run=^TestPassFD$" and an environment variable used to signal
+// that the test should become the child process instead.
+func TestPassFD(t *testing.T) {
+	switch runtime.GOOS {
+	case "dragonfly":
+		// TODO(jsing): Figure out why sendmsg is returning EINVAL.
+		t.Skip("skipping test on dragonfly")
+	case "solaris":
+		// TODO(aram): Figure out why ReadMsgUnix is returning empty message.
+		t.Skip("skipping test on solaris, see issue 7402")
+	}
+
+	testenv.MustHaveExec(t)
+
+	if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" {
+		passFDChild()
+		return
+	}
+
+	tempDir, err := ioutil.TempDir("", "TestPassFD")
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer os.RemoveAll(tempDir)
+
+	fds, err := syscall.Socketpair(syscall.AF_LOCAL, syscall.SOCK_STREAM, 0)
+	if err != nil {
+		t.Fatalf("Socketpair: %v", err)
+	}
+	defer syscall.Close(fds[0])
+	defer syscall.Close(fds[1])
+	writeFile := os.NewFile(uintptr(fds[0]), "child-writes")
+	readFile := os.NewFile(uintptr(fds[1]), "parent-reads")
+	defer writeFile.Close()
+	defer readFile.Close()
+
+	cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir)
+	cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1")
+	cmd.ExtraFiles = []*os.File{writeFile}
+
+	out, err := cmd.CombinedOutput()
+	if len(out) > 0 || err != nil {
+		t.Fatalf("child process: %q, %v", out, err)
+	}
+
+	c, err := net.FileConn(readFile)
+	if err != nil {
+		t.Fatalf("FileConn: %v", err)
+	}
+	defer c.Close()
+
+	uc, ok := c.(*net.UnixConn)
+	if !ok {
+		t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c)
+	}
+
+	buf := make([]byte, 32) // expect 1 byte
+	oob := make([]byte, 32) // expect 24 bytes
+	closeUnix := time.AfterFunc(5*time.Second, func() {
+		t.Logf("timeout reading from unix socket")
+		uc.Close()
+	})
+	_, oobn, _, _, err := uc.ReadMsgUnix(buf, oob)
+	closeUnix.Stop()
+
+	scms, err := syscall.ParseSocketControlMessage(oob[:oobn])
+	if err != nil {
+		t.Fatalf("ParseSocketControlMessage: %v", err)
+	}
+	if len(scms) != 1 {
+		t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms)
+	}
+	scm := scms[0]
+	gotFds, err := syscall.ParseUnixRights(&scm)
+	if err != nil {
+		t.Fatalf("syscall.ParseUnixRights: %v", err)
+	}
+	if len(gotFds) != 1 {
+		t.Fatalf("wanted 1 fd; got %#v", gotFds)
+	}
+
+	f := os.NewFile(uintptr(gotFds[0]), "fd-from-child")
+	defer f.Close()
+
+	got, err := ioutil.ReadAll(f)
+	want := "Hello from child process!\n"
+	if string(got) != want {
+		t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want)
+	}
+}
+
+// passFDChild is the child process used by TestPassFD.
+func passFDChild() {
+	defer os.Exit(0)
+
+	// Look for our fd. It should be fd 3, but we work around an fd leak
+	// bug here (https://golang.org/issue/2603) to let it be elsewhere.
+	var uc *net.UnixConn
+	for fd := uintptr(3); fd <= 10; fd++ {
+		f := os.NewFile(fd, "unix-conn")
+		var ok bool
+		netc, _ := net.FileConn(f)
+		uc, ok = netc.(*net.UnixConn)
+		if ok {
+			break
+		}
+	}
+	if uc == nil {
+		fmt.Println("failed to find unix fd")
+		return
+	}
+
+	// Make a file f to send to our parent process on uc.
+	// We make it in tempDir, which our parent will clean up.
+	flag.Parse()
+	tempDir := flag.Arg(0)
+	f, err := ioutil.TempFile(tempDir, "")
+	if err != nil {
+		fmt.Printf("TempFile: %v", err)
+		return
+	}
+
+	f.Write([]byte("Hello from child process!\n"))
+	f.Seek(0, 0)
+
+	rights := syscall.UnixRights(int(f.Fd()))
+	dummyByte := []byte("x")
+	n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil)
+	if err != nil {
+		fmt.Printf("WriteMsgUnix: %v", err)
+		return
+	}
+	if n != 1 || oobn != len(rights) {
+		fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights))
+		return
+	}
+}
+
+// TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage,
+// and ParseUnixRights are able to successfully round-trip lists of file descriptors.
+func TestUnixRightsRoundtrip(t *testing.T) {
+	testCases := [...][][]int{
+		{{42}},
+		{{1, 2}},
+		{{3, 4, 5}},
+		{{}},
+		{{1, 2}, {3, 4, 5}, {}, {7}},
+	}
+	for _, testCase := range testCases {
+		b := []byte{}
+		var n int
+		for _, fds := range testCase {
+			// Last assignment to n wins
+			n = len(b) + syscall.CmsgLen(4*len(fds))
+			b = append(b, syscall.UnixRights(fds...)...)
+		}
+		// Truncate b
+		b = b[:n]
+
+		scms, err := syscall.ParseSocketControlMessage(b)
+		if err != nil {
+			t.Fatalf("ParseSocketControlMessage: %v", err)
+		}
+		if len(scms) != len(testCase) {
+			t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms)
+		}
+		for i, scm := range scms {
+			gotFds, err := syscall.ParseUnixRights(&scm)
+			if err != nil {
+				t.Fatalf("ParseUnixRights: %v", err)
+			}
+			wantFds := testCase[i]
+			if len(gotFds) != len(wantFds) {
+				t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds)
+			}
+			for j, fd := range gotFds {
+				if fd != wantFds[j] {
+					t.Fatalf("expected fd %v, got %v", wantFds[j], fd)
+				}
+			}
+		}
+	}
+}
+
+func TestRlimit(t *testing.T) {
+	var rlimit, zero syscall.Rlimit
+	err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlimit)
+	if err != nil {
+		t.Fatalf("Getrlimit: save failed: %v", err)
+	}
+	if zero == rlimit {
+		t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit)
+	}
+	set := rlimit
+	set.Cur = set.Max - 1
+	err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &set)
+	if err != nil {
+		t.Fatalf("Setrlimit: set failed: %#v %v", set, err)
+	}
+	var get syscall.Rlimit
+	err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &get)
+	if err != nil {
+		t.Fatalf("Getrlimit: get failed: %v", err)
+	}
+	set = rlimit
+	set.Cur = set.Max - 1
+	if set != get {
+		// Seems like Darwin requires some privilege to
+		// increase the soft limit of rlimit sandbox, though
+		// Setrlimit never reports an error.
+		switch runtime.GOOS {
+		case "darwin":
+		default:
+			t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get)
+		}
+	}
+	err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rlimit)
+	if err != nil {
+		t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err)
+	}
+}
+
+func TestSeekFailure(t *testing.T) {
+	_, err := syscall.Seek(-1, 0, 0)
+	if err == nil {
+		t.Fatalf("Seek(-1, 0, 0) did not fail")
+	}
+	str := err.Error() // used to crash on Linux
+	t.Logf("Seek: %v", str)
+	if str == "" {
+		t.Fatalf("Seek(-1, 0, 0) return error with empty message")
+	}
+}
Index: gcc-8-8-20180308-1.1/src/libgo/runtime/getncpu-gnu.c
===================================================================
--- /dev/null
+++ gcc-8-8-20180308-1.1/src/libgo/runtime/getncpu-gnu.c
@@ -0,0 +1,16 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include <unistd.h>
+
+#include "runtime.h"
+#include "defs.h"
+
+int32
+getproccount(void)
+{
+	int32 n;
+	n = (int32)sysconf(_SC_NPROCESSORS_ONLN);
+	return n > 1 ? n : 1;
+}
Index: gcc-8-8-20180308-1.1/src/libgo/runtime/go-caller.c
===================================================================
--- gcc-8-8-20180308-1.1.orig/src/libgo/runtime/go-caller.c
+++ gcc-8-8-20180308-1.1/src/libgo/runtime/go-caller.c
@@ -116,7 +116,7 @@ __go_get_backtrace_state ()
 	 argv[0] (http://gcc.gnu.org/PR61895).  It would be nice to
 	 have a better check for whether this file is the real
 	 executable.  */
-      if (stat (filename, &s) < 0 || s.st_size < 1024)
+      if (filename != NULL && (stat (filename, &s) < 0 || s.st_size < 1024))
 	filename = NULL;
 
       back_state = backtrace_create_state (filename, 1, error_callback, NULL);
Index: gcc-8-8-20171108-1.1/src/libgo/testsuite/gotest
===================================================================
--- gcc-8-8-20171108-1.1.orig/src/libgo/testsuite/gotest
+++ gcc-8-8-20171108-1.1/src/libgo/testsuite/gotest
@@ -624,7 +624,11 @@ xno)
 		wait $pid
 		status=$?
 		if ! test -f gotest-timeout; then
-		    sleeppid=`ps -o pid,ppid,comm | grep " $alarmpid " | grep sleep | sed -e 's/ *\([0-9]*\) .*$/\1/'`
+		    if test "$goos" = "gnu"; then
+			sleeppid=`ps -o pid,ppid | grep " $alarmpid " | grep sleep | sed -e 's/ *\([0-9]*\) .*$/\1/'`
+		    else
+			sleeppid=`ps -o pid,ppid,comm | grep " $alarmpid " | grep sleep | sed -e 's/ *\([0-9]*\) .*$/\1/'`
+		    fi
 		    kill $alarmpid
 		    wait $alarmpid
 		    if test "$sleeppid" != ""; then

Reply to: