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

Bug#904289: marked as done (gcc-snapshot: FTBFS on hurd-i386)



Your message dated Thu, 30 Jan 2020 19:40:10 +0100
with message-id <237e3750-cf70-8b98-9aae-1110c0ba1576@debian.org>
and subject line closing outdated issue
has caused the Debian Bug report #904289,
regarding gcc-snapshot: FTBFS on hurd-i386
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
904289: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=904289
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Source: gcc-snapshot
Version: 20180721-1
Severity: important
Tags: patch
User: debian-hurd@lists.debian.org
Usertags: hurd

Hi,

gcc-snapshot FTBFS on hurd-i386 due to a few outdated patches for
gccgo. Attached are all 12 patches refreshed against gcc-snapshot
20180721-1 for completeness.

Built fine on a hurd-i386 test box.

Thanks!
Index: gcc-snapshot-20180721/src/libgo/go/cmd/go/internal/base/signal_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/cmd/go/internal/base/signal_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/cmd/go/internal/base/signal_unix.go
@@ -1,8 +1,9 @@
+
 // Copyright 2012 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package base
 
Index: gcc-snapshot-20180721/src/libgo/go/crypto/x509/root_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/crypto/x509/root_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/crypto/x509/root_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package x509
 
Index: gcc-snapshot-20180721/src/libgo/go/net/interface_stub.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/interface_stub.go
+++ gcc-snapshot-20180721/src/libgo/go/net/interface_stub.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix nacl
+// +build aix nacl gnu
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/internal/socktest/switch_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/internal/socktest/switch_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/internal/socktest/switch_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package socktest
 
Index: gcc-snapshot-20180721/src/libgo/go/net/port_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/port_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/port_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris nacl
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris nacl
 
 // Read system port mappings from /etc/services
 
Index: gcc-snapshot-20180721/src/libgo/go/os/dir_largefile.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/dir_largefile.go
+++ gcc-snapshot-20180721/src/libgo/go/os/dir_largefile.go
@@ -5,7 +5,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux solaris,386 solaris,sparc
+// +build aix gnu linux solaris,386 solaris,sparc
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/dir_regfile.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/dir_regfile.go
+++ gcc-snapshot-20180721/src/libgo/go/os/dir_regfile.go
@@ -6,6 +6,7 @@
 // license that can be found in the LICENSE file.
 
 // +build !aix
+// +build !gnu
 // +build !linux
 // +build !solaris !386
 // +build !solaris !sparc
Index: gcc-snapshot-20180721/src/libgo/go/os/dir_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/dir_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/dir_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/exec_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/exec_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/exec_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/stat_atim.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/stat_atim.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/os/stat_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/stat_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/stat_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/sys_uname.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/sys_uname.go
+++ gcc-snapshot-20180721/src/libgo/go/os/sys_uname.go
@@ -4,7 +4,7 @@
 
 // For systems which only store the hostname in uname (Solaris).
 
-// +build aix solaris irix rtems
+// +build aix gnu solaris irix rtems
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/user/listgroups_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/user/listgroups_unix.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/os/wait_unimp.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/wait_unimp.go
+++ gcc-snapshot-20180721/src/libgo/go/os/wait_unimp.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly nacl netbsd openbsd solaris
+// +build aix darwin dragonfly gnu nacl netbsd openbsd solaris
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/path/filepath/path_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/path/filepath/path_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/path/filepath/path_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package filepath
 
Index: gcc-snapshot-20180721/src/libgo/go/runtime/env_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/runtime/env_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/runtime/env_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package runtime
 
Index: gcc-snapshot-20180721/src/libgo/go/runtime/lock_sema.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/runtime/lock_sema.go
+++ gcc-snapshot-20180721/src/libgo/go/runtime/lock_sema.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin nacl netbsd openbsd plan9 solaris windows
+// +build aix darwin gnu nacl netbsd openbsd plan9 solaris windows
 
 package runtime
 
Index: gcc-snapshot-20180721/src/libgo/go/runtime/netpoll.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/runtime/netpoll.go
+++ gcc-snapshot-20180721/src/libgo/go/runtime/netpoll.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package runtime
 
Index: gcc-snapshot-20180721/src/libgo/go/runtime/signal_gccgo.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/runtime/signal_gccgo.go
+++ gcc-snapshot-20180721/src/libgo/go/runtime/signal_gccgo.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package runtime
 
Index: gcc-snapshot-20180721/src/libgo/go/runtime/signal_sighandler.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/runtime/signal_sighandler.go
+++ gcc-snapshot-20180721/src/libgo/go/runtime/signal_sighandler.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package runtime
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/errstr.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/errstr.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/syscall/libcall_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/libcall_posix.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/syscall/libcall_posix_largefile.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/libcall_posix_largefile.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/libcall_posix_largefile.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux solaris,386 solaris,sparc
+// +build aix gnu linux solaris,386 solaris,sparc
 
 // POSIX library calls on systems which use the largefile interface.
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/libcall_posix_regfile.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/libcall_posix_regfile.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/libcall_posix_regfile.go
@@ -3,6 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build !aix
+// +build !gnu
 // +build !linux
 // +build !solaris !386
 // +build !solaris !sparc
Index: gcc-snapshot-20180721/src/libgo/go/syscall/libcall_posix_utimesnano.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/libcall_posix_utimesnano.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/libcall_posix_utimesnano.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd openbsd netbsd solaris
+// +build aix darwin dragonfly freebsd gnu openbsd netbsd solaris
 
 // General POSIX version of UtimesNano.
 
Index: gcc-snapshot-20180721/src/libgo/go/net/cgo_resnew.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/cgo_resnew.go
+++ gcc-snapshot-20180721/src/libgo/go/net/cgo_resnew.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build cgo,!netgo
-// +build aix darwin linux,!android netbsd solaris
+// +build aix darwin gnu linux,!android netbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/cgo_sockold.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/cgo_sockold.go
+++ gcc-snapshot-20180721/src/libgo/go/net/cgo_sockold.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build cgo,!netgo
-// +build aix darwin dragonfly freebsd netbsd openbsd
+// +build aix darwin dragonfly freebsd gnu netbsd openbsd
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/fd_poll_runtime.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/fd_poll_runtime.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/fd_poll_runtime.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd windows solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd windows solaris
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/hook_cloexec.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/hook_cloexec.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/hook_cloexec.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/fd_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/fd_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/fd_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/net/sock_cloexec.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/sock_cloexec.go
+++ gcc-snapshot-20180721/src/libgo/go/net/sock_cloexec.go
@@ -5,7 +5,7 @@
 // This file implements sysSocket and accept for platforms that
 // provide a fast path for setting SetNonblock and CloseOnExec.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/exec_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/exec_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/exec_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // Fork, exec, wait, etc.
 
Index: gcc-snapshot-20180721/src/libgo/go/os/exec/lp_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/exec/lp_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/exec/lp_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package exec
 
Index: gcc-snapshot-20180721/src/libgo/go/os/signal/signal_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/signal/signal_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/signal/signal_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package signal
 
Index: gcc-snapshot-20180721/src/libgo/go/os/error_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/error_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/error_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/file_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/file_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/file_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/path_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/path_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/path_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/sys_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/sys_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/sys_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix dragonfly linux netbsd openbsd solaris
+// +build aix dragonfly gnu linux netbsd openbsd solaris
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/user/decls_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/user/decls_unix.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/os/user/lookup_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/user/lookup_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/user/lookup_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd !android,linux nacl netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu !android,linux nacl netbsd openbsd solaris
 // +build !cgo
 
 package user
Index: gcc-snapshot-20180721/src/libgo/go/syscall/env_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/env_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/env_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 // Unix environment variables.
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/exec_bsd.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/exec_bsd.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/exec_bsd.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu netbsd openbsd solaris
 
 package syscall
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/sockcmsg_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/sockcmsg_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/sockcmsg_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // Socket control messages
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/syscall_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/syscall_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/syscall_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package syscall
 
Index: gcc-snapshot-20180721/src/libgo/go/time/sys_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/time/sys_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/time/sys_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package time
 
Index: gcc-snapshot-20180721/src/libgo/go/time/zoneinfo_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/time/zoneinfo_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/time/zoneinfo_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin,386 darwin,amd64 dragonfly freebsd linux,!android nacl netbsd openbsd solaris
+// +build aix darwin,386 darwin,amd64 dragonfly freebsd gnu linux,!android nacl netbsd openbsd solaris
 
 // Parse "zoneinfo" time zone file.
 // This is a fairly standard file format used on OS X, Linux, BSD, Sun, and others.
Index: gcc-snapshot-20180721/src/libgo/go/net/addrselect.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/addrselect.go
+++ gcc-snapshot-20180721/src/libgo/go/net/addrselect.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // Minimal RFC 6724 address selection.
 
Index: gcc-snapshot-20180721/src/libgo/go/net/conf.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/conf.go
+++ gcc-snapshot-20180721/src/libgo/go/net/conf.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/dnsclient_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/dnsclient_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/dnsclient_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // DNS client: see RFC 1035.
 // Has to be linked into package net for Dial.
Index: gcc-snapshot-20180721/src/libgo/go/net/dnsconfig_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/dnsconfig_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/dnsconfig_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 // Read system DNS config from /etc/resolv.conf
 
Index: gcc-snapshot-20180721/src/libgo/go/net/fd_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/fd_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/fd_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/file_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/file_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/file_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/hook_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/hook_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/hook_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/iprawsock_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/iprawsock_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/iprawsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/ipsock_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/ipsock_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/ipsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/lookup_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/lookup_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/lookup_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/nss.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/nss.go
+++ gcc-snapshot-20180721/src/libgo/go/net/nss.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/sockopt_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/sockopt_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/sockopt_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/sock_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/sock_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/sock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/tcpsockopt_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/tcpsockopt_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/tcpsockopt_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/tcpsockopt_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/tcpsockopt_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/tcpsockopt_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix freebsd linux netbsd
+// +build aix freebsd gnu linux netbsd
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/tcpsock_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/tcpsock_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/tcpsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/udpsock_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/udpsock_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/udpsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/unixsock_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/unixsock_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/unixsock_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/os/exec_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/exec_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/exec_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/file_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/file_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/file_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/os/executable_procfs.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/executable_procfs.go
+++ gcc-snapshot-20180721/src/libgo/go/os/executable_procfs.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build linux netbsd dragonfly nacl
+// +build gnu linux netbsd dragonfly nacl
 
 package os
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/timestruct.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/timestruct.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/timestruct.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package syscall
 
Index: gcc-snapshot-20180721/src/libgo/go/net/cgo_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/cgo_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/cgo_unix.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build cgo,!netgo
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/archive/tar/stat_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/archive/tar/stat_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/archive/tar/stat_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux darwin dragonfly freebsd openbsd netbsd solaris
+// +build aix gnu linux darwin dragonfly freebsd openbsd netbsd solaris
 
 package tar
 
Index: gcc-snapshot-20180721/src/libgo/go/crypto/rand/eagain.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/crypto/rand/eagain.go
+++ gcc-snapshot-20180721/src/libgo/go/crypto/rand/eagain.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package rand
 
Index: gcc-snapshot-20180721/src/libgo/go/crypto/rand/rand_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/crypto/rand/rand_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/crypto/rand/rand_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd plan9 solaris
 
 // Unix cryptographically secure pseudorandom number
 // generator.
