[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