[gcc-7] 340/354: * Port libgo to the Hurd (Svante Signell).
Ximin Luo
infinity0 at debian.org
Thu Nov 23 15:51:41 UTC 2017
This is an automated email from the git hooks/post-receive script.
infinity0 pushed a commit to branch master
in repository gcc-7.
commit bafa5f51241ad51ac2a28953c314ac6303051486
Author: doko <doko at 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>
Date: Mon Nov 13 21:55:24 2017 +0000
* Port libgo to the Hurd (Svante Signell).
git-svn-id: svn+ssh://svn.debian.org/svn/gcccvs/branches/sid/gcc-7@9821 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
---
debian/changelog | 1 +
debian/patches/add-gnu-to-libgo-headers.diff | 1077 ++++++++++++++++++++
debian/patches/add-gnu-to-libgo-test-headers.diff | 273 +++++
debian/patches/src_libgo_build.diff | 216 ++++
debian/patches/src_libgo_go_crypto.diff | 15 +
.../patches/src_libgo_go_go_build_syslist.go.diff | 11 +
debian/patches/src_libgo_go_net.diff | 209 ++++
debian/patches/src_libgo_go_os.diff | 53 +
debian/patches/src_libgo_go_runtime.diff | 739 ++++++++++++++
debian/patches/src_libgo_go_syscall.diff | 781 ++++++++++++++
.../src_libgo_go_syscall_syscall_gnu_test.go.diff | 361 +++++++
debian/patches/src_libgo_runtime.diff | 47 +
debian/patches/src_libgo_testsuite_gotest.diff | 17 +
debian/rules.defs | 2 +-
debian/rules.patch | 16 +-
15 files changed, 3816 insertions(+), 2 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index dae7aa7..ca2bd4f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
gcc-7 (7.2.0-15) UNRELEASED; urgency=medium
* Fix libgo build on ia64 (Jason Duerstock). Closes: #881372.
+ * Port libgo to the Hurd (Svante Signell).
-- Matthias Klose <doko at debian.org> Mon, 13 Nov 2017 22:47:12 +0100
diff --git a/debian/patches/add-gnu-to-libgo-headers.diff b/debian/patches/add-gnu-to-libgo-headers.diff
new file mode 100644
index 0000000..3d1f408
--- /dev/null
+++ b/debian/patches/add-gnu-to-libgo-headers.diff
@@ -0,0 +1,1077 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/archive/tar/stat_atim.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/archive/tar/stat_atim.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/archive/tar/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 dragonfly openbsd solaris
++// +build gnu linux dragonfly openbsd solaris
+
+ package tar
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/cmd/go/signal_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/cmd/go/signal_unix.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/cmd/go/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package main
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/crypto/x509/root_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/crypto/x509/root_unix.go
++++ gcc-7-7.2.0-12.1/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 dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package x509
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/fd_poll_runtime.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/fd_poll_runtime.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/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 darwin dragonfly freebsd linux netbsd openbsd windows solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd windows solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/interface_stub.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/interface_stub.go
++++ gcc-7-7.2.0-12.1/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 nacl
++// +build nacl gnu
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/internal/socktest/switch_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/internal/socktest/switch_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package socktest
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/port_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/port_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris nacl
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris nacl
+
+ // Read system port mappings from /etc/services
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/dir_largefile.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/dir_largefile.go
++++ gcc-7-7.2.0-12.1/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 linux solaris,386 solaris,sparc
++// +build gnu linux solaris,386 solaris,sparc
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/dir_regfile.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/dir_regfile.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/os/dir_regfile.go
+@@ -5,6 +5,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
+ // +build !solaris !386
+ // +build !solaris !sparc
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/dir_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/dir_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/exec_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/exec_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/stat_atim.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/stat_atim.go
++++ gcc-7-7.2.0-12.1/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: gcc-7-7.2.0-12.1/src/libgo/go/os/stat.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/stat.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/os/stat.go
+@@ -4,6 +4,7 @@
+
+ // +build !darwin
+ // +build !freebsd
++// +build !gnu
+ // +build !linux
+ // +build !netbsd
+ // +build !openbsd
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/stat_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/stat_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/sys_uname.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/sys_uname.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/os/sys_uname.go
+@@ -4,7 +4,7 @@
+
+ // For systems which only store the hostname in uname (Solaris).
+
+-// +build solaris irix rtems
++// +build gnu solaris irix rtems
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/user/listgroups_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/user/listgroups_unix.go
++++ gcc-7-7.2.0-12.1/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: gcc-7-7.2.0-12.1/src/libgo/go/os/wait_unimp.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/wait_unimp.go
++++ gcc-7-7.2.0-12.1/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 dragonfly nacl netbsd openbsd solaris
++// +build dragonfly gnu nacl netbsd openbsd solaris
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/path/filepath/path_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/path/filepath/path_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package filepath
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/env_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/runtime/env_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package runtime
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/lock_sema.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/runtime/lock_sema.go
++++ gcc-7-7.2.0-12.1/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 darwin nacl netbsd openbsd plan9 solaris windows
++// +build darwin gnu nacl netbsd openbsd plan9 solaris windows
+
+ package runtime
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/netpoll.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/runtime/netpoll.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package runtime
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/signal_gccgo.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/runtime/signal_gccgo.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package runtime
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/signal_sighandler.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/runtime/signal_sighandler.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package runtime
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/errstr.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/errstr.go
++++ gcc-7-7.2.0-12.1/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: gcc-7-7.2.0-12.1/src/libgo/go/syscall/libcall_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/libcall_posix.go
++++ gcc-7-7.2.0-12.1/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: gcc-7-7.2.0-12.1/src/libgo/go/syscall/libcall_posix_largefile.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/libcall_posix_largefile.go
++++ gcc-7-7.2.0-12.1/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 linux solaris,386 solaris,sparc
++// +build gnu linux solaris,386 solaris,sparc
+
+ // POSIX library calls on systems which use the largefile interface.
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/libcall_posix_regfile.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/libcall_posix_regfile.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/syscall/libcall_posix_regfile.go
+@@ -2,6 +2,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
+ // +build !solaris !386
+ // +build !solaris !sparc
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/libcall_posix_utimesnano.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/libcall_posix_utimesnano.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd openbsd netbsd solaris
++// +build darwin dragonfly freebsd gnu openbsd netbsd solaris
+
+ // General POSIX version of UtimesNano.
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/cgo_resnew.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/cgo_resnew.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/cgo_resnew.go
+@@ -3,7 +3,7 @@
+ // license that can be found in the LICENSE file.
+
+ // +build cgo,!netgo
+-// +build darwin linux,!android netbsd solaris
++// +build darwin gnu linux,!android netbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/cgo_sockold.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/cgo_sockold.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/cgo_sockold.go
+@@ -3,7 +3,7 @@
+ // license that can be found in the LICENSE file.
+
+ // +build cgo,!netgo
+-// +build darwin dragonfly freebsd netbsd openbsd
++// +build darwin dragonfly freebsd gnu netbsd openbsd
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/hook_cloexec.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/hook_cloexec.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/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 freebsd linux
++// +build freebsd gnu linux
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/sock_cloexec.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/sock_cloexec.go
++++ gcc-7-7.2.0-12.1/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 freebsd linux
++// +build freebsd gnu linux
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/sockoptip_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/sockoptip_posix.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/sockoptip_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 darwin dragonfly freebsd linux netbsd openbsd windows
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/exec_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/exec_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ // Fork, exec, wait, etc.
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/exec/lp_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/exec/lp_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package exec
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/signal/signal_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/signal/signal_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package signal
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/error_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/error_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/file_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/file_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/path_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/path_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/sys_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/sys_unix.go
++++ gcc-7-7.2.0-12.1/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 dragonfly linux netbsd openbsd solaris
++// +build dragonfly gnu linux netbsd openbsd solaris
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/user/decls_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/user/decls_unix.go
++++ gcc-7-7.2.0-12.1/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: gcc-7-7.2.0-12.1/src/libgo/go/os/user/lookup_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/user/lookup_unix.go
++++ gcc-7-7.2.0-12.1/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 netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu !android,linux netbsd openbsd solaris
+ // +build cgo
+
+ package user
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/env_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/env_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ // Unix environment variables.
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/exec_bsd.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/exec_bsd.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu netbsd openbsd solaris
+
+ package syscall
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/sockcmsg_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/sockcmsg_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ // Socket control messages
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/syscall_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/syscall_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package syscall
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/time/sys_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/time/sys_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package time
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/time/zoneinfo_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/time/zoneinfo_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin,386 darwin,amd64 dragonfly freebsd linux,!android nacl netbsd openbsd solaris
++// +build 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: gcc-7-7.2.0-12.1/src/libgo/go/net/addrselect.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/addrselect.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ // Minimal RFC 6724 address selection.
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/conf.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/conf.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/dnsclient_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/dnsclient_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ // DNS client: see RFC 1035.
+ // Has to be linked into package net for Dial.
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/dnsconfig_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/dnsconfig_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ // Read system DNS config from /etc/resolv.conf
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/fd_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/fd_posix.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/fd_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/fd_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/file_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/file_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/hook_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/hook_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/iprawsock_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/iprawsock_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/ipsock_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/ipsock_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/lookup_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/lookup_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/nss.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/nss.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/sockopt_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/sockopt_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/sock_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/sock_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/tcpsockopt_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/tcpsockopt_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/tcpsockopt_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/tcpsockopt_unix.go
++++ gcc-7-7.2.0-12.1/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 freebsd linux netbsd
++// +build freebsd gnu linux netbsd
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/tcpsock_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/tcpsock_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/udpsock_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/udpsock_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/unixsock_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/unixsock_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/exec_posix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/exec_posix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/file_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/file_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/executable_procfs.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/executable_procfs.go
++++ gcc-7-7.2.0-12.1/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 openbsd dragonfly nacl
++// +build gnu linux netbsd openbsd dragonfly nacl
+
+ package os
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/timestruct.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/timestruct.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package syscall
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/cgo_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/cgo_unix.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/cgo_unix.go
+@@ -3,7 +3,7 @@
+ // license that can be found in the LICENSE file.
+
+ // +build cgo,!netgo
+-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/archive/tar/stat_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/archive/tar/stat_unix.go
++++ gcc-7-7.2.0-12.1/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 linux darwin dragonfly freebsd openbsd netbsd solaris
++// +build gnu linux darwin dragonfly freebsd openbsd netbsd solaris
+
+ package tar
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/crypto/rand/eagain.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/crypto/rand/eagain.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package rand
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/crypto/rand/rand_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/crypto/rand/rand_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd plan9 solaris
+
+ // Unix cryptographically secure pseudorandom number
+ // generator.
+Index: gcc-7-7.2.0-12.1/src/libgo/go/exp/terminal/util.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/exp/terminal/util.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/exp/terminal/util.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
++// +build gnu linux
+
+ // Package terminal provides support functions for dealing with terminals, as
+ // commonly found on UNIX systems.
+Index: gcc-7-7.2.0-12.1/src/libgo/go/mime/type_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/mime/type_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package mime
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/plugin/plugin_dlopen.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/plugin/plugin_dlopen.go
++++ gcc-7-7.2.0-12.1/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: gcc-7-7.2.0-12.1/src/libgo/go/syscall/dirent.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/dirent.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package syscall
+
+Index: gcc-7-7.2.0-12.1/src/libgo/runtime/env_posix.c
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/runtime/env_posix.c
++++ gcc-7-7.2.0-12.1/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: gcc-7-7.2.0-12.1/src/libgo/go/net/internal/socktest/sys_unix.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/internal/socktest/sys_unix.go
++++ gcc-7-7.2.0-12.1/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package socktest
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/plugin/plugin_stubs.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/plugin/plugin_stubs.go
++++ gcc-7-7.2.0-12.1/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: gcc-7-7.2.0-12.1/src/libgo/go/net/internal/socktest/sys_cloexec.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/internal/socktest/sys_cloexec.go
++++ gcc-7-7.2.0-12.1/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 freebsd linux
++// +build freebsd gnu linux
+
+ package socktest
+
diff --git a/debian/patches/add-gnu-to-libgo-test-headers.diff b/debian/patches/add-gnu-to-libgo-test-headers.diff
new file mode 100644
index 0000000..89a90a2
--- /dev/null
+++ b/debian/patches/add-gnu-to-libgo-test-headers.diff
@@ -0,0 +1,273 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/main_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/main_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/exec/lp_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/exec/lp_unix_test.go
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/go/os/os_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/os_unix_test.go
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/go/os/signal/signal_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/signal/signal_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package signal
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/crash_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/runtime/crash_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package runtime_test
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/exec_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/exec_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package syscall_test
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/runtime_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/runtime/runtime_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd plan9
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd plan9
+
+ package runtime_test
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/export_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/export_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package syscall
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/mmap_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/mmap_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd
+
+ package syscall_test
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/addrselect_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/addrselect_test.go
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/go/net/cgo_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/cgo_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/conf_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/conf_test.go
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/go/net/dnsconfig_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/dnsconfig_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/fd_posix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/fd_posix_test.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/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 darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
++// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/nss_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/nss_test.go
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/go/cmd/go/go_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/cmd/go/go_unix_test.go
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/go/net/dial_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/dial_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/main_cloexec_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/main_cloexec_test.go
++++ gcc-7-7.2.0-12.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 freebsd linux
++// +build freebsd gnu linux
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/dnsclient_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/net/dnsclient_unix_test.go
++++ gcc-7-7.2.0-12.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 darwin dragonfly freebsd linux netbsd openbsd solaris
++// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
+
+ package net
+
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/env_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/env_unix_test.go
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/go/os/error_unix_test.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/error_unix_test.go
++++ gcc-7-7.2.0-12.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
+
diff --git a/debian/patches/src_libgo_build.diff b/debian/patches/src_libgo_build.diff
new file mode 100644
index 0000000..208318b
--- /dev/null
+++ b/debian/patches/src_libgo_build.diff
@@ -0,0 +1,216 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/configure.ac
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/configure.ac
++++ gcc-7-7.2.0-12.1/src/libgo/configure.ac
+@@ -146,7 +146,7 @@ AC_SUBST(go_include)
+ # All known GOOS values. This is the union of all operating systems
+ # supported by the gofrontend and all operating systems supported by
+ # the gc toolchain.
+-ALLGOOS="android darwin dragonfly freebsd irix linux netbsd openbsd plan9 rtems solaris windows"
++ALLGOOS="android darwin dragonfly freebsd irix gnu linux netbsd openbsd plan9 rtems solaris windows"
+
+ is_darwin=no
+ is_freebsd=no
+@@ -157,6 +157,7 @@ is_openbsd=no
+ is_dragonfly=no
+ is_rtems=no
+ is_solaris=no
++is_gnu=no
+ GOOS=unknown
+ case ${host} in
+ *-*-darwin*) is_darwin=yes; GOOS=darwin ;;
+@@ -168,6 +169,7 @@ case ${host} in
+ *-*-dragonfly*) is_dragonfly=yes; GOOS=dragonfly ;;
+ *-*-rtems*) is_rtems=yes; GOOS=rtems ;;
+ *-*-solaris2*) is_solaris=yes; GOOS=solaris ;;
++ *-*-gnu*) is_gnu=yes; GOOS=gnu ;;
+ esac
+ AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
+ AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
+@@ -178,6 +180,7 @@ AM_CONDITIONAL(LIBGO_IS_OPENBSD, test $i
+ AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test $is_dragonfly = yes)
+ AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
+ AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
++AM_CONDITIONAL(LIBGO_IS_GNU, test $is_gnu = yes)
+ AM_CONDITIONAL(LIBGO_IS_BSD, test $is_darwin = yes -o $is_dragonfly = yes -o $is_freebsd = yes -o $is_netbsd = yes -o $is_openbsd = yes)
+ AC_SUBST(GOOS)
+ AC_SUBST(ALLGOOS)
+@@ -838,6 +841,14 @@ main ()
+ CFLAGS="$CFLAGS_hold"
+ LIBS="$LIBS_hold"
+ ])
++
++case ${host} in
++ *-*-gnu*)
++ LIBS="$LIBS -lpthread"
++ AC_SUBST(LIBS)
++ ;;
++esac
++
+ dnl overwrite for the mips* 64bit multilibs, fails on some buildds
+ if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
+ case "$target" in
+Index: gcc-7-7.2.0-12.1/src/libgo/Makefile.am
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/Makefile.am
++++ gcc-7-7.2.0-12.1/src/libgo/Makefile.am
+@@ -420,10 +420,14 @@ else
+ if LIBGO_IS_NETBSD
+ runtime_getncpu_file = runtime/getncpu-bsd.c
+ else
++if LIBGO_IS_GNU
++runtime_getncpu_file = runtime/getncpu-gnu.c
++else
+ runtime_getncpu_file = runtime/getncpu-none.c
+ endif
+ endif
+ endif
++endif
+ endif
+ endif
+ endif
+Index: gcc-7-7.2.0-12.1/src/libgo/Makefile.in
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/Makefile.in
++++ gcc-7-7.2.0-12.1/src/libgo/Makefile.in
+@@ -183,7 +183,8 @@ libgo_llgo_la_DEPENDENCIES = $(am__DEPEN
+ @LIBGO_IS_LINUX_FALSE at am__objects_2 = thread-sema.lo
+ @LIBGO_IS_LINUX_TRUE at am__objects_2 = thread-linux.lo
+ @LIBGO_IS_RTEMS_TRUE at am__objects_3 = rtems-task-variable-add.lo
+- at LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE at am__objects_4 = getncpu-none.lo
++ at 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 at am__objects_4 = getncpu-none.lo
++ at 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 at am__objects_4 = getncpu-gnu.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 at am__objects_4 = getncpu-bsd.lo
+ @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE at am__objects_4 = getncpu-bsd.lo
+ @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_TRUE at am__objects_4 = getncpu-solaris.lo
+@@ -768,7 +769,8 @@ toolexeclibgounicode_DATA = \
+ @LIBGO_IS_RTEMS_TRUE at rtems_task_variable_add_file = runtime/rtems-task-variable-add.c
+ @LIBGO_IS_LINUX_FALSE at runtime_thread_files = runtime/thread-sema.c
+ @LIBGO_IS_LINUX_TRUE at runtime_thread_files = runtime/thread-linux.c
+- at LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE at runtime_getncpu_file = runtime/getncpu-none.c
++ at 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 at runtime_getncpu_file = runtime/getncpu-none.c
++ at 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 at runtime_getncpu_file = runtime/getncpu-gnu.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 at 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 at runtime_getncpu_file = runtime/getncpu-bsd.c
+ @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_TRUE at runtime_getncpu_file = runtime/getncpu-solaris.c
+@@ -1086,7 +1088,7 @@ BUILDGOX = \
+ $(SHELL) $(srcdir)/mvifdiff.sh $@.tmp `echo $@ | sed -e 's/s-gox/gox/'`
+
+ GOTESTFLAGS =
+-GOBENCH =
++GOBENCH =
+
+ # Check a package.
+ CHECK = \
+@@ -1494,6 +1496,7 @@ distclean-compile:
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/aeshash.Plo at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/env_posix.Plo at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getncpu-bsd.Plo at am__quote@
++ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getncpu-gnu.Plo at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getncpu-irix.Plo at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getncpu-linux.Plo at am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getncpu-none.Plo at am__quote@
+@@ -1979,6 +1982,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
++ at 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
++ at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/getncpu-gnu.Tpo $(DEPDIR)/getncpu-gnu.Plo
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/getncpu-gnu.c' object='getncpu-gnu.lo' libtool=yes @AMDEPBACKSLASH@
++ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++ at 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-bsd.lo: runtime/getncpu-bsd.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-bsd.lo -MD -MP -MF $(DEPDIR)/getncpu-bsd.Tpo -c -o getncpu-bsd.lo `test -f 'runtime/getncpu-bsd.c' || echo '$(srcdir)/'`runtime/getncpu-bsd.c
+ @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/getncpu-bsd.Tpo $(DEPDIR)/getncpu-bsd.Plo
+Index: gcc-7-7.2.0-12.1/src/libgo/match.sh
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/match.sh
++++ gcc-7-7.2.0-12.1/src/libgo/match.sh
+@@ -113,7 +113,7 @@ for f in $gofiles; do
+ "") ;;
+ $goarch) ;;
+ $goos) ;;
+- android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
++ 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 | s390 | s390x | sparc | sparc64)
+@@ -125,7 +125,7 @@ for f in $gofiles; do
+ "") ;;
+ $goarch) ;;
+ $goos) ;;
+- android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
++ 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 | s390 | s390x | sparc | sparc64)
+Index: gcc-7-7.2.0-12.1/src/libgo/mksigtab.sh
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/mksigtab.sh
++++ gcc-7-7.2.0-12.1/src/libgo/mksigtab.sh
+@@ -29,7 +29,13 @@ echo ' _SIGINT: {_SigNotify + _SigKil
+ echo ' _SIGQUIT: {_SigNotify + _SigThrow, "SIGQUIT: quit"},'
+ echo ' _SIGILL: {_SigThrow + _SigUnblock, "SIGILL: illegal instruction"},'
+ echo ' _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
++echo ' _SIGIOT: {_SigNotify + _SigThrow, "SIGIOT: abort"},'
++else
+ echo ' _SIGABRT: {_SigNotify + _SigThrow, "SIGABRT: abort"},'
++fi
+ echo ' _SIGBUS: {_SigPanic + _SigUnblock, "SIGBUS: bus error"},'
+ echo ' _SIGFPE: {_SigPanic + _SigUnblock, "SIGFPE: floating-point exception"},'
+ echo ' _SIGKILL: {0, "SIGKILL: kill"},'
+@@ -77,6 +83,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.
+Index: gcc-7-7.2.0-12.1/src/libgo/mksysinfo.sh
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/mksysinfo.sh
++++ gcc-7-7.2.0-12.1/src/libgo/mksysinfo.sh
+@@ -46,6 +46,13 @@ grep -v '^// ' gen-sysinfo.go | \
+ egrep '#define E[A-Z0-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/bits/errno.h: #define EWOULDBLOCK EAGAIN
++if egrep 'define EWOULDBLOCK EAGAIN' gen-sysinfo.go > /dev/null 2>&1; then
++ egrep '^const EWOULDBLOCK = Errno(_EWOULDBLOCK)' ${OUT} | \
++ sed -i -e 's/_EWOULDBLOCK/_EAGAIN/' ${OUT}
++fi
++
+ # The O_xxx flags.
+ egrep '^const _(O|F|FD)_' gen-sysinfo.go | \
+ sed -e 's/^\(const \)_\([^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+@@ -61,6 +68,11 @@ if ! grep '^const F_DUPFD_CLOEXEC' ${OUT
+ echo "const F_DUPFD_CLOEXEC = 0" >> ${OUT}
+ fi
+
++# 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
++
+ # These flags can be lost on i386 GNU/Linux when using
+ # -D_FILE_OFFSET_BITS=64, because we see "#define F_SETLK F_SETLK64"
+ # before we see the definition of F_SETLK64.
+@@ -425,6 +437,11 @@ grep '^type _tms ' gen-sysinfo.go | \
+
+ # The stat type.
+ # Prefer largefile variant if available.
++# Special treatment of st_dev for GNU/Hurd
++# /usr/include/i386-gnu/bits/stat.h: #define st_dev st_fsid
++if grep 'define st_dev st_fsid' gen-sysinfo.go > /dev/null 2>&1; then
++ sed -i -e 's/; st_fsid/; st_dev/' gen-sysinfo.go
++fi
+ stat=`grep '^type _stat64 ' gen-sysinfo.go || true`
+ if test "$stat" != ""; then
+ grep '^type _stat64 ' gen-sysinfo.go
diff --git a/debian/patches/src_libgo_go_crypto.diff b/debian/patches/src_libgo_go_crypto.diff
new file mode 100644
index 0000000..fd1ffd2
--- /dev/null
+++ b/debian/patches/src_libgo_go_crypto.diff
@@ -0,0 +1,15 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/crypto/x509/root_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/crypto/x509/root_gnu.go
+@@ -0,0 +1,10 @@
++// 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.
++
++package x509
++
++// Possible certificate files; stop after finding one.
++var certFiles = []string{
++ "/etc/ssl/certs/ca-certificates.crt", // Debian/Ubuntu/Gentoo etc.
++}
diff --git a/debian/patches/src_libgo_go_go_build_syslist.go.diff b/debian/patches/src_libgo_go_go_build_syslist.go.diff
new file mode 100644
index 0000000..14896a1
--- /dev/null
+++ b/debian/patches/src_libgo_go_go_build_syslist.go.diff
@@ -0,0 +1,11 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/go/build/syslist.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/go/build/syslist.go
++++ gcc-7-7.2.0-12.1/src/libgo/go/go/build/syslist.go
+@@ -4,5 +4,5 @@
+
+ package build
+
+-const goosList = "android darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris windows zos "
++const goosList = "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 s390 s390x sparc sparc64 "
diff --git a/debian/patches/src_libgo_go_net.diff b/debian/patches/src_libgo_go_net.diff
new file mode 100644
index 0000000..b66e633
--- /dev/null
+++ b/debian/patches/src_libgo_go_net.diff
@@ -0,0 +1,209 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/cgo_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/cgo_gnu.go
+@@ -0,0 +1,16 @@
++// 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.
++
++// +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-7-7.2.0-12.1/src/libgo/go/net/sendfile_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/sendfile_gnu.go
+@@ -0,0 +1,79 @@
++// 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.
++
++package net
++
++import (
++ "io"
++ "os"
++ "syscall"
++)
++
++// maxSendfileSize is the largest chunk size we ask the kernel to copy
++// at a time.
++const maxSendfileSize int = 4 << 20
++
++// 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
++ }
++
++ if err := c.writeLock(); err != nil {
++ return 0, err, true
++ }
++ defer c.writeUnlock()
++
++ dst := c.sysfd
++ src := int(f.Fd())
++ 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 = c.pd.waitWrite(); 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
++ }
++ }
++ if lr != nil {
++ lr.N = remain
++ }
++ if err != nil {
++ err = os.NewSyscallError("sendfile", err)
++ }
++ return written, err, written > 0
++}
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/sock_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/sock_gnu.go
+@@ -0,0 +1,14 @@
++// 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.
++
++// +build gnu
++
++package net
++
++import "syscall"
++
++func maxListenerBacklog() int {
++ // From /usr/include/i386-gnu/bits/socket.h
++ return syscall.SOMAXCONN
++}
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/sockopt_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/sockopt_gnu.go
+@@ -0,0 +1,45 @@
++// 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.
++
++// +build gnu
++
++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.
++ if err := syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1); err != nil {
++ return os.NewSyscallError("setsockopt", err)
++ }
++ // Allow reuse of recently-used ports.
++ // This option is supported only in descendants of 4.4BSD,
++ // to make an effective multicast application that requires
++ // quick draw possible.
++ // Not supported on GNU/Hurd
++ //if syscall.SO_REUSEPORT != 0 {
++ // return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEPORT, 1))
++ //}
++ return nil
++}
+Index: gcc-7-7.2.0-12.1/src/libgo/go/net/sockoptip_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/net/sockoptip_gnu.go
+@@ -0,0 +1,30 @@
++// 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.
++
++// +build gnu
++
++package net
++
++import (
++ "os"
++ "syscall"
++)
++
++func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
++ ip, err := interfaceToIPv4Addr(ifi)
++ if err != nil {
++ return os.NewSyscallError("setsockopt", err)
++ }
++ var a [4]byte
++ copy(a[:], ip.To4())
++ if err := fd.incref(); err != nil {
++ return err
++ }
++ defer fd.decref()
++ return os.NewSyscallError("setsockopt", syscall.SetsockoptInet4Addr(fd.sysfd, syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, a))
++}
++
++func setIPv4MulticastLoopback(fd *netFD, v bool) error {
++ return syscall.ENOPROTOOPT
++}
diff --git a/debian/patches/src_libgo_go_os.diff b/debian/patches/src_libgo_go_os.diff
new file mode 100644
index 0000000..3559a54
--- /dev/null
+++ b/debian/patches/src_libgo_go_os.diff
@@ -0,0 +1,53 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/os/executable_procfs.go
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/os/executable_procfs.go
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/go/os/pipe_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/os/pipe_gnu.go
+@@ -0,0 +1,35 @@
++// 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 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
++}
diff --git a/debian/patches/src_libgo_go_runtime.diff b/debian/patches/src_libgo_go_runtime.diff
new file mode 100644
index 0000000..640d52a
--- /dev/null
+++ b/debian/patches/src_libgo_go_runtime.diff
@@ -0,0 +1,739 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/netpoll_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/runtime/netpoll_gnu.go
+@@ -0,0 +1,32 @@
++// 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.
++// +build gnu
++
++package runtime
++
++func netpollinit() {
++ return
++}
++
++func netpollopen(fd uintptr, pd *pollDesc) int32 {
++ return 0
++}
++
++func netpollclose(fd uintptr) int32 {
++ return 0
++}
++
++func netpollarm(pd *pollDesc, mode int) {
++ throw("unused")
++}
++
++// polls for ready network connections
++// returns list of goroutines that become runnable
++func netpoll(block bool) (gp *g) {
++ // Implementation for platforms that do not support
++ // integrated network poller.
++ return
++}
+Index: gcc-7-7.2.0-12.1/src/libgo/go/runtime/os_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/runtime/os_gnu.go
+@@ -0,0 +1,86 @@
++// 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.
++
++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-7-7.2.0-12.1/src/libgo/go/runtime/signal_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/runtime/signal_gnu.go
+@@ -0,0 +1,606 @@
++// 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 gnu
++
++package runtime
++
++import (
++ "runtime/internal/sys"
++ "unsafe"
++)
++
++// For gccgo's C code to call:
++//go:linkname initsig runtime.initsig
++//go:linkname crash runtime.crash
++//go:linkname resetcpuprofiler runtime.resetcpuprofiler
++//go:linkname sigtrampgo runtime.sigtrampgo
++
++//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.
++//
++// Signal forwarding is currently available only on Darwin and Linux.
++var fwdSig [_NSIG]uintptr
++
++// 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
++ }
++ 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
++ }
++
++ t.flags |= _SigHandling
++ 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 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.
++ if (isarchive || islibrary) && t.flags&_SigPanic == 0 {
++ return false
++ }
++
++ return true
++}
++
++func sigenable(sig uint32) {
++ if sig >= uint32(len(sigtable)) {
++ return
++ }
++
++ t := &sigtable[sig]
++ if t.flags&_SigNotify != 0 {
++ ensureSigM()
++ enableSigChan <- sig
++ <-maskUpdatedChan
++ if t.flags&_SigHandling == 0 {
++ t.flags |= _SigHandling
++ fwdSig[sig] = getsig(sig)
++ setsig(sig, getSigtramp())
++ }
++ }
++}
++
++func sigdisable(sig uint32) {
++ if sig >= uint32(len(sigtable)) {
++ 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) {
++ t.flags &^= _SigHandling
++ setsig(sig, fwdSig[sig])
++ }
++ }
++}
++
++func sigignore(sig uint32) {
++ if sig >= uint32(len(sigtable)) {
++ return
++ }
++
++ t := &sigtable[sig]
++ if t.flags&_SigNotify != 0 {
++ t.flags &^= _SigHandling
++ setsig(sig, _SIG_IGN)
++ }
++}
++
++func resetcpuprofiler(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.
++//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)
++ sigprofNonGoPC(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.
++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) {
++ setsig(sig, _SIG_DFL)
++ unblocksig(sig)
++ 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 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 = 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 sys.PtrSize == 8 {
++ 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 sigtable[i].flags&_SigUnblock != 0 {
++ 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 {
++ 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")
++}
++
++// 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 := fwdSig[sig]
++
++ if !signalsOK {
++ // The only way we can get here is if we are in a
++ // library or archive, we installed a signal handler
++ // at program startup, but the Go runtime has not yet
++ // been initialized.
++ if fwdFn == _SIG_DFL {
++ dieFromSignal(sig)
++ } else {
++ sigfwd(fwdFn, sig, info, ctx)
++ }
++ return true
++ }
++
++ flags := sigtable[sig].flags
++
++ // If there is no handler to forward to, no need to forward.
++ if fwdFn == _SIG_DFL {
++ return false
++ }
++
++ // If we aren't handling the signal, forward it.
++ if flags&_SigHandling == 0 {
++ sigfwd(fwdFn, sig, info, ctx)
++ return true
++ }
++
++ // Only forward synchronous signals.
++ c := sigctxt{info, ctx}
++ if c.sigcode() == _SI_USER || flags&_SigPanic == 0 {
++ 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 (i.e., m.curg.syscallsp == 0).
++ g := getg()
++ if g != nil && g.m != nil && g.m.curg != nil && g.m.curg.syscallsp == 0 {
++ 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 sigtable[i].flags&_SigUnblock != 0 {
++ 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
++func unminitSignals() {
++ if getg().m.newSigstack {
++ signalstack(nil, 0)
++ }
++}
diff --git a/debian/patches/src_libgo_go_syscall.diff b/debian/patches/src_libgo_go_syscall.diff
new file mode 100644
index 0000000..6e58ff3
--- /dev/null
+++ b/debian/patches/src_libgo_go_syscall.diff
@@ -0,0 +1,781 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/errstr_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/syscall/errstr_gnu.go
+@@ -0,0 +1,31 @@
++// 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.
++
++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-7-7.2.0-12.1/src/libgo/go/syscall/libcall_gnu_386.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/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-7-7.2.0-12.1/src/libgo/go/syscall/libcall_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/syscall/libcall_gnu.go
+@@ -0,0 +1,181 @@
++// 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.
++
++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-7-7.2.0-12.1/src/libgo/go/syscall/libcall_posix_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/syscall/libcall_posix_gnu.go
+@@ -0,0 +1,402 @@
++// 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.
++// 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 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.
++
++// +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 Exit(code int)
++//exit(code _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-7-7.2.0-12.1/src/libgo/go/syscall/socket_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/syscall/socket_gnu.go
+@@ -0,0 +1,90 @@
++// 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.
++
++// +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-7-7.2.0-12.1/src/libgo/go/syscall/syscall_gnu.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.1/src/libgo/go/syscall/syscall_gnu.go
+@@ -0,0 +1,23 @@
++// 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.
++
++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-7-7.2.0-12.1/src/libgo/go/syscall/wait.c
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/go/syscall/wait.c
++++ gcc-7-7.2.0-12.1/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"
diff --git a/debian/patches/src_libgo_go_syscall_syscall_gnu_test.go.diff b/debian/patches/src_libgo_go_syscall_syscall_gnu_test.go.diff
new file mode 100644
index 0000000..7947fd0
--- /dev/null
+++ b/debian/patches/src_libgo_go_syscall_syscall_gnu_test.go.diff
@@ -0,0 +1,361 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/go/syscall/syscall_gnu_test.go
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.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")
++ }
++}
diff --git a/debian/patches/src_libgo_runtime.diff b/debian/patches/src_libgo_runtime.diff
new file mode 100644
index 0000000..8d6e47b
--- /dev/null
+++ b/debian/patches/src_libgo_runtime.diff
@@ -0,0 +1,47 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/runtime/getncpu-gnu.c
+===================================================================
+--- /dev/null
++++ gcc-7-7.2.0-12.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-7-7.2.0-12.1/src/libgo/runtime/go-caller.c
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/runtime/go-caller.c
++++ gcc-7-7.2.0-12.1/src/libgo/runtime/go-caller.c
+@@ -108,7 +108,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-7-7.2.0-12.1/src/libgo/runtime/runtime_c.c
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/runtime/runtime_c.c
++++ gcc-7-7.2.0-12.1/src/libgo/runtime/runtime_c.c
+@@ -75,7 +75,7 @@ runtime_fastrand(void)
+ int64
+ runtime_cputicks(void)
+ {
+-#if defined(__386__) || defined(__x86_64__)
++#if defined(__i386__) || defined(__x86_64__)
+ uint32 low, high;
+ asm("rdtsc" : "=a" (low), "=d" (high));
+ return (int64)(((uint64)high << 32) | (uint64)low);
diff --git a/debian/patches/src_libgo_testsuite_gotest.diff b/debian/patches/src_libgo_testsuite_gotest.diff
new file mode 100644
index 0000000..e9f1496
--- /dev/null
+++ b/debian/patches/src_libgo_testsuite_gotest.diff
@@ -0,0 +1,17 @@
+Index: gcc-7-7.2.0-12.1/src/libgo/testsuite/gotest
+===================================================================
+--- gcc-7-7.2.0-12.1.orig/src/libgo/testsuite/gotest
++++ gcc-7-7.2.0-12.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
diff --git a/debian/rules.defs b/debian/rules.defs
index e651d56..ca04995 100644
--- a/debian/rules.defs
+++ b/debian/rules.defs
@@ -804,7 +804,7 @@ go_no_cpus := avr arm hppa sh4 m68k
ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick natty oneiric))
go_no_cpus := $(filter-out arm, $(go_no_cpus))
endif
-go_no_systems := gnu kfreebsd-gnu
+go_no_systems := kfreebsd
ifneq ($(with_base_only),yes)
ifneq ($(separate_lang),yes)
diff --git a/debian/rules.patch b/debian/rules.patch
index d84c75a..e2b14cc 100644
--- a/debian/rules.patch
+++ b/debian/rules.patch
@@ -79,7 +79,6 @@ debian_patches += \
cuda-float128 \
libgo-ia64 \
-
# $(if $(filter yes, $(DEB_CROSS)),,gcc-print-file-name) \
# libstdc++-nothumb-check \
@@ -235,6 +234,21 @@ 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
debian_patches += skip-bootstrap-multilib
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/gcc-7.git
More information about the Reproducible-commits
mailing list