Index: gcc-snapshot-20180721/src/libgo/go/mime/type_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/mime/type_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/mime/type_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package mime
 
Index: gcc-snapshot-20180721/src/libgo/go/plugin/plugin_dlopen.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/plugin/plugin_dlopen.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/syscall/dirent.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/dirent.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/dirent.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package syscall
 
Index: gcc-snapshot-20180721/src/libgo/runtime/env_posix.c
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/runtime/env_posix.c
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/net/internal/socktest/sys_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/internal/socktest/sys_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/internal/socktest/sys_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package socktest
 
Index: gcc-snapshot-20180721/src/libgo/go/plugin/plugin_stubs.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/plugin/plugin_stubs.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/net/internal/socktest/sys_cloexec.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/internal/socktest/sys_cloexec.go
+++ gcc-snapshot-20180721/src/libgo/go/net/internal/socktest/sys_cloexec.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package socktest
 
Index: gcc-snapshot-20180721/src/libgo/go/os/user/cgo_lookup_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/user/cgo_lookup_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/os/user/cgo_lookup_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd !android,linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu !android,linux netbsd openbsd solaris
 // +build cgo
 
 package user
Index: gcc-snapshot-20180721/src/libgo/go/net/error_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/error_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/net/error_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/fd_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/fd_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/fd_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/forkpipe_bsd.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/forkpipe_bsd.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/forkpipe_bsd.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly netbsd openbsd solaris
+// +build aix darwin dragonfly gnu netbsd openbsd solaris
 
 package syscall
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/hook_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/hook_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/hook_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/sock_cloexec.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/sock_cloexec.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/sock_cloexec.go
@@ -5,7 +5,7 @@
 // This file implements sysSocket and accept for platforms that
 // provide a fast path for setting SetNonblock and CloseOnExec.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/sockopt.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/sockopt.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/sockopt.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/sockoptip.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/sockoptip.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/sockoptip.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/sockopt_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/sockopt_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/sockopt_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package poll
 
Index: gcc-snapshot-20180721/src/libgo/go/archive/tar/stat_actime1.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/archive/tar/stat_actime1.go
+++ gcc-snapshot-20180721/src/libgo/go/archive/tar/stat_actime1.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux dragonfly openbsd solaris
+// +build aix gnu linux dragonfly openbsd solaris
 
 package tar
 
Index: gcc-snapshot-20180721/src/libgo/go/golang_org/x/net/internal/nettest/helper_nobsd.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/golang_org/x/net/internal/nettest/helper_nobsd.go
+++ gcc-snapshot-20180721/src/libgo/go/golang_org/x/net/internal/nettest/helper_nobsd.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix linux solaris
+// +build aix gnu linux solaris
 
 package nettest
 
Index: gcc-snapshot-20180721/src/libgo/go/golang_org/x/net/internal/nettest/helper_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/golang_org/x/net/internal/nettest/helper_posix.go
+++ gcc-snapshot-20180721/src/libgo/go/golang_org/x/net/internal/nettest/helper_posix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package nettest
 
Index: gcc-snapshot-20180721/src/libgo/go/golang_org/x/net/internal/nettest/helper_unix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/golang_org/x/net/internal/nettest/helper_unix.go
+++ gcc-snapshot-20180721/src/libgo/go/golang_org/x/net/internal/nettest/helper_unix.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package nettest
 
Index: gcc-snapshot-20180721/src/libgo/go/net/sockoptip_posix.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/sockoptip_posix.go
+++ gcc-snapshot-20180721/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 aix darwin dragonfly freebsd linux netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris windows
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/os/signal/internal/pty/pty.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/signal/internal/pty/pty.go
+++ gcc-snapshot-20180721/src/libgo/go/os/signal/internal/pty/pty.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux,!android netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux,!android netbsd openbsd solaris
 
 // Package pty is a simple pseudo-terminal package for Unix systems,
 // implemented by calling C functions via cgo.
Index: gcc-snapshot-20180721/src/libgo/go/net/main_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/main_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/net/main_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/os/exec/lp_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/exec/lp_unix_test.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/os/os_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/os_unix_test.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/os/signal/signal_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/signal/signal_test.go
+++ gcc-snapshot-20180721/src/libgo/go/os/signal/signal_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package signal
 
Index: gcc-snapshot-20180721/src/libgo/go/runtime/crash_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/runtime/crash_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/runtime/crash_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package runtime_test
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/exec_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/exec_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/exec_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package syscall_test
 
Index: gcc-snapshot-20180721/src/libgo/go/runtime/runtime_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/runtime/runtime_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/runtime/runtime_unix_test.go
@@ -6,7 +6,7 @@
 // We need a fast system call to provoke the race,
 // and Close(-1) is nearly universally fast.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd plan9
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd plan9
 
 package runtime_test
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/export_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/export_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/export_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package syscall
 
Index: gcc-snapshot-20180721/src/libgo/go/syscall/mmap_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/syscall/mmap_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/syscall/mmap_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd
 
 package syscall_test
 
Index: gcc-snapshot-20180721/src/libgo/go/net/addrselect_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/addrselect_test.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/net/cgo_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/cgo_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/net/cgo_unix_test.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build cgo,!netgo
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/conf_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/conf_test.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/net/dnsconfig_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/dnsconfig_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/net/dnsconfig_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/nss_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/nss_test.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/cmd/go/go_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/cmd/go/go_unix_test.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/net/dial_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/dial_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/net/dial_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/main_cloexec_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/main_cloexec_test.go
+++ gcc-snapshot-20180721/src/libgo/go/net/main_cloexec_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build dragonfly freebsd linux
+// +build dragonfly freebsd gnu linux
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/net/dnsclient_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/net/dnsclient_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/net/dnsclient_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package net
 
Index: gcc-snapshot-20180721/src/libgo/go/os/env_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/env_unix_test.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/os/error_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/error_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/os/error_unix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
+// +build darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris
 
 package os_test
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/export_posix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/export_posix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/export_posix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 // Export guts for testing on posix.
 // Since testing imports os and os imports internal/poll,
Index: gcc-snapshot-20180721/src/libgo/go/runtime/export_unix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/runtime/export_unix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/runtime/export_unix_test.go
@@ -1,8 +1,9 @@
+
 // Copyright 2017 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
+// +build aix darwin dragonfly freebsd gnu linux netbsd openbsd solaris
 
 package runtime
 
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/fd_posix_test.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/internal/poll/fd_posix_test.go
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/fd_posix_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris windows
+// +build aix darwin dragonfly freebsd gnu linux nacl netbsd openbsd solaris windows
 
 package poll_test
 
Index: gcc-snapshot-20180721/src/gcc/config/i386/gnu.h
===================================================================
--- gcc-snapshot-20180721.orig/src/gcc/config/i386/gnu.h
+++ gcc-snapshot-20180721/src/gcc/config/i386/gnu.h
@@ -37,11 +37,14 @@ along with GCC.  If not, see <http://www
 
 #ifdef TARGET_LIBC_PROVIDES_SSP
 
-/* Not supported yet.  */
-# undef TARGET_THREAD_SSP_OFFSET
-
-/* Not supported yet.  */
-# undef TARGET_CAN_SPLIT_STACK
-# undef TARGET_THREAD_SPLIT_STACK_OFFSET
+/* i386 glibc provides __stack_chk_guard in %gs:0x14.  */
+#define TARGET_THREAD_SSP_OFFSET        0x14
 
+/* We only build the -fsplit-stack support in libgcc if the
+   assembler has full support for the CFI directives.  */
+#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
+#define TARGET_CAN_SPLIT_STACK
+#endif
+/* We steal the last transactional memory word.  */
+#define TARGET_THREAD_SPLIT_STACK_OFFSET 0x30
 #endif
Index: gcc-snapshot-20180721/src/libgo/configure.ac
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/configure.ac
+++ gcc-snapshot-20180721/src/libgo/configure.ac
@@ -154,7 +154,7 @@ AC_SUBST(go_include)
 # All known GOOS values.  This is the union of all operating systems
 # supported by the gofrontend and all operating systems supported by
 # the gc toolchain.
-ALLGOOS="aix android darwin dragonfly freebsd irix linux netbsd openbsd plan9 rtems solaris windows"
+ALLGOOS="aix android darwin dragonfly freebsd irix gnu linux netbsd openbsd plan9 rtems solaris windows"
 
 is_darwin=no
 is_freebsd=no
@@ -166,6 +166,7 @@ is_dragonfly=no
 is_rtems=no
 is_solaris=no
 is_aix=no
+is_gnu=no
 GOOS=unknown
 case ${host} in
   *-*-darwin*)   is_darwin=yes;  GOOS=darwin ;;
@@ -178,6 +179,7 @@ case ${host} in
   *-*-rtems*)    is_rtems=yes;   GOOS=rtems ;;
   *-*-solaris2*) is_solaris=yes; GOOS=solaris ;;
   *-*-aix*)      is_aix=yes;     GOOS=aix ;;
+  *-*-gnu*)      is_gnu=yes;     GOOS=gnu ;;
 esac
 AM_CONDITIONAL(LIBGO_IS_DARWIN, test $is_darwin = yes)
 AM_CONDITIONAL(LIBGO_IS_FREEBSD, test $is_freebsd = yes)
@@ -189,6 +191,7 @@ AM_CONDITIONAL(LIBGO_IS_DRAGONFLY, test
 AM_CONDITIONAL(LIBGO_IS_RTEMS, test $is_rtems = yes)
 AM_CONDITIONAL(LIBGO_IS_SOLARIS, test $is_solaris = yes)
 AM_CONDITIONAL(LIBGO_IS_AIX, test $is_aix = yes)
+AM_CONDITIONAL(LIBGO_IS_GNU, test $is_gnu = yes)
 AM_CONDITIONAL(LIBGO_IS_BSD, test $is_darwin = yes -o $is_dragonfly = yes -o $is_freebsd = yes -o $is_netbsd = yes -o $is_openbsd = yes)
 AC_SUBST(GOOS)
 AC_SUBST(ALLGOOS)
@@ -783,6 +786,13 @@ main ()
 CFLAGS="$CFLAGS_hold"
 LIBS="$LIBS_hold"
 ])
+case ${host} in
+  *-*-gnu*)
+  LIBS="$LIBS -lpthread"
+  AC_SUBST(LIBS)
+  ;;
+esac
+
 if test "$libgo_cv_lib_setcontext_clobbers_tls" = "yes"; then
   AC_DEFINE(SETCONTEXT_CLOBBERS_TLS, 1,
 	    [Define if setcontext clobbers TLS variables])
Index: gcc-snapshot-20180721/src/libgo/Makefile.am
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/Makefile.am
+++ gcc-snapshot-20180721/src/libgo/Makefile.am
@@ -429,10 +429,14 @@ else
 if LIBGO_IS_AIX
 runtime_getncpu_file = runtime/getncpu-aix.c
 else
+if LIBGO_IS_GNU
+runtime_getncpu_file = runtime/getncpu-gnu.c
+else
 runtime_getncpu_file = runtime/getncpu-none.c
 endif
 endif
 endif
+endif
 endif
 endif
 endif
Index: gcc-snapshot-20180721/src/libgo/Makefile.in
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/Makefile.in
+++ gcc-snapshot-20180721/src/libgo/Makefile.in
@@ -186,7 +186,8 @@ am__DEPENDENCIES_4 = $(am__DEPENDENCIES_
 	$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_3)
 libgo_llgo_la_DEPENDENCIES = $(am__DEPENDENCIES_4)
 @LIBGO_IS_RTEMS_TRUE@am__objects_1 = rtems-task-variable-add.lo
-@LIBGO_IS_AIX_FALSE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = getncpu-none.lo
+@LIBGO_IS_AIX_FALSE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_GNU_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = getncpu-none.lo
+@LIBGO_IS_AIX_FALSE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_GNU_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = getncpu-gnu.lo
 @LIBGO_IS_AIX_TRUE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = getncpu-aix.lo
 @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_TRUE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = getncpu-bsd.lo
 @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = getncpu-bsd.lo
@@ -762,7 +763,8 @@ noinst_DATA = golang_org/x/net/internal/
 	zdefaultcc.go
 @LIBGO_IS_RTEMS_FALSE@rtems_task_variable_add_file = 
 @LIBGO_IS_RTEMS_TRUE@rtems_task_variable_add_file = runtime/rtems-task-variable-add.c
-@LIBGO_IS_AIX_FALSE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-none.c
+@LIBGO_IS_AIX_FALSE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_GNU_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-none.c
+@LIBGO_IS_AIX_FALSE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_GNU_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-gnu.c
 @LIBGO_IS_AIX_TRUE@@LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_FALSE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-aix.c
 @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_FALSE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_NETBSD_TRUE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-bsd.c
 @LIBGO_IS_DARWIN_FALSE@@LIBGO_IS_FREEBSD_TRUE@@LIBGO_IS_IRIX_FALSE@@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@runtime_getncpu_file = runtime/getncpu-bsd.c
@@ -1191,6 +1193,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env_posix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-aix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-bsd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-gnu.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-irix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-linux.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getncpu-none.Plo@am__quote@
@@ -1555,6 +1558,13 @@ getncpu-none.lo: runtime/getncpu-none.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getncpu-none.lo `test -f 'runtime/getncpu-none.c' || echo '$(srcdir)/'`runtime/getncpu-none.c
 
+getncpu-gnu.lo: runtime/getncpu-gnu.c
+@am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getncpu-gnu.lo -MD -MP -MF $(DEPDIR)/getncpu-gnu.Tpo -c -o getncpu-gnu.lo `test -f 'runtime/getncpu-gnu.c' || echo '$(srcdir)/'`runtime/getncpu-gnu.c
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/getncpu-gnu.Tpo $(DEPDIR)/getncpu-gnu.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='runtime/getncpu-gnu.c' object='getncpu-gnu.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o getncpu-gnu.lo `test -f 'runtime/getncpu-gnu.c' || echo '$(srcdir)/'`runtime/getncpu-gnu.c
+
 getncpu-aix.lo: runtime/getncpu-aix.c
 @am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT getncpu-aix.lo -MD -MP -MF $(DEPDIR)/getncpu-aix.Tpo -c -o getncpu-aix.lo `test -f 'runtime/getncpu-aix.c' || echo '$(srcdir)/'`runtime/getncpu-aix.c
 @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/getncpu-aix.Tpo $(DEPDIR)/getncpu-aix.Plo
Index: gcc-snapshot-20180721/src/libgo/match.sh
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/match.sh
+++ gcc-snapshot-20180721/src/libgo/match.sh
@@ -113,7 +113,7 @@ for f in $gofiles; do
 	"") ;;
 	$goarch) ;;
 	$goos) ;;
-	aix | android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
+	aix | android | darwin | dragonfly | freebsd | gnu | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 	    tag1=nonmatchingtag
 	    ;;
 	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64)
@@ -125,7 +125,7 @@ for f in $gofiles; do
 	"") ;;
 	$goarch) ;;
 	$goos) ;;
-	aix | android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
+	aix | android | darwin | dragonfly | freebsd | gnu | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 	    tag2=nonmatchingtag
 	    ;;
 	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64)
Index: gcc-snapshot-20180721/src/libgo/mksigtab.sh
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/mksigtab.sh
+++ gcc-snapshot-20180721/src/libgo/mksigtab.sh
@@ -43,7 +43,13 @@ addsig _SIGINT     '{_SigNotify + _SigKi
 addsig _SIGQUIT    '{_SigNotify + _SigThrow, "SIGQUIT: quit"}'
 addsig _SIGILL     '{_SigThrow + _SigUnblock, "SIGILL: illegal instruction"}'
 addsig _SIGTRAP    '{_SigThrow + _SigUnblock, "SIGTRAP: trace trap"}'
+# Special treatment of SIGABRT for GNU/Hurd
+# /usr/include/i386-gnu/bits/signum.h: #define SIGABRT SIGIOT
+if egrep 'define SIGABRT SIGIOT' gen-sysinfo.go > /dev/null 2>&1; then
+addsig _SIGIOT     '{_SigNotify + _SigThrow, "SIGIOT: abort"}'
+else
 addsig _SIGABRT    '{_SigNotify + _SigThrow, "SIGABRT: abort"}'
+fi
 addsig _SIGBUS     '{_SigPanic + _SigUnblock, "SIGBUS: bus error"}'
 addsig _SIGFPE     '{_SigPanic + _SigUnblock, "SIGFPE: floating-point exception"}'
 addsig _SIGKILL    '{0, "SIGKILL: kill"}'
@@ -91,6 +97,7 @@ checksig _SIGCANCEL  '{_SigSetStack + _S
 checksig _SIGXRES    '{_SigNotify, "SIGXRES: resource control exceeded"}'
 checksig _SIGJVM1    '{_SigNotify, "SIGJVM1: reserved signal for Java Virtual Machine"}'
 checksig _SIGJVM2    '{_SigNotify, "SIGJVM2: reserved signal for Java Virtual Machine"}'
+checksig _SIGLOST '   {_SigNotify, "SIGLOST: resource lost (Sun); server died (GNU)"}'
 
 # Special handling of signals 32 and 33 on GNU/Linux systems,
 # because they are special to glibc.
@@ -112,6 +119,11 @@ else
 	    rtmax=`grep 'const _*SIGRTMAX = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
 	    if test -n "$rtmax"; then
 		nsig=`expr $rtmax + 1`
+	    elif grep 'const _*SIGRTMAX = [ (]*_*SIGRTMIN[ )]*' gen-sysinfo.go >/dev/null 2>&1; then
+		rtmin=`grep 'const _*SIGRTMIN = [0-9]*$' gen-sysinfo.go | sed -e 's/.* = \([0-9]*\)/\1/'`
+		if test -n "$rtmin"; then
+		    nsig=`expr $rtmin + 1`
+		fi
 	    fi
 	fi
     fi
Index: gcc-snapshot-20180721/src/libgo/mksysinfo.sh
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/mksysinfo.sh
+++ gcc-snapshot-20180721/src/libgo/mksysinfo.sh
@@ -55,8 +55,33 @@ grep '^type _mld_hdr_t ' gen-sysinfo.go
   sed -e 's/_in6_addr/[16]byte/' >> ${OUT}
 
 # The errno constants.  These get type Errno.
-  egrep '#define E[A-Z0-9_]+ ' errno.i | \
-  sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(_\1)/' >> ${OUT}
+#  egrep '#define E[A-Z0-9_]+ ' errno.i | \
+#  sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(_\1)/' >> ${OUT}
+
+egrep '#define E[A-Z0-9_]+ [0-9]' errno.i | \
+    sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(_\1)/' >> ${OUT}
+# Workaround for GNU/Hurd _EMIG_* errors having negative values
+egrep '#define E[A-Z0-9_]+ -[0-9]' errno.i | \
+  sed -e 's/^#define \(E[A-Z0-9_]*\) .*$/const \1 = Errno(-_\1)/' >> ${OUT}
+
+# Special treatment of EWOULDBLOCK for GNU/Hurd
+# /usr/include/i386-gnu/bits/errno.h: #define EWOULDBLOCK EAGAIN
+if egrep '^const _EWOULDBLOCK = _EAGAIN' gen-sysinfo.go > /dev/null 2>&1; then
+  if egrep '^const EAGAIN = Errno\(_EAGAIN\)' ${OUT}; then
+      echo 'const EWOULDBLOCK = Errno(_EAGAIN)' >> ${OUT}
+  fi
+fi
+
+# Special treatment of _NSIG for GNU/Hurd
+# /usr/include/i386-gnu/bits/signum-generic.h:
+#define __SIGRTMIN      32
+#define __SIGRTMAX      __SIGRTMIN
+#define _NSIG           (__SIGRTMAX + 1)
+# Brute force method (mksigtab.sh bug):
+#if egrep '^const ___SIGRTMAX = ___SIGRTMIN' gen-sysinfo.go > /dev/null 2>&1; then
+#  egrep '^const ___SIGRTMIN = 32' gen-sysinfo.go > /dev/null 2>&1 | \
+#    echo "const __SIGRTMAX = 32" >> gen-sysinfo.go
+#fi
 
 # The O_xxx flags.
 egrep '^const _(O|F|FD)_' gen-sysinfo.go | \
@@ -125,6 +150,11 @@ grep '^const _SYS_' gen-sysinfo.go | \
     echo "const $sup = _$sys" >> ${OUT}
   done
 
+# Special treatment of SYS_IOCTL for GNU/Hurd
+if ! grep '^const SYS_IOCTL' ${OUT} > /dev/null 2>&1; then
+  echo "const SYS_IOCTL = 0" >> ${OUT}
+fi
+
 # The GNU/Linux support wants to use SYS_GETDENTS64 if available.
 if ! grep '^const SYS_GETDENTS ' ${OUT} >/dev/null 2>&1; then
   echo "const SYS_GETDENTS = 0" >> ${OUT}
@@ -452,6 +482,11 @@ grep '^type _st_timespec ' gen-sysinfo.g
 
 # The stat type.
 # Prefer largefile variant if available.
+# Special treatment of st_dev for GNU/Hurd
+# /usr/include/i386-gnu/bits/stat.h: #define st_dev st_fsid
+if grep 'define st_dev st_fsid' gen-sysinfo.go > /dev/null 2>&1; then
+  sed -i -e 's/; st_fsid/; st_dev/' gen-sysinfo.go
+fi
 stat=`grep '^type _stat64 ' gen-sysinfo.go || true`
 if test "$stat" != ""; then
   grep '^type _stat64 ' gen-sysinfo.go
Index: gcc-snapshot-20180721/src/libgo/go/crypto/x509/root_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/crypto/x509/root_gnu.go
@@ -0,0 +1,11 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from root_linux.go
+
+package x509
+
+// Possible certificate files; stop after finding one.
+var certFiles = []string{
+	"/etc/ssl/certs/ca-certificates.crt",                // Debian/Ubuntu/Gentoo etc.
+}
Index: gcc-snapshot-20180721/src/libgo/go/go/build/syslist.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/go/build/syslist.go
+++ gcc-snapshot-20180721/src/libgo/go/go/build/syslist.go
@@ -4,5 +4,5 @@
 
 package build
 
-const goosList = "aix android darwin dragonfly freebsd js linux nacl netbsd openbsd plan9 solaris windows zos "
+const goosList = "aix android darwin dragonfly freebsd js 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 nios2 ppc riscv riscv64 s390 s390x sh shbe sparc sparc64 wasm "
Index: gcc-snapshot-20180721/src/libgo/go/net/cgo_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/net/cgo_gnu.go
@@ -0,0 +1,17 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from cgo_bsd.go
+
+// +build cgo,!netgo
+// +build gnu
+
+package net
+
+/*
+#include <netdb.h>
+*/
+
+import "syscall"
+
+const cgoAddrInfoFlags = syscall.AI_CANONNAME | syscall.AI_V4MAPPED | syscall.AI_ALL
Index: gcc-snapshot-20180721/src/libgo/go/net/sendfile_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/net/sendfile_gnu.go
@@ -0,0 +1,42 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to sendfile_linux.go
+
+package net
+
+import (
+	"internal/poll"
+	"io"
+	"os"
+)
+
+// sendFile copies the contents of r to c using the sendfile
+// system call to minimize copies.
+//
+// if handled == true, sendFile returns the number of bytes copied and any
+// non-EOF error.
+//
+// if handled == false, sendFile performed no work.
+func sendFile(c *netFD, r io.Reader) (written int64, err error, handled bool) {
+	var remain int64 = 1 << 62 // by default, copy until EOF
+
+	lr, ok := r.(*io.LimitedReader)
+	if ok {
+		remain, r = lr.N, lr.R
+		if remain <= 0 {
+			return 0, nil, true
+		}
+	}
+	f, ok := r.(*os.File)
+	if !ok {
+		return 0, nil, false
+	}
+
+	written, err = poll.SendFile(&c.pfd, int(f.Fd()), remain)
+
+	if lr != nil {
+		lr.N = remain - written
+	}
+	return written, wrapSyscallError("sendfile", err), written > 0
+}
Index: gcc-snapshot-20180721/src/libgo/go/net/sock_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/net/sock_gnu.go
@@ -0,0 +1,15 @@
+// Copyright 2014 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from sock_stub.go
+
+// +build gnu
+
+package net
+
+import "syscall"
+
+func maxListenerBacklog() int {
+       // From /usr/include/i386-gnu/bits/socket.h
+       return syscall.SOMAXCONN
+}
Index: gcc-snapshot-20180721/src/libgo/go/net/sockopt_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/net/sockopt_gnu.go
@@ -0,0 +1,33 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to sockopt_linux.go
+
+package net
+
+import (
+	"os"
+	"syscall"
+)
+
+func setDefaultSockopts(s, family, sotype int, ipv6only bool) error {
+	if family == syscall.AF_INET6 && sotype != syscall.SOCK_RAW {
+		// Allow both IP versions even if the OS default
+		// is otherwise. Note that some operating systems
+		// never admit this option.
+		syscall.SetsockoptInt(s, syscall.IPPROTO_IPV6, syscall.IPV6_V6ONLY, boolint(ipv6only))
+	}
+	// Allow broadcast.
+	return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1))
+}
+
+func setDefaultListenerSockopts(s int) error {
+	// Allow reuse of recently-used addresses.
+	return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1))
+}
+
+func setDefaultMulticastSockopts(s int) error {
+	// Allow multicast UDP and raw IP datagram sockets to listen
+	// concurrently across multiple listeners.
+	return os.NewSyscallError("setsockopt", syscall.SetsockoptInt(s, syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1))
+}
Index: gcc-snapshot-20180721/src/libgo/go/net/sockoptip_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/net/sockoptip_gnu.go
@@ -0,0 +1,31 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to sockoptip_bsd.go
+
+// +build gnu
+
+package net
+
+import (
+	"runtime"
+	"syscall"
+)
+
+func setIPv4MulticastInterface(fd *netFD, ifi *Interface) error {
+	ip, err := interfaceToIPv4Addr(ifi)
+	if err != nil {
+		return wrapSyscallError("setsockopt", err)
+	}
+	var a [4]byte
+	copy(a[:], ip.To4())
+	err = fd.pfd.SetsockoptInet4Addr(syscall.IPPROTO_IP, syscall.IP_MULTICAST_IF, a)
+	runtime.KeepAlive(fd)
+	return wrapSyscallError("setsockopt", err)
+}
+
+func setIPv4MulticastLoopback(fd *netFD, v bool) error {
+	err := fd.pfd.SetsockoptByte(syscall.IPPROTO_IP, syscall.IP_MULTICAST_LOOP, byte(boolint(v)))
+	runtime.KeepAlive(fd)
+	return wrapSyscallError("setsockopt", err)
+}
Index: gcc-snapshot-20180721/src/libgo/go/internal/poll/sendfile_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/internal/poll/sendfile_gnu.go
@@ -0,0 +1,51 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to sendfile_linux.go
+
+package poll
+
+import "syscall"
+
+// maxSendfileSize is the largest chunk size we ask the kernel to copy
+// at a time.
+const maxSendfileSize int = 4 << 20
+
+// SendFile wraps the sendfile system call.
+func SendFile(dstFD *FD, src int, remain int64) (int64, error) {
+	if err := dstFD.writeLock(); err != nil {
+		return 0, err
+	}
+	defer dstFD.writeUnlock()
+
+	dst := int(dstFD.Sysfd)
+	var written int64
+	var err error
+	for remain > 0 {
+		n := maxSendfileSize
+		if int64(n) > remain {
+			n = int(remain)
+		}
+		n, err1 := syscall.Sendfile(dst, src, nil, n)
+		if n > 0 {
+			written += int64(n)
+			remain -= int64(n)
+		}
+		if n == 0 && err1 == nil {
+			break
+		}
+		if err1 == syscall.EAGAIN {
+			if err1 = dstFD.pd.waitWrite(dstFD.isFile); err1 == nil {
+				continue
+			}
+		}
+		if err1 != nil {
+			// This includes syscall.ENOSYS (no kernel
+			// support) and syscall.EINVAL (fd types which
+			// don't implement sendfile)
+			err = err1
+			break
+		}
+	}
+	return written, err
+}
Index: gcc-snapshot-20180721/src/libgo/go/os/executable_procfs.go
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/go/os/executable_procfs.go
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/go/os/pipe_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/os/pipe_gnu.go
@@ -0,0 +1,38 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from pipe_linux.go
+
+// +build gnu
+
+package os
+
+import "syscall"
+
+// Pipe returns a connected pair of Files; reads from r return bytes written to w.
+// It returns the files and an error, if any.
+func Pipe() (r *File, w *File, err error) {
+	var p [2]int
+
+	e := syscall.Pipe2(p[0:], syscall.O_CLOEXEC)
+	// pipe2 was added in 2.6.27 and our minimum requirement is 2.6.23, so it
+	// might not be implemented.
+	if e == syscall.ENOSYS {
+		// See ../syscall/exec.go for description of lock.
+		syscall.ForkLock.RLock()
+		e = syscall.Pipe(p[0:])
+		if e != nil {
+			syscall.ForkLock.RUnlock()
+			return nil, nil, NewSyscallError("pipe", e)
+		}
+		syscall.CloseOnExec(p[0])
+		syscall.CloseOnExec(p[1])
+		syscall.ForkLock.RUnlock()
+	} else if e != nil {
+		return nil, nil, NewSyscallError("pipe2", e)
+	}
+
+	return NewFile(uintptr(p[0]), "|0"), NewFile(uintptr(p[1]), "|1"), nil
+//FIXME: When netpoll_poll.go is implemented
+//	return newFile(uintptr(p[0]), "|0", true), newFile(uintptr(p[1]), "|1", true), nil
+}
Index: gcc-snapshot-20180721/src/libgo/go/runtime/netpoll_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/runtime/netpoll_gnu.go
@@ -0,0 +1,303 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// FIXME: Fake network poller for gnu.
+// This is based on the former libgo/runtime/netpoll_select.c implementation
+// except that it uses poll instead of select and is written in Go.
+// Inspiration was also taken from netpoll_aix.go and netpoll_solaris.go
+
+// +build gnu
+
+package runtime
+
+import (
+	"unsafe"
+)
+
+//From /usr/include/i386-gnu/bits/poll.h
+const _POLLIN   =  01           // There is data to read.
+const _POLLPRI  =  02           // There is urgent data to read.
+const _POLLOUT  =  04           // Writing now will not block.
+const _POLLERR  = 010           // Error condition.
+const _POLLHUP  = 020           // Hung up.
+const _POLLNVAL = 040           // Invalid polling request.
+
+type pollfd struct {
+        fd      int32           // File descriptor to poll.
+        events  int16           // Types of events poller cares about.
+        revents int16           // Types of events that actually occurred.
+}
+
+//From /usr/include/x86_64-linux-gnu/sys/poll.h
+//extern poll
+func poll (polldata_array *pollfd, nfds int32, timeout int32) int32
+
+//extern pipe2
+func libc_pipe2(fd *int32, flags int32) int32
+
+var (
+	pipefd      [2]int32
+	pollfds     int32 = -1
+	nfds        int32 = 0
+	rdwake      int32
+	wrwake      int32
+	fds         [207]pollfd
+	data        [207]*pollDesc
+	pd          *pollDesc
+	pmtx        mutex
+	needsUpdate bool
+	b           byte
+	err         int32 = 0
+)
+
+func netpollinit() {
+
+	ret := libc_pipe2(&pipefd[0], _O_CLOEXEC|_O_NONBLOCK);
+	if ret == -1 {
+		throw("runtime:netpollinit(): failed to create pipe2")
+	}
+
+	rdwake = pipefd[0]
+	wrwake = pipefd[1]
+
+	// Add the read side of the pipe to the pollset.
+	lock(&pmtx)
+	fds[0].fd = int32(rdwake)
+	fds[0].events = int16(_POLLIN)
+	fds[0].revents = int16(0)
+
+// 	Checks for pd != nil are made in netpoll()
+	data[0] = nil
+	unlock(&pmtx)
+
+	nfds = 1
+	pollfds = 1
+
+	return
+}
+
+func netpolldescriptor() uintptr {
+	// FIXME: see src/libgo/go/os/exec/exec_test.go
+	// Need to return two fds here: wrwake and rdwake
+	return ^uintptr(0)
+}
+
+func fdadd(fd uintptr, events int16, pd *pollDesc) {
+//	println("netpollopen:fdadd: nfds =", nfds, "fd =", fd)
+
+	fdfound := false
+	// Omit fds[0].fd = rdwake
+	for i := int32(1); i < nfds; i++ {
+		fdsi := fds[i]
+		if fdsi.fd == int32(fd) {
+			fdfound = true
+			fdsi.events = int16(events)
+			fdsi.revents = int16(0)
+			data[i] = pd
+			break
+		}
+	}
+	// fd not found, add it.
+	if fdfound == false {
+		fds[nfds].fd = int32(fd)
+		fds[nfds].events = int16(events)
+		fds[nfds].revents = int16(0)
+		data[nfds] = pd
+		nfds++
+	}
+
+//	for l := int32(0); l < nfds; l++ {
+//		println("fds[", l, "].fd =", fds[l].fd)
+//	}
+
+	return
+}
+
+func netpollopen(fd uintptr, pd *pollDesc) int32 {
+	lock(&pmtx)
+	needsUpdate = true
+	unlock(&pmtx)
+
+	// poll will block so wakeup using wrwake first.
+wrloop1:
+	nwritten := write(uintptr(wrwake), unsafe.Pointer(&b), 1)
+	if nwritten == 0 {
+		println("runtime:netpollopen: write retuned zero, fd =", wrwake)
+		return -1
+	}
+	if nwritten == -1 {
+		err = int32(errno())
+		if err == _EAGAIN {
+			goto wrloop1
+		}
+		println("runtime:netpollopen: write failed fd =", wrwake, "errno =", err)
+		return err
+	}
+
+	// Add fd to the pollset.
+	lock(&pmtx)
+	fdadd(fd, _POLLIN|_POLLOUT, pd)
+	needsUpdate = false
+	unlock(&pmtx)
+
+	return 0
+}
+
+func fdremove(fd uintptr) {
+//	println("netpollclose():fdremove() nfds =", nfds, "fd =", fd)
+
+	fdfound := false
+	// Omit fds[0].fd = rdwake
+	j := 1
+	for i := int32(1); i < nfds; i++ {
+		fdsi := fds[i]
+		if fdsi.fd == int32(fd) {
+			fdfound = true
+			fdsi.fd = int32(0)
+			fdsi.events = int16(0)
+			fdsi.revents = int16(0)
+			data[i] = nil
+		} else {
+			fds[j].fd = fdsi.fd
+			fds[j].events = fdsi.events
+			fds[j].revents = int16(0)
+			data[j] = data[i]
+			j++
+		}
+	}
+	nfds--
+	// fd not found, print an error
+	//FIXME: Still output from here
+	if fdfound == false {
+		println("netpollclose:fdremove: fd =", fd, "NOT FOUND")
+	}
+
+//	for l := int32(0); l < nfds; l++ {
+//		println("fds[", l, "].fd =", fds[l].fd)
+//	}
+
+	return
+}
+
+func netpollclose(fd uintptr) int32 {
+	lock(&pmtx)
+	needsUpdate = true
+	unlock(&pmtx)
+
+	// poll will block so wakeup using wrwake first.
+wrloop2:
+	nwritten := write(uintptr(wrwake), unsafe.Pointer(&b), 1)
+	if nwritten == 0 {
+		println("runtime:netpollclose: write retuned zero, fd =", wrwake)
+		return -1
+	}
+	if nwritten == -1 {
+		err = int32(errno())
+		if err == _EAGAIN {
+			goto wrloop2
+		}
+		println("runtime:netpollclose: write failed fd =", wrwake, "errno =", err)
+		return err
+	}
+
+	// Remove fd from the pollset.
+	lock(&pmtx)
+	fdremove(fd)
+	needsUpdate = false
+	unlock(&pmtx)
+
+	return 0
+}
+
+func netpollarm(pd *pollDesc, mode int) {
+	throw("runtime:netpollarm() unused")
+}
+
+// polls for ready network connections
+// returns list of goroutines that become runnable
+func netpoll(block bool) *g {
+	if pollfds == -1 {
+		return nil
+	}
+
+	timeout := int32(-1)
+	if !block {
+		timeout = 0
+	}
+
+retry:
+	lock(&pmtx)
+	if needsUpdate {
+		unlock(&pmtx)
+		osyield()
+		goto retry
+	}
+	unlock(&pmtx)
+
+	// Note: poll only returns fds with non-zero revents!
+	nfound := poll(&fds[0], nfds, timeout)
+	if nfound == 0 {
+		return nil
+	}
+	if nfound < 0 {
+		err = int32(errno())
+		if err == _EINTR || err == _EAGAIN {
+			goto retry
+		}
+		println("runtime: poll failed errno =", err)
+		throw("runtime: netpoll failed")
+	}
+
+	var mode int32
+	var gp guintptr
+	// We assume that nfound <= nfds
+	for i := int32(0); i < nfds; i++ {
+		fdsi := &fds[i]
+
+		// Skip fds with zero revents as poll does
+		if fdsi.revents == 0 {
+			continue
+		}
+
+	    	mode = 0
+		if fdsi.revents&(_POLLIN|_POLLHUP|_POLLERR) != 0 {
+			if fdsi.fd == rdwake {
+rdloop:
+				nread := read(fdsi.fd, unsafe.Pointer(&b), 1)
+				// EOF
+				if nread == 0 {
+					println("runtime:netpoll: read returned zero fd =", fdsi.fd)
+					return nil
+				}
+				if nread == -1 {
+					err = int32(errno())
+					if err == _EAGAIN {
+						goto rdloop
+					}
+				 	println("runtime:netpoll: read failed fd =", fdsi.fd, "errno =", err)
+				 	return nil
+				}
+				continue
+			}
+			mode += 'r'
+		}
+		if fdsi.revents&(_POLLOUT|_POLLHUP|_POLLERR) != 0 {
+			mode += 'w'
+		}
+		if mode != 0 {
+			lock(&pmtx)
+			pd = data[i]
+			unlock(&pmtx)
+			if pd != nil {
+				netpollready(&gp, pd, mode)
+			}
+		}
+	}
+
+	if block && gp == 0 {
+		goto retry
+	}
+
+        return gp.ptr()
+}
Index: gcc-snapshot-20180721/src/libgo/go/runtime/os_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/runtime/os_gnu.go
@@ -0,0 +1,87 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is derived from os_solaris.go
+
+package runtime
+
+import "unsafe"
+
+type mOS struct {
+	waitsema uintptr // semaphore for parking on locks
+}
+
+//extern malloc
+func libc_malloc(uintptr) unsafe.Pointer
+
+//go:noescape
+//extern sem_init
+func sem_init(sem *_sem_t, pshared int32, value uint32) int32
+
+//go:noescape
+//extern sem_wait
+func sem_wait(sem *_sem_t) int32
+
+//go:noescape
+//extern sem_post
+func sem_post(sem *_sem_t) int32
+
+//go:noescape
+//extern sem_timedwait
+func sem_timedwait(sem *_sem_t, timeout *timespec) int32
+
+//go:nosplit
+func semacreate(mp *m) {
+	if mp.mos.waitsema != 0 {
+		return
+	}
+
+	var sem *_sem_t
+
+	// Call libc's malloc rather than malloc. This will
+	// allocate space on the C heap. We can't call malloc
+	// here because it could cause a deadlock.
+	sem = (*_sem_t)(libc_malloc(unsafe.Sizeof(*sem)))
+	if sem_init(sem, 0, 0) != 0 {
+		throw("sem_init")
+	}
+	mp.mos.waitsema = uintptr(unsafe.Pointer(sem))
+}
+
+//go:nosplit
+func semasleep(ns int64) int32 {
+	_m_ := getg().m
+	if ns >= 0 {
+		var ts timespec
+		ts.set_sec(ns / 1000000000)
+		ts.set_nsec(int32(ns % 1000000000))
+
+		if sem_timedwait((*_sem_t)(unsafe.Pointer(_m_.mos.waitsema)), &ts) != 0 {
+			err := errno()
+			if err == _ETIMEDOUT || err == _EAGAIN || err == _EINTR {
+				return -1
+			}
+			throw("sem_timedwait")
+		}
+		return 0
+	}
+	for {
+		r1 := sem_wait((*_sem_t)(unsafe.Pointer(_m_.mos.waitsema)))
+		if r1 == 0 {
+			break
+		}
+		if errno() == _EINTR {
+			continue
+		}
+		throw("sem_wait")
+	}
+	return 0
+}
+
+//go:nosplit
+func semawakeup(mp *m) {
+	if sem_post((*_sem_t)(unsafe.Pointer(mp.mos.waitsema))) != 0 {
+		throw("sem_post")
+	}
+}
+
Index: gcc-snapshot-20180721/src/libgo/go/runtime/signal_gnu.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/runtime/signal_gnu.go
@@ -0,0 +1,750 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+// This file is identical to signal_unix.go except for
+// dieFromSignal(_SIGIOT) instead of dieFromSignal(_SIGABRT)
+
+
+// +build gnu
+
+package runtime
+
+import (
+	"runtime/internal/atomic"
+	"unsafe"
+)
+
+// For gccgo's C code to call:
+//go:linkname initsig runtime.initsig
+//go:linkname sigtrampgo runtime.sigtrampgo
+
+// sigTabT is the type of an entry in the global sigtable array.
+// sigtable is inherently system dependent, and appears in OS-specific files,
+// but sigTabT is the same for all Unixy systems.
+// The sigtable array is indexed by a system signal number to get the flags
+// and printable name of each signal.
+type sigTabT struct {
+	flags int32
+	name  string
+}
+
+//go:linkname os_sigpipe os.sigpipe
+func os_sigpipe() {
+	systemstack(sigpipe)
+}
+
+func signame(sig uint32) string {
+	if sig >= uint32(len(sigtable)) {
+		return ""
+	}
+	return sigtable[sig].name
+}
+
+const (
+	_SIG_DFL uintptr = 0
+	_SIG_IGN uintptr = 1
+)
+
+// Stores the signal handlers registered before Go installed its own.
+// These signal handlers will be invoked in cases where Go doesn't want to
+// handle a particular signal (e.g., signal occurred on a non-Go thread).
+// See sigfwdgo for more information on when the signals are forwarded.
+//
+// This is read by the signal handler; accesses should use
+// atomic.Loaduintptr and atomic.Storeuintptr.
+var fwdSig [_NSIG]uintptr
+
+// handlingSig is indexed by signal number and is non-zero if we are
+// currently handling the signal. Or, to put it another way, whether
+// the signal handler is currently set to the Go signal handler or not.
+// This is uint32 rather than bool so that we can use atomic instructions.
+var handlingSig [_NSIG]uint32
+
+// channels for synchronizing signal mask updates with the signal mask
+// thread
+var (
+	disableSigChan  chan uint32
+	enableSigChan   chan uint32
+	maskUpdatedChan chan struct{}
+)
+
+func init() {
+	// _NSIG is the number of signals on this operating system.
+	// sigtable should describe what to do for all the possible signals.
+	if len(sigtable) != _NSIG {
+		print("runtime: len(sigtable)=", len(sigtable), " _NSIG=", _NSIG, "\n")
+		throw("bad sigtable len")
+	}
+}
+
+var signalsOK bool
+
+// Initialize signals.
+// Called by libpreinit so runtime may not be initialized.
+//go:nosplit
+//go:nowritebarrierrec
+func initsig(preinit bool) {
+	if preinit {
+		// preinit is only passed as true if isarchive should be true.
+		isarchive = true
+	}
+
+	if !preinit {
+		// It's now OK for signal handlers to run.
+		signalsOK = true
+	}
+
+	// For c-archive/c-shared this is called by libpreinit with
+	// preinit == true.
+	if (isarchive || islibrary) && !preinit {
+		return
+	}
+
+	for i := uint32(0); i < _NSIG; i++ {
+		t := &sigtable[i]
+		if t.flags == 0 || t.flags&_SigDefault != 0 {
+			continue
+		}
+
+		// We don't need to use atomic operations here because
+		// there shouldn't be any other goroutines running yet.
+		fwdSig[i] = getsig(i)
+
+		if !sigInstallGoHandler(i) {
+			// Even if we are not installing a signal handler,
+			// set SA_ONSTACK if necessary.
+			if fwdSig[i] != _SIG_DFL && fwdSig[i] != _SIG_IGN {
+				setsigstack(i)
+			}
+			continue
+		}
+
+		handlingSig[i] = 1
+		setsig(i, getSigtramp())
+	}
+}
+
+//go:nosplit
+//go:nowritebarrierrec
+func sigInstallGoHandler(sig uint32) bool {
+	// For some signals, we respect an inherited SIG_IGN handler
+	// rather than insist on installing our own default handler.
+	// Even these signals can be fetched using the os/signal package.
+	switch sig {
+	case _SIGHUP, _SIGINT:
+		if atomic.Loaduintptr(&fwdSig[sig]) == _SIG_IGN {
+			return false
+		}
+	}
+
+	t := &sigtable[sig]
+	if t.flags&_SigSetStack != 0 {
+		return false
+	}
+
+	// When built using c-archive or c-shared, only install signal
+	// handlers for synchronous signals and SIGPIPE.
+	if (isarchive || islibrary) && t.flags&_SigPanic == 0 && sig != _SIGPIPE {
+		return false
+	}
+
+	return true
+}
+
+// sigenable enables the Go signal handler to catch the signal sig.
+// It is only called while holding the os/signal.handlers lock,
+// via os/signal.enableSignal and signal_enable.
+func sigenable(sig uint32) {
+	if sig >= uint32(len(sigtable)) {
+		return
+	}
+
+	// SIGPROF is handled specially for profiling.
+	if sig == _SIGPROF {
+		return
+	}
+
+	t := &sigtable[sig]
+	if t.flags&_SigNotify != 0 {
+		ensureSigM()
+		enableSigChan <- sig
+		<-maskUpdatedChan
+		if atomic.Cas(&handlingSig[sig], 0, 1) {
+			atomic.Storeuintptr(&fwdSig[sig], getsig(sig))
+			setsig(sig, getSigtramp())
+		}
+	}
+}
+
+// sigdisable disables the Go signal handler for the signal sig.
+// It is only called while holding the os/signal.handlers lock,
+// via os/signal.disableSignal and signal_disable.
+func sigdisable(sig uint32) {
+	if sig >= uint32(len(sigtable)) {
+		return
+	}
+
+	// SIGPROF is handled specially for profiling.
+	if sig == _SIGPROF {
+		return
+	}
+
+	t := &sigtable[sig]
+	if t.flags&_SigNotify != 0 {
+		ensureSigM()
+		disableSigChan <- sig
+		<-maskUpdatedChan
+
+		// If initsig does not install a signal handler for a
+		// signal, then to go back to the state before Notify
+		// we should remove the one we installed.
+		if !sigInstallGoHandler(sig) {
+			atomic.Store(&handlingSig[sig], 0)
+			setsig(sig, atomic.Loaduintptr(&fwdSig[sig]))
+		}
+	}
+}
+
+// sigignore ignores the signal sig.
+// It is only called while holding the os/signal.handlers lock,
+// via os/signal.ignoreSignal and signal_ignore.
+func sigignore(sig uint32) {
+	if sig >= uint32(len(sigtable)) {
+		return
+	}
+
+	// SIGPROF is handled specially for profiling.
+	if sig == _SIGPROF {
+		return
+	}
+
+	t := &sigtable[sig]
+	if t.flags&_SigNotify != 0 {
+		atomic.Store(&handlingSig[sig], 0)
+		setsig(sig, _SIG_IGN)
+	}
+}
+
+// clearSignalHandlers clears all signal handlers that are not ignored
+// back to the default. This is called by the child after a fork, so that
+// we can enable the signal mask for the exec without worrying about
+// running a signal handler in the child.
+//go:nosplit
+//go:nowritebarrierrec
+func clearSignalHandlers() {
+	for i := uint32(0); i < _NSIG; i++ {
+		if atomic.Load(&handlingSig[i]) != 0 {
+			setsig(i, _SIG_DFL)
+		}
+	}
+}
+
+// setProcessCPUProfiler is called when the profiling timer changes.
+// It is called with prof.lock held. hz is the new timer, and is 0 if
+// profiling is being disabled. Enable or disable the signal as
+// required for -buildmode=c-archive.
+func setProcessCPUProfiler(hz int32) {
+	if hz != 0 {
+		// Enable the Go signal handler if not enabled.
+		if atomic.Cas(&handlingSig[_SIGPROF], 0, 1) {
+			atomic.Storeuintptr(&fwdSig[_SIGPROF], getsig(_SIGPROF))
+			setsig(_SIGPROF, getSigtramp())
+		}
+	} else {
+		// If the Go signal handler should be disabled by default,
+		// disable it if it is enabled.
+		if !sigInstallGoHandler(_SIGPROF) {
+			if atomic.Cas(&handlingSig[_SIGPROF], 1, 0) {
+				setsig(_SIGPROF, atomic.Loaduintptr(&fwdSig[_SIGPROF]))
+			}
+		}
+	}
+}
+
+// setThreadCPUProfiler makes any thread-specific changes required to
+// implement profiling at a rate of hz.
+func setThreadCPUProfiler(hz int32) {
+	var it _itimerval
+	if hz == 0 {
+		setitimer(_ITIMER_PROF, &it, nil)
+	} else {
+		it.it_interval.tv_sec = 0
+		it.it_interval.set_usec(1000000 / hz)
+		it.it_value = it.it_interval
+		setitimer(_ITIMER_PROF, &it, nil)
+	}
+	_g_ := getg()
+	_g_.m.profilehz = hz
+}
+
+func sigpipe() {
+	if sigsend(_SIGPIPE) {
+		return
+	}
+	dieFromSignal(_SIGPIPE)
+}
+
+// sigtrampgo is called from the signal handler function, sigtramp,
+// written in assembly code.
+// This is called by the signal handler, and the world may be stopped.
+//
+// It must be nosplit because getg() is still the G that was running
+// (if any) when the signal was delivered, but it's (usually) called
+// on the gsignal stack. Until this switches the G to gsignal, the
+// stack bounds check won't work.
+//
+//go:nosplit
+//go:nowritebarrierrec
+func sigtrampgo(sig uint32, info *_siginfo_t, ctx unsafe.Pointer) {
+	if sigfwdgo(sig, info, ctx) {
+		return
+	}
+	g := getg()
+	if g == nil {
+		c := sigctxt{info, ctx}
+		if sig == _SIGPROF {
+			_, pc := getSiginfo(info, ctx)
+			sigprofNonGo(pc)
+			return
+		}
+		badsignal(uintptr(sig), &c)
+		return
+	}
+
+	setg(g.m.gsignal)
+	sighandler(sig, info, ctx, g)
+	setg(g)
+}
+
+// sigpanic turns a synchronous signal into a run-time panic.
+// If the signal handler sees a synchronous panic, it arranges the
+// stack to look like the function where the signal occurred called
+// sigpanic, sets the signal's PC value to sigpanic, and returns from
+// the signal handler. The effect is that the program will act as
+// though the function that got the signal simply called sigpanic
+// instead.
+//
+// This must NOT be nosplit because the linker doesn't know where
+// sigpanic calls can be injected.
+//
+// The signal handler must not inject a call to sigpanic if
+// getg().throwsplit, since sigpanic may need to grow the stack.
+func sigpanic() {
+	g := getg()
+	if !canpanic(g) {
+		throw("unexpected signal during runtime execution")
+	}
+
+	switch g.sig {
+	case _SIGBUS:
+		if g.sigcode0 == _BUS_ADRERR && g.sigcode1 < 0x1000 {
+			panicmem()
+		}
+		// Support runtime/debug.SetPanicOnFault.
+		if g.paniconfault {
+			panicmem()
+		}
+		print("unexpected fault address ", hex(g.sigcode1), "\n")
+		throw("fault")
+	case _SIGSEGV:
+		if (g.sigcode0 == 0 || g.sigcode0 == _SEGV_MAPERR || g.sigcode0 == _SEGV_ACCERR) && g.sigcode1 < 0x1000 {
+			panicmem()
+		}
+		// Support runtime/debug.SetPanicOnFault.
+		if g.paniconfault {
+			panicmem()
+		}
+		print("unexpected fault address ", hex(g.sigcode1), "\n")
+		throw("fault")
+	case _SIGFPE:
+		switch g.sigcode0 {
+		case _FPE_INTDIV:
+			panicdivide()
+		case _FPE_INTOVF:
+			panicoverflow()
+		}
+		panicfloat()
+	}
+
+	if g.sig >= uint32(len(sigtable)) {
+		// can't happen: we looked up g.sig in sigtable to decide to call sigpanic
+		throw("unexpected signal value")
+	}
+	panic(errorString(sigtable[g.sig].name))
+}
+
+// dieFromSignal kills the program with a signal.
+// This provides the expected exit status for the shell.
+// This is only called with fatal signals expected to kill the process.
+//go:nosplit
+//go:nowritebarrierrec
+func dieFromSignal(sig uint32) {
+	unblocksig(sig)
+	// Mark the signal as unhandled to ensure it is forwarded.
+	atomic.Store(&handlingSig[sig], 0)
+	raise(sig)
+
+	// That should have killed us. On some systems, though, raise
+	// sends the signal to the whole process rather than to just
+	// the current thread, which means that the signal may not yet
+	// have been delivered. Give other threads a chance to run and
+	// pick up the signal.
+	osyield()
+	osyield()
+	osyield()
+
+	// If that didn't work, try _SIG_DFL.
+	setsig(sig, _SIG_DFL)
+	raise(sig)
+
+	osyield()
+	osyield()
+	osyield()
+
+	// On Darwin we may still fail to die, because raise sends the
+	// signal to the whole process rather than just the current thread,
+	// and osyield just sleeps briefly rather than letting all other
+	// threads run. See issue 20315. Sleep longer.
+	if GOOS == "darwin" {
+		usleep(100)
+	}
+
+	// If we are still somehow running, just exit with the wrong status.
+	exit(2)
+}
+
+// raisebadsignal is called when a signal is received on a non-Go
+// thread, and the Go program does not want to handle it (that is, the
+// program has not called os/signal.Notify for the signal).
+func raisebadsignal(sig uint32, c *sigctxt) {
+	if sig == _SIGPROF {
+		// Ignore profiling signals that arrive on non-Go threads.
+		return
+	}
+
+	var handler uintptr
+	if sig >= _NSIG {
+		handler = _SIG_DFL
+	} else {
+		handler = atomic.Loaduintptr(&fwdSig[sig])
+	}
+
+	// Reset the signal handler and raise the signal.
+	// We are currently running inside a signal handler, so the
+	// signal is blocked. We need to unblock it before raising the
+	// signal, or the signal we raise will be ignored until we return
+	// from the signal handler. We know that the signal was unblocked
+	// before entering the handler, or else we would not have received
+	// it. That means that we don't have to worry about blocking it
+	// again.
+	unblocksig(sig)
+	setsig(sig, handler)
+
+	// If we're linked into a non-Go program we want to try to
+	// avoid modifying the original context in which the signal
+	// was raised. If the handler is the default, we know it
+	// is non-recoverable, so we don't have to worry about
+	// re-installing sighandler. At this point we can just
+	// return and the signal will be re-raised and caught by
+	// the default handler with the correct context.
+	if (isarchive || islibrary) && handler == _SIG_DFL && c.sigcode() != _SI_USER {
+		return
+	}
+
+	raise(sig)
+
+	// Give the signal a chance to be delivered.
+	// In almost all real cases the program is about to crash,
+	// so sleeping here is not a waste of time.
+	usleep(1000)
+
+	// If the signal didn't cause the program to exit, restore the
+	// Go signal handler and carry on.
+	//
+	// We may receive another instance of the signal before we
+	// restore the Go handler, but that is not so bad: we know
+	// that the Go program has been ignoring the signal.
+	setsig(sig, getSigtramp())
+}
+
+func crash() {
+	if GOOS == "darwin" {
+		// OS X core dumps are linear dumps of the mapped memory,
+		// from the first virtual byte to the last, with zeros in the gaps.
+		// Because of the way we arrange the address space on 64-bit systems,
+		// this means the OS X core file will be >128 GB and even on a zippy
+		// workstation can take OS X well over an hour to write (uninterruptible).
+		// Save users from making that mistake.
+		if GOARCH == "amd64" {
+			return
+		}
+	}
+
+	dieFromSignal(_SIGIOT)
+}
+
+// ensureSigM starts one global, sleeping thread to make sure at least one thread
+// is available to catch signals enabled for os/signal.
+func ensureSigM() {
+	if maskUpdatedChan != nil {
+		return
+	}
+	maskUpdatedChan = make(chan struct{})
+	disableSigChan = make(chan uint32)
+	enableSigChan = make(chan uint32)
+	go func() {
+		// Signal masks are per-thread, so make sure this goroutine stays on one
+		// thread.
+		LockOSThread()
+		defer UnlockOSThread()
+		// The sigBlocked mask contains the signals not active for os/signal,
+		// initially all signals except the essential. When signal.Notify()/Stop is called,
+		// sigenable/sigdisable in turn notify this thread to update its signal
+		// mask accordingly.
+		var sigBlocked sigset
+		sigfillset(&sigBlocked)
+		for i := range sigtable {
+			if !blockableSig(uint32(i)) {
+				sigdelset(&sigBlocked, i)
+			}
+		}
+		sigprocmask(_SIG_SETMASK, &sigBlocked, nil)
+		for {
+			select {
+			case sig := <-enableSigChan:
+				if sig > 0 {
+					sigdelset(&sigBlocked, int(sig))
+				}
+			case sig := <-disableSigChan:
+				if sig > 0 && blockableSig(sig) {
+					sigaddset(&sigBlocked, int(sig))
+				}
+			}
+			sigprocmask(_SIG_SETMASK, &sigBlocked, nil)
+			maskUpdatedChan <- struct{}{}
+		}
+	}()
+}
+
+// This is called when we receive a signal when there is no signal stack.
+// This can only happen if non-Go code calls sigaltstack to disable the
+// signal stack.
+func noSignalStack(sig uint32) {
+	println("signal", sig, "received on thread with no signal stack")
+	throw("non-Go code disabled sigaltstack")
+}
+
+// This is called if we receive a signal when there is a signal stack
+// but we are not on it. This can only happen if non-Go code called
+// sigaction without setting the SS_ONSTACK flag.
+func sigNotOnStack(sig uint32) {
+	println("signal", sig, "received but handler not on signal stack")
+	throw("non-Go code set up signal handler without SA_ONSTACK flag")
+}
+
+// signalDuringFork is called if we receive a signal while doing a fork.
+// We do not want signals at that time, as a signal sent to the process
+// group may be delivered to the child process, causing confusion.
+// This should never be called, because we block signals across the fork;
+// this function is just a safety check. See issue 18600 for background.
+func signalDuringFork(sig uint32) {
+	println("signal", sig, "received during fork")
+	throw("signal received during fork")
+}
+
+// This runs on a foreign stack, without an m or a g. No stack split.
+//go:nosplit
+//go:norace
+//go:nowritebarrierrec
+func badsignal(sig uintptr, c *sigctxt) {
+	needm(0)
+	if !sigsend(uint32(sig)) {
+		// A foreign thread received the signal sig, and the
+		// Go code does not want to handle it.
+		raisebadsignal(uint32(sig), c)
+	}
+	dropm()
+}
+
+// Determines if the signal should be handled by Go and if not, forwards the
+// signal to the handler that was installed before Go's. Returns whether the
+// signal was forwarded.
+// This is called by the signal handler, and the world may be stopped.
+//go:nosplit
+//go:nowritebarrierrec
+func sigfwdgo(sig uint32, info *_siginfo_t, ctx unsafe.Pointer) bool {
+	if sig >= uint32(len(sigtable)) {
+		return false
+	}
+	fwdFn := atomic.Loaduintptr(&fwdSig[sig])
+	flags := sigtable[sig].flags
+
+	// If we aren't handling the signal, forward it.
+	if atomic.Load(&handlingSig[sig]) == 0 || !signalsOK {
+		// If the signal is ignored, doing nothing is the same as forwarding.
+		if fwdFn == _SIG_IGN || (fwdFn == _SIG_DFL && flags&_SigIgn != 0) {
+			return true
+		}
+		// We are not handling the signal and there is no other handler to forward to.
+		// Crash with the default behavior.
+		if fwdFn == _SIG_DFL {
+			setsig(sig, _SIG_DFL)
+			dieFromSignal(sig)
+			return false
+		}
+
+		sigfwd(fwdFn, sig, info, ctx)
+		return true
+	}
+
+	// If there is no handler to forward to, no need to forward.
+	if fwdFn == _SIG_DFL {
+		return false
+	}
+
+	c := sigctxt{info, ctx}
+	// Only forward synchronous signals and SIGPIPE.
+	// Unfortunately, user generated SIGPIPEs will also be forwarded, because si_code
+	// is set to _SI_USER even for a SIGPIPE raised from a write to a closed socket
+	// or pipe.
+	if (c.sigcode() == _SI_USER || flags&_SigPanic == 0) && sig != _SIGPIPE {
+		return false
+	}
+	// Determine if the signal occurred inside Go code. We test that:
+	//   (1) we were in a goroutine (i.e., m.curg != nil), and
+	//   (2) we weren't in CGO.
+	g := getg()
+	if g != nil && g.m != nil && g.m.curg != nil && !g.m.incgo {
+		return false
+	}
+
+	// Signal not handled by Go, forward it.
+	if fwdFn != _SIG_IGN {
+		sigfwd(fwdFn, sig, info, ctx)
+	}
+
+	return true
+}
+
+// msigsave saves the current thread's signal mask into mp.sigmask.
+// This is used to preserve the non-Go signal mask when a non-Go
+// thread calls a Go function.
+// This is nosplit and nowritebarrierrec because it is called by needm
+// which may be called on a non-Go thread with no g available.
+//go:nosplit
+//go:nowritebarrierrec
+func msigsave(mp *m) {
+	sigprocmask(_SIG_SETMASK, nil, &mp.sigmask)
+}
+
+// msigrestore sets the current thread's signal mask to sigmask.
+// This is used to restore the non-Go signal mask when a non-Go thread
+// calls a Go function.
+// This is nosplit and nowritebarrierrec because it is called by dropm
+// after g has been cleared.
+//go:nosplit
+//go:nowritebarrierrec
+func msigrestore(sigmask sigset) {
+	sigprocmask(_SIG_SETMASK, &sigmask, nil)
+}
+
+// sigblock blocks all signals in the current thread's signal mask.
+// This is used to block signals while setting up and tearing down g
+// when a non-Go thread calls a Go function.
+// The OS-specific code is expected to define sigset_all.
+// This is nosplit and nowritebarrierrec because it is called by needm
+// which may be called on a non-Go thread with no g available.
+//go:nosplit
+//go:nowritebarrierrec
+func sigblock() {
+	var set sigset
+	sigfillset(&set)
+	sigprocmask(_SIG_SETMASK, &set, nil)
+}
+
+// unblocksig removes sig from the current thread's signal mask.
+// This is nosplit and nowritebarrierrec because it is called from
+// dieFromSignal, which can be called by sigfwdgo while running in the
+// signal handler, on the signal stack, with no g available.
+//go:nosplit
+//go:nowritebarrierrec
+func unblocksig(sig uint32) {
+	var set sigset
+	sigemptyset(&set)
+	sigaddset(&set, int(sig))
+	sigprocmask(_SIG_UNBLOCK, &set, nil)
+}
+
+// minitSignals is called when initializing a new m to set the
+// thread's alternate signal stack and signal mask.
+func minitSignals() {
+	minitSignalStack()
+	minitSignalMask()
+}
+
+// minitSignalStack is called when initializing a new m to set the
+// alternate signal stack. If the alternate signal stack is not set
+// for the thread (the normal case) then set the alternate signal
+// stack to the gsignal stack. If the alternate signal stack is set
+// for the thread (the case when a non-Go thread sets the alternate
+// signal stack and then calls a Go function) then set the gsignal
+// stack to the alternate signal stack. Record which choice was made
+// in newSigstack, so that it can be undone in unminit.
+func minitSignalStack() {
+	_g_ := getg()
+	var st _stack_t
+	sigaltstack(nil, &st)
+	if st.ss_flags&_SS_DISABLE != 0 {
+		signalstack(_g_.m.gsignalstack, _g_.m.gsignalstacksize)
+		_g_.m.newSigstack = true
+	} else {
+		_g_.m.newSigstack = false
+	}
+}
+
+// minitSignalMask is called when initializing a new m to set the
+// thread's signal mask. When this is called all signals have been
+// blocked for the thread.  This starts with m.sigmask, which was set
+// either from initSigmask for a newly created thread or by calling
+// msigsave if this is a non-Go thread calling a Go function. It
+// removes all essential signals from the mask, thus causing those
+// signals to not be blocked. Then it sets the thread's signal mask.
+// After this is called the thread can receive signals.
+func minitSignalMask() {
+	nmask := getg().m.sigmask
+	for i := range sigtable {
+		if !blockableSig(uint32(i)) {
+			sigdelset(&nmask, i)
+		}
+	}
+	sigprocmask(_SIG_SETMASK, &nmask, nil)
+}
+
+// unminitSignals is called from dropm, via unminit, to undo the
+// effect of calling minit on a non-Go thread.
+//go:nosplit
+//go:nowritebarrierrec
+func unminitSignals() {
+	if getg().m.newSigstack {
+		signalstack(nil, 0)
+	}
+}
+
+// blockableSig returns whether sig may be blocked by the signal mask.
+// We never want to block the signals marked _SigUnblock;
+// these are the synchronous signals that turn into a Go panic.
+// In a Go program--not a c-archive/c-shared--we never want to block
+// the signals marked _SigKill or _SigThrow, as otherwise it's possible
+// for all running threads to block them and delay their delivery until
+// we start a new thread. When linked into a C program we let the C code
+// decide on the disposition of those signals.
+func blockableSig(sig uint32) bool {
+	flags := sigtable[sig].flags
+	if flags&_SigUnblock != 0 {
+		return false
+	}
+	if isarchive || islibrary {
+		return true
+	}
+	return flags&(_SigKill|_SigThrow) == 0
+}
Index: gcc-snapshot-20180721/src/libgo/go/syscall/syscall_gnu_test.go
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/src/libgo/go/syscall/syscall_gnu_test.go
@@ -0,0 +1,356 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build gnu
+
+package syscall_test
+
+import (
+	"flag"
+	"fmt"
+	"internal/testenv"
+	"io/ioutil"
+	"net"
+	"os"
+	"os/exec"
+	"path/filepath"
+	"runtime"
+	"syscall"
+	"testing"
+	"time"
+)
+
+// Tests that below functions, structures and constants are consistent
+// on all Unix-like systems.
+func _() {
+	// program scheduling priority functions and constants
+	var (
+		_ func(int, int, int) error   = syscall.Setpriority
+		_ func(int, int) (int, error) = syscall.Getpriority
+	)
+	const (
+		_ int = syscall.PRIO_USER
+		_ int = syscall.PRIO_PROCESS
+		_ int = syscall.PRIO_PGRP
+	)
+
+	// termios constants
+	const (
+		_ int = syscall.TCIFLUSH
+		_ int = syscall.TCIOFLUSH
+		_ int = syscall.TCOFLUSH
+	)
+
+	// fcntl file locking structure and constants
+	var (
+		_ = syscall.Flock_t{
+			Type:   int32(0),
+			Whence: int32(0),
+			Start:  int64(0),
+			Len:    int64(0),
+			Pid:    int32(0),
+		}
+	)
+	const (
+		_ = syscall.F_GETLK
+		_ = syscall.F_SETLK
+		_ = syscall.F_SETLKW
+	)
+}
+
+// TestFcntlFlock tests whether the file locking structure matches
+// the calling convention of each kernel.
+// On some Linux systems, glibc uses another set of values for the
+// commands and translates them to the correct value that the kernel
+// expects just before the actual fcntl syscall. As Go uses raw
+// syscalls directly, it must use the real value, not the glibc value.
+// Thus this test also verifies that the Flock_t structure can be
+// roundtripped with F_SETLK and F_GETLK.
+func TestFcntlFlock(t *testing.T) {
+	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
+		t.Skip("skipping; no child processes allowed on iOS")
+	}
+	flock := syscall.Flock_t{
+		Type:  syscall.F_WRLCK,
+		Start: 31415, Len: 271828, Whence: 1,
+	}
+	if os.Getenv("GO_WANT_HELPER_PROCESS") == "" {
+		// parent
+		name := filepath.Join(os.TempDir(), "TestFcntlFlock")
+		fd, err := syscall.Open(name, syscall.O_CREAT|syscall.O_RDWR|syscall.O_CLOEXEC, 0)
+		if err != nil {
+			t.Fatalf("Open failed: %v", err)
+		}
+		defer syscall.Unlink(name)
+		defer syscall.Close(fd)
+		if err := syscall.Ftruncate(fd, 1<<20); err != nil {
+			t.Fatalf("Ftruncate(1<<20) failed: %v", err)
+		}
+		if err := syscall.FcntlFlock(uintptr(fd), syscall.F_SETLK, &flock); err != nil {
+			t.Fatalf("FcntlFlock(F_SETLK) failed: %v", err)
+		}
+		cmd := exec.Command(os.Args[0], "-test.run=^TestFcntlFlock$")
+		cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1")
+		cmd.ExtraFiles = []*os.File{os.NewFile(uintptr(fd), name)}
+		out, err := cmd.CombinedOutput()
+		if len(out) > 0 || err != nil {
+			t.Fatalf("child process: %q, %v", out, err)
+		}
+	} else {
+		// child
+		got := flock
+		// make sure the child lock is conflicting with the parent lock
+		got.Start--
+		got.Len++
+		if err := syscall.FcntlFlock(3, syscall.F_GETLK, &got); err != nil {
+			t.Fatalf("FcntlFlock(F_GETLK) failed: %v", err)
+		}
+		flock.Pid = int32(syscall.Getppid())
+		// Linux kernel always set Whence to 0
+		flock.Whence = 0
+		if got.Type == flock.Type && got.Start == flock.Start && got.Len == flock.Len && got.Pid == flock.Pid && got.Whence == flock.Whence {
+			os.Exit(0)
+		}
+		t.Fatalf("FcntlFlock got %v, want %v", got, flock)
+	}
+}
+
+// TestPassFD tests passing a file descriptor over a Unix socket.
+//
+// This test involved both a parent and child process. The parent
+// process is invoked as a normal test, with "go test", which then
+// runs the child process by running the current test binary with args
+// "-test.run=^TestPassFD$" and an environment variable used to signal
+// that the test should become the child process instead.
+func TestPassFD(t *testing.T) {
+	switch runtime.GOOS {
+	case "dragonfly":
+		// TODO(jsing): Figure out why sendmsg is returning EINVAL.
+		t.Skip("skipping test on dragonfly")
+	case "solaris":
+		// TODO(aram): Figure out why ReadMsgUnix is returning empty message.
+		t.Skip("skipping test on solaris, see issue 7402")
+	}
+
+	testenv.MustHaveExec(t)
+
+	if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" {
+		passFDChild()
+		return
+	}
+
+	tempDir, err := ioutil.TempDir("", "TestPassFD")
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer os.RemoveAll(tempDir)
+
+	fds, err := syscall.Socketpair(syscall.AF_LOCAL, syscall.SOCK_STREAM, 0)
+	if err != nil {
+		t.Fatalf("Socketpair: %v", err)
+	}
+	defer syscall.Close(fds[0])
+	defer syscall.Close(fds[1])
+	writeFile := os.NewFile(uintptr(fds[0]), "child-writes")
+	readFile := os.NewFile(uintptr(fds[1]), "parent-reads")
+	defer writeFile.Close()
+	defer readFile.Close()
+
+	cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir)
+	cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1")
+	cmd.ExtraFiles = []*os.File{writeFile}
+
+	out, err := cmd.CombinedOutput()
+	if len(out) > 0 || err != nil {
+		t.Fatalf("child process: %q, %v", out, err)
+	}
+
+	c, err := net.FileConn(readFile)
+	if err != nil {
+		t.Fatalf("FileConn: %v", err)
+	}
+	defer c.Close()
+
+	uc, ok := c.(*net.UnixConn)
+	if !ok {
+		t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c)
+	}
+
+	buf := make([]byte, 32) // expect 1 byte
+	oob := make([]byte, 32) // expect 24 bytes
+	closeUnix := time.AfterFunc(5*time.Second, func() {
+		t.Logf("timeout reading from unix socket")
+		uc.Close()
+	})
+	_, oobn, _, _, err := uc.ReadMsgUnix(buf, oob)
+	closeUnix.Stop()
+
+	scms, err := syscall.ParseSocketControlMessage(oob[:oobn])
+	if err != nil {
+		t.Fatalf("ParseSocketControlMessage: %v", err)
+	}
+	if len(scms) != 1 {
+		t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms)
+	}
+	scm := scms[0]
+	gotFds, err := syscall.ParseUnixRights(&scm)
+	if err != nil {
+		t.Fatalf("syscall.ParseUnixRights: %v", err)
+	}
+	if len(gotFds) != 1 {
+		t.Fatalf("wanted 1 fd; got %#v", gotFds)
+	}
+
+	f := os.NewFile(uintptr(gotFds[0]), "fd-from-child")
+	defer f.Close()
+
+	got, err := ioutil.ReadAll(f)
+	want := "Hello from child process!\n"
+	if string(got) != want {
+		t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want)
+	}
+}
+
+// passFDChild is the child process used by TestPassFD.
+func passFDChild() {
+	defer os.Exit(0)
+
+	// Look for our fd. It should be fd 3, but we work around an fd leak
+	// bug here (https://golang.org/issue/2603) to let it be elsewhere.
+	var uc *net.UnixConn
+	for fd := uintptr(3); fd <= 10; fd++ {
+		f := os.NewFile(fd, "unix-conn")
+		var ok bool
+		netc, _ := net.FileConn(f)
+		uc, ok = netc.(*net.UnixConn)
+		if ok {
+			break
+		}
+	}
+	if uc == nil {
+		fmt.Println("failed to find unix fd")
+		return
+	}
+
+	// Make a file f to send to our parent process on uc.
+	// We make it in tempDir, which our parent will clean up.
+	flag.Parse()
+	tempDir := flag.Arg(0)
+	f, err := ioutil.TempFile(tempDir, "")
+	if err != nil {
+		fmt.Printf("TempFile: %v", err)
+		return
+	}
+
+	f.Write([]byte("Hello from child process!\n"))
+	f.Seek(0, 0)
+
+	rights := syscall.UnixRights(int(f.Fd()))
+	dummyByte := []byte("x")
+	n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil)
+	if err != nil {
+		fmt.Printf("WriteMsgUnix: %v", err)
+		return
+	}
+	if n != 1 || oobn != len(rights) {
+		fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights))
+		return
+	}
+}
+
+// TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage,
+// and ParseUnixRights are able to successfully round-trip lists of file descriptors.
+func TestUnixRightsRoundtrip(t *testing.T) {
+	testCases := [...][][]int{
+		{{42}},
+		{{1, 2}},
+		{{3, 4, 5}},
+		{{}},
+		{{1, 2}, {3, 4, 5}, {}, {7}},
+	}
+	for _, testCase := range testCases {
+		b := []byte{}
+		var n int
+		for _, fds := range testCase {
+			// Last assignment to n wins
+			n = len(b) + syscall.CmsgLen(4*len(fds))
+			b = append(b, syscall.UnixRights(fds...)...)
+		}
+		// Truncate b
+		b = b[:n]
+
+		scms, err := syscall.ParseSocketControlMessage(b)
+		if err != nil {
+			t.Fatalf("ParseSocketControlMessage: %v", err)
+		}
+		if len(scms) != len(testCase) {
+			t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms)
+		}
+		for i, scm := range scms {
+			gotFds, err := syscall.ParseUnixRights(&scm)
+			if err != nil {
+				t.Fatalf("ParseUnixRights: %v", err)
+			}
+			wantFds := testCase[i]
+			if len(gotFds) != len(wantFds) {
+				t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds)
+			}
+			for j, fd := range gotFds {
+				if fd != wantFds[j] {
+					t.Fatalf("expected fd %v, got %v", wantFds[j], fd)
+				}
+			}
+		}
+	}
+}
+
+func TestRlimit(t *testing.T) {
+	var rlimit, zero syscall.Rlimit
+	err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlimit)
+	if err != nil {
+		t.Fatalf("Getrlimit: save failed: %v", err)
+	}
+	if zero == rlimit {
+		t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit)
+	}
+	set := rlimit
+	set.Cur = set.Max - 1
+	err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &set)
+	if err != nil {
+		t.Fatalf("Setrlimit: set failed: %#v %v", set, err)
+	}
+	var get syscall.Rlimit
+	err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &get)
+	if err != nil {
+		t.Fatalf("Getrlimit: get failed: %v", err)
+	}
+	set = rlimit
+	set.Cur = set.Max - 1
+	if set != get {
+		// Seems like Darwin requires some privilege to
+		// increase the soft limit of rlimit sandbox, though
+		// Setrlimit never reports an error.
+		switch runtime.GOOS {
+		case "darwin":
+		default:
+			t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get)
+		}
+	}
+	err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rlimit)
+	if err != nil {
+		t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err)
+	}
+}
+
+func TestSeekFailure(t *testing.T) {
+	_, err := syscall.Seek(-1, 0, 0)
+	if err == nil {
+		t.Fatalf("Seek(-1, 0, 0) did not fail")
+	}
+	str := err.Error() // used to crash on Linux
+	t.Logf("Seek: %v", str)
+	if str == "" {
+		t.Fatalf("Seek(-1, 0, 0) return error with empty message")
+	}
+}
Index: gcc-snapshot-20180721/src/libgo/runtime/getncpu-gnu.c
===================================================================
--- /dev/null
+++ gcc-snapshot-20180721/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-snapshot-20180721/src/libgo/testsuite/gotest
===================================================================
--- gcc-snapshot-20180721.orig/src/libgo/testsuite/gotest
+++ gcc-snapshot-20180721/src/libgo/testsuite/gotest
@@ -628,7 +628,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

--- End Message ---
--- Begin Message ---
closing outdated issue

--- End Message ---

Reply to: