diff --git a/cross/gcc-aarch64/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch b/cross/gcc-aarch64/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6c1eb03b96fa6d657995222a7873f73f9fd11cb9
--- /dev/null
+++ b/cross/gcc-aarch64/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
@@ -0,0 +1,45 @@
+From 756d3163d2ee3ee21ad815ab6dfebe58e8c32965 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:58:08 +0200
+Subject: [PATCH] gcc-go: Use _off_t type instead of _loff_t
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/syscall/libcall_linux.go | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go
+index 88286c07b6e..f8f5cfb5011 100644
+--- a/libgo/go/syscall/libcall_linux.go
++++ b/libgo/go/syscall/libcall_linux.go
+@@ -206,19 +206,19 @@ func Gettid() (tid int) {
+ //sys	Setxattr(path string, attr string, data []byte, flags int) (err error)
+ //setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
+ 
+-//sys	splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
+-//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
++//sys	splice(rfd int, roff *_off_t, wfd int, woff *_off_t, len int, flags int) (n int64, err error)
++//splice(rfd _C_int, roff *_off_t, wfd _C_int, woff *_off_t, len Size_t, flags _C_uint) Ssize_t
+ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
+-	var lroff _loff_t
+-	var plroff *_loff_t
++	var lroff _off_t
++	var plroff *_off_t
+ 	if roff != nil {
+-		lroff = _loff_t(*roff)
++		lroff = _off_t(*roff)
+ 		plroff = &lroff
+ 	}
+-	var lwoff _loff_t
+-	var plwoff *_loff_t
++	var lwoff _off_t
++	var plwoff *_off_t
+ 	if woff != nil {
+-		lwoff = _loff_t(*woff)
++		lwoff = _off_t(*woff)
+ 		plwoff = &lwoff
+ 	}
+ 	n, err = splice(rfd, plroff, wfd, plwoff, len, flags)
diff --git a/cross/gcc-aarch64/0032-gcc-go-Don-t-include-sys-user.h.patch b/cross/gcc-aarch64/0032-gcc-go-Don-t-include-sys-user.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..897dd6ec314d02b68ed79d7178c7432f105c668f
--- /dev/null
+++ b/cross/gcc-aarch64/0032-gcc-go-Don-t-include-sys-user.h.patch
@@ -0,0 +1,27 @@
+From ba9db3417c93a42dbf994e7c18c021f5542aa354 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:58:21 +0200
+Subject: [PATCH] gcc-go: Don't include sys/user.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/sysinfo.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c
+index 0692fd41eb7..c8d987358d9 100644
+--- a/libgo/sysinfo.c
++++ b/libgo/sysinfo.c
+@@ -73,9 +73,6 @@
+ #include <sys/times.h>
+ #include <sys/wait.h>
+ #include <sys/un.h>
+-#if defined(HAVE_SYS_USER_H)
+-#include <sys/user.h>
+-#endif
+ #if defined(HAVE_SYS_UTSNAME_H)
+ #include <sys/utsname.h>
+ #endif
diff --git a/cross/gcc-aarch64/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch b/cross/gcc-aarch64/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4584a3595dd8a990d22a62f46400ecf840823f1a
--- /dev/null
+++ b/cross/gcc-aarch64/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
@@ -0,0 +1,26 @@
+From a2da9c892a6b29a8067f20fda2d8a5e9a7b5193e Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:59:22 +0200
+Subject: [PATCH] gcc-go: Fix ucontext_t on PPC64
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/runtime/go-signal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
+index b429fdb2403..fd1c885f043 100644
+--- a/libgo/runtime/go-signal.c
++++ b/libgo/runtime/go-signal.c
+@@ -224,7 +224,7 @@ getSiginfo(siginfo_t *info, void *context __attribute__((unused)))
+ #elif defined(__alpha__) && defined(__linux__)
+ 	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.sc_pc;
+ #elif defined(__PPC__) && defined(__linux__)
+-	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip;
++	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.gp_regs[32];
+ #elif defined(__PPC__) && defined(_AIX)
+ 	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.jmp_context.iar;
+ #elif defined(__aarch64__) && defined(__linux__)
diff --git a/cross/gcc-aarch64/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch b/cross/gcc-aarch64/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
new file mode 100644
index 0000000000000000000000000000000000000000..528bbb3c211a29afbc86cd0e846d9551aa4b128c
--- /dev/null
+++ b/cross/gcc-aarch64/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
@@ -0,0 +1,40 @@
+From 1d0cd9bbbef7d1bd3f42ad493db8d08b539cba60 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:59:45 +0200
+Subject: [PATCH] gcc-go: Fix handling of signal 34 on musl
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/mksigtab.sh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/libgo/mksigtab.sh b/libgo/mksigtab.sh
+index 11e4ec436bd..fe866eacb27 100644
+--- a/libgo/mksigtab.sh
++++ b/libgo/mksigtab.sh
+@@ -82,7 +82,7 @@ checksig _SIGPWR     '{_SigNotify, "SIGPWR: power failure restart"}'
+ checksig _SIGEMT     '{_SigThrow, "SIGEMT: emulate instruction executed"}'
+ checksig _SIGINFO    '{_SigNotify, "SIGINFO: status request from keyboard"}'
+ checksig _SIGTHR     '{_SigNotify, "SIGTHR: reserved"}'
+-checksig _SIGPOLL    '{_SigNotify, "SIGPOLL: pollable event occurred"}'
++#checksig _SIGPOLL    '{_SigNotify, "SIGPOLL: pollable event occurred"}'
+ checksig _SIGWAITING '{_SigNotify, "SIGWAITING: reserved signal no longer used by"}'
+ checksig _SIGLWP     '{_SigNotify, "SIGLWP: reserved signal no longer used by"}'
+ checksig _SIGFREEZE  '{_SigNotify, "SIGFREEZE: special signal used by CPR"}'
+@@ -95,10 +95,12 @@ checksig _SIGLOST '   {_SigNotify, "SIGLOST: resource lost (Sun); server died (G
+ 
+ # Special handling of signals 32 and 33 on GNU/Linux systems,
+ # because they are special to glibc.
++# Signal 34 is additionally special to Linux systems with musl.
+ if test "${GOOS}" = "linux"; then
+-    SIGLIST=$SIGLIST"_32__33_"
++    SIGLIST=$SIGLIST"_32__33__34_"
+     echo '	32: {_SigSetStack + _SigUnblock, "signal 32"}, /* SIGCANCEL; see issue 6997 */'
+     echo '	33: {_SigSetStack + _SigUnblock, "signal 33"}, /* SIGSETXID; see issues 3871, 9400, 12498 */'
++    echo '	34: {_SigSetStack + _SigUnblock, "signal 34"}, /* see issue 30062 */'
+ fi
+ 
+ if test "${GOOS}" = "aix"; then
diff --git a/cross/gcc-aarch64/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch b/cross/gcc-aarch64/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
new file mode 100644
index 0000000000000000000000000000000000000000..683242458bb316f7177f100d0144baae047c744f
--- /dev/null
+++ b/cross/gcc-aarch64/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
@@ -0,0 +1,35 @@
+From 956c8cc94e7aa487eb142905c319487d94dc621d Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:01:03 +0200
+Subject: [PATCH] gcc-go: Use int64 type as offset argument for mmap
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/runtime/mem_gccgo.go | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go
+index ba38ebaa9ab..3c9e5ce9461 100644
+--- a/libgo/go/runtime/mem_gccgo.go
++++ b/libgo/go/runtime/mem_gccgo.go
+@@ -15,7 +15,7 @@ import (
+ //go:linkname sysFree
+ 
+ //extern mmap
+-func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) unsafe.Pointer
++func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off int64) unsafe.Pointer
+ 
+ //extern munmap
+ func munmap(addr unsafe.Pointer, length uintptr) int32
+@@ -37,7 +37,7 @@ func init() {
+ 	}
+ }
+ 
+-func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) (unsafe.Pointer, int) {
++func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off int64) (unsafe.Pointer, int) {
+ 	p := sysMmap(addr, n, prot, flags, fd, off)
+ 	if uintptr(p) == _MAP_FAILED {
+ 		return nil, errno()
diff --git a/cross/gcc-aarch64/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch b/cross/gcc-aarch64/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
new file mode 100644
index 0000000000000000000000000000000000000000..aa6849135415508a26495c7fe6cff71c848d3a92
--- /dev/null
+++ b/cross/gcc-aarch64/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
@@ -0,0 +1,34 @@
+From c3a80843b7502ec2bfb5f1e5b514658c5f9dd884 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:02:28 +0200
+Subject: [PATCH] gcc-go: Fix st_{a,m,c}tim fields in generated sysinfo.go
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There are more than one st_{a,m,c}tim fields in struct stat on time64 machines.
+
+Run the Go-isation on all of them.
+
+Taken from Adélie Linux.
+---
+ libgo/mksysinfo.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
+index bd2ba32cba1..972e2c379bc 100755
+--- a/libgo/mksysinfo.sh
++++ b/libgo/mksysinfo.sh
+@@ -510,9 +510,9 @@ fi | sed -e 's/type _stat64/type Stat_t/' \
+          -e 's/st_size/Size/' \
+          -e 's/st_blksize/Blksize/' \
+          -e 's/st_blocks/Blocks/' \
+-         -e 's/st_atim/Atim/' \
+-         -e 's/st_mtim/Mtim/' \
+-         -e 's/st_ctim/Ctim/' \
++         -e 's/st_atim/Atim/g' \
++         -e 's/st_mtim/Mtim/g' \
++         -e 's/st_ctim/Ctim/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_timeval\([^a-zA-Z0-9_]\)/\1Timeval\2/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_timespec_t\([^a-zA-Z0-9_]\)/\1Timespec\2/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_st_timespec_t\([^a-zA-Z0-9_]\)/\1StTimespec\2/g' \
diff --git a/cross/gcc-aarch64/0037-gcc-go-signal-34-is-special-on-musl-libc.patch b/cross/gcc-aarch64/0037-gcc-go-signal-34-is-special-on-musl-libc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..89228cf8b52976582d8306ac31f59824796b6f25
--- /dev/null
+++ b/cross/gcc-aarch64/0037-gcc-go-signal-34-is-special-on-musl-libc.patch
@@ -0,0 +1,26 @@
+From 75e274b0819c9a77ca121113301d353f7aa91740 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:03:03 +0200
+Subject: [PATCH] gcc-go: signal 34 is special on musl libc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/runtime/signal_gccgo.go | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/go/runtime/signal_gccgo.go b/libgo/go/runtime/signal_gccgo.go
+index c555712a03c..9e228580d37 100644
+--- a/libgo/go/runtime/signal_gccgo.go
++++ b/libgo/go/runtime/signal_gccgo.go
+@@ -106,7 +106,7 @@ func getsig(i uint32) uintptr {
+ 	if sigaction(i, nil, &sa) < 0 {
+ 		// On GNU/Linux glibc rejects attempts to call
+ 		// sigaction with signal 32 (SIGCANCEL) or 33 (SIGSETXID).
+-		if GOOS == "linux" && (i == 32 || i == 33) {
++		if GOOS == "linux" && (i == 32 || i == 33 || i == 34) {
+ 			return _SIG_DFL
+ 		}
+ 		throw("sigaction read failure")
diff --git a/cross/gcc-aarch64/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch b/cross/gcc-aarch64/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3c21fedaf1263483b673e0c3dd351f56a47d402a
--- /dev/null
+++ b/cross/gcc-aarch64/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
@@ -0,0 +1,27 @@
+From ff096af4402ab87a61eb3979b47246a3a1b4fa38 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Sun, 30 Aug 2020 19:26:53 +0200
+Subject: [PATCH] gcc-go: Prefer _off_t over _off64_t
+
+musl does not seem to have _off64_t.
+---
+ libgo/mksysinfo.sh | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
+index 972e2c379bc..8d6da15f983 100755
+--- a/libgo/mksysinfo.sh
++++ b/libgo/mksysinfo.sh
+@@ -379,11 +379,7 @@ fi
+ # Some basic types.
+ echo 'type Size_t _size_t' >> ${OUT}
+ echo "type Ssize_t _ssize_t" >> ${OUT}
+-if grep '^const _HAVE_OFF64_T = ' gen-sysinfo.go > /dev/null 2>&1; then
+-  echo "type Offset_t _off64_t" >> ${OUT}
+-else
+-  echo "type Offset_t _off_t" >> ${OUT}
+-fi
++echo "type Offset_t _off_t" >> ${OUT}
+ echo "type Mode_t _mode_t" >> ${OUT}
+ echo "type Pid_t _pid_t" >> ${OUT}
+ echo "type Uid_t _uid_t" >> ${OUT}
diff --git a/cross/gcc-aarch64/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch b/cross/gcc-aarch64/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..30995e582bdf43899793cc5aace2e94e6815ee17
--- /dev/null
+++ b/cross/gcc-aarch64/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
@@ -0,0 +1,24 @@
+From 56dc7cac03987e95915032161ff0f7d5a8b8bf36 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Sun, 30 Aug 2020 19:27:51 +0200
+Subject: [PATCH] gcc-go: undef SETCONTEXT_CLOBBERS_TLS in proc.c
+
+---
+ libgo/runtime/proc.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c
+index 274ce01c0bf..92a540bdde9 100644
+--- a/libgo/runtime/proc.c
++++ b/libgo/runtime/proc.c
+@@ -66,6 +66,10 @@ static void gscanstack(G*);
+ 
+ __thread G *g __asm__(GOSYM_PREFIX "runtime.g");
+ 
++/* libucontext does not seem to support tlsbase, undef the macro
++ * here to make sure we define initcontext and fixcontext as dummies. */
++#undef SETCONTEXT_CLOBBERS_TLS
++
+ #ifndef SETCONTEXT_CLOBBERS_TLS
+ 
+ static inline void
diff --git a/cross/gcc-aarch64/0040-gcc-go-link-to-libucontext.patch b/cross/gcc-aarch64/0040-gcc-go-link-to-libucontext.patch
new file mode 100644
index 0000000000000000000000000000000000000000..de59e07f67a4fa8b54d24251adfd0fc87c26a6cc
--- /dev/null
+++ b/cross/gcc-aarch64/0040-gcc-go-link-to-libucontext.patch
@@ -0,0 +1,22 @@
+From ead76eced040b588f9374646a188ba21abab2049 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Mon, 31 Aug 2020 08:59:40 +0200
+Subject: [PATCH] gcc-go: link to libucontext
+
+---
+ Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 63627db68cf..c7f1f84d683 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -48823,7 +48823,7 @@ configure-target-libgo:
+ 	esac; \
+ 	module_srcdir=libgo; \
+ 	rm -f no-such-file || : ; \
+-	CONFIG_SITE=no-such-file $(SHELL) \
++	CONFIG_SITE=no-such-file LIBS="-lucontext $$LIBS" $(SHELL) \
+ 	  $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
diff --git a/cross/gcc-aarch64/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch b/cross/gcc-aarch64/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
new file mode 100644
index 0000000000000000000000000000000000000000..406a74d00618f1827d76a3310d8d9d7dd44d80b4
--- /dev/null
+++ b/cross/gcc-aarch64/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
@@ -0,0 +1,23 @@
+From 3f5ee6a593215fbd40975d801ff37cf81a3fced3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Mon, 31 Aug 2020 20:26:56 +0200
+Subject: [PATCH] gcc-go: Disable printing of unaccessible ppc64 struct members
+
+These struct members do not seem to exist on musl.
+---
+ libgo/runtime/go-signal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
+index fd1c885f043..e845e453332 100644
+--- a/libgo/runtime/go-signal.c
++++ b/libgo/runtime/go-signal.c
+@@ -333,7 +333,7 @@ dumpregs(siginfo_t *info __attribute__((unused)), void *context __attribute__((u
+ 		runtime_printf("sp  %X\n", m->sc_regs[30]);
+ 		runtime_printf("pc  %X\n", m->sc_pc);
+ 	  }
+-#elif defined(__PPC__) && defined(__LITTLE_ENDIAN__) && defined(__linux__)
++#elif defined(__PPC__) && defined(__LITTLE_ENDIAN__) && defined(__GLIBC__)
+ 	  {
+ 		mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext;
+ 		int i;
diff --git a/cross/gcc-aarch64/APKBUILD b/cross/gcc-aarch64/APKBUILD
index b3c445af8d2ddffd19196e2e997b0d8481b68ea9..3df3ebcd065237a42347f20506ecaf98aa4e969b 100644
--- a/cross/gcc-aarch64/APKBUILD
+++ b/cross/gcc-aarch64/APKBUILD
@@ -30,7 +30,7 @@ pkgver=10.2.0
 [ "$CHOST" != "$CTARGET" ] && _target="-$CTARGET_ARCH" || _target=""
 
 pkgname=gcc-aarch64
-pkgrel=2
+pkgrel=3
 pkgdesc="Stage2 cross-compiler for aarch64"
 url="https://gcc.gnu.org"
 arch="x86_64"
@@ -117,9 +117,6 @@ fi
 # See libphobos/configure.tgt in GCC sources for supported targets
 [ "$CARCH" = ppc64le ] && LANG_D=false
 
-# Go needs {set,make,swap}context, unimplemented in musl
-[ "$CTARGET_LIBC" = musl ] && LANG_GO=false
-
 # libitm has TEXTRELs in ARM build, so disable for now
 case "$CTARGET_ARCH" in
 arm*)		_libitm=false ;;
@@ -203,6 +200,17 @@ source="https://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkg
 	0028-ada-musl-support-fixes.patch
 	0029-c-Fix-bogus-vector-initialisation-error-PR96377.patch
 	0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch
+	0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
+	0032-gcc-go-Don-t-include-sys-user.h.patch
+	0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
+	0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
+	0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
+	0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
+	0037-gcc-go-signal-34-is-special-on-musl-libc.patch
+	0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
+	0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
+	0040-gcc-go-link-to-libucontext.patch
+	0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
 	"
 
 #	gcc-4.8-build-args.patch
@@ -662,4 +670,15 @@ ac3288b7840e5cf2500608773f40e604798b30fcb885c9fec7ba0bcc4bcfd374211faa26e82fcf46
 59d9e0a5f39ad68b8bb1365f7c97a54ca4751cdad01ead8184fd897d8a13156145976a8b5b9856be154c053d6ba11eaad1e5662e7ddda9ba6d2811340df61cba  0027-ada-libgnarl-compatibility-for-musl.patch
 8207323c530929517c799b24b1a7ba39c07bbb0e6770f878f1d66088ae16667e7706c9402ac04fe5eb6447a6ad12b548cc7e7612c5b217cd24e7d00094d2a28f  0028-ada-musl-support-fixes.patch
 b90f7ad074b6183a4afc6be65349b8bf94b78d1c259d5be9877c16e3de95222fb6905cba7eb6ee4fe1e564ed20bf183c6815bd087896b6b0376656a841736fc1  0029-c-Fix-bogus-vector-initialisation-error-PR96377.patch
-39a66708fb7ab4a72e1973749e32c22484e8e6c0afde6a59a645f2536c71cea86c8de2f0448621d53888293121344e84a24617400fae849282df57e0f5ddc21d  0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch"
+39a66708fb7ab4a72e1973749e32c22484e8e6c0afde6a59a645f2536c71cea86c8de2f0448621d53888293121344e84a24617400fae849282df57e0f5ddc21d  0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch
+ae0d860324b8b907ff82fcebe4777afae19df85b091723ac55425d24f677fb4e1d14ff4f21cdcdf837dcf730a4c48174e0cc31d1d003a5d11a88c226d5ed3e4a  0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
+a08ea6ce516dc96029153de096b96dcd3262509ee546f1f03152abe8f78c11c75b8dc14de39ccd982896114bf33d2edade2b4810dcc0b2d68e4abf52b67b8a41  0032-gcc-go-Don-t-include-sys-user.h.patch
+3bbd3ab3d31fc81cbc6b641919a84807e52b59794f860cad83b9ff69bfd0f5f29aeefc5f19b203bc96db23bf6e5a6958690bd81caa3137eaa5111b5c465273b3  0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
+9c410c3a137a18559f1ae5ab5803d5bc8fc596a93da769b4ff2feec516602eb193333d18d55ce39e054b56726a5c243962e8ccdee001ae7e186b4222465b31a3  0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
+78af84111854f5d2de127f03fc0984ea1f9c2c87156be2c454cc88a6791c90817aed63aba2861657560b1d3bc182a31e3d74f7a946e56d831939870240625fb7  0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
+c0d47b5bc478b3e0943806806d81a9183b9d176148e31c75d50cdbb23a34d9c178d751a3fac743d94ebb44c7eae70d3c55ca115acedcf4a1a0bacf46c0c5cd5f  0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
+e9b523a34b5e2930e0c58ee19e903e5416fe65641df80c40937d445d4c8f4f4bde59b3a94a392f5ca0d1c4a87565bd655c186b3a5194cb5bce4de2864d5d025d  0037-gcc-go-signal-34-is-special-on-musl-libc.patch
+d75147c2b062b0321b36d843c55887673d8bdac6448da465c29853ac5df3b68153551913476f2ea0fdb6d09df3992e47d457e480b3c16d99e6668b4f941e6e16  0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
+a60d2101f49d921cb538fd46650ba550f30721650b40e15fe8a56da32e5f2a3ea62f10d93982ffb45bee2e284cc006141b5d7a96fa12215d63b183b0a67c4c55  0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
+f08cfc9622e84a5a527b626dcca7199a430ab1c02588fef718bcb0155bc5af5a11888aa975e76e55cc2b9b70520a8bf1bcf939e5afe073f6263685686bc9c26f  0040-gcc-go-link-to-libucontext.patch
+f27644461c8a3fd27026873639608e53a396e9b9d39c4f330c8eeba82bb9b1e68ae1bfb82c770424399a13762bb3ec147b2699b2cbbdca07628ab3896d806ce4  0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch"
diff --git a/cross/gcc-armhf/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch b/cross/gcc-armhf/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6c1eb03b96fa6d657995222a7873f73f9fd11cb9
--- /dev/null
+++ b/cross/gcc-armhf/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
@@ -0,0 +1,45 @@
+From 756d3163d2ee3ee21ad815ab6dfebe58e8c32965 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:58:08 +0200
+Subject: [PATCH] gcc-go: Use _off_t type instead of _loff_t
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/syscall/libcall_linux.go | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go
+index 88286c07b6e..f8f5cfb5011 100644
+--- a/libgo/go/syscall/libcall_linux.go
++++ b/libgo/go/syscall/libcall_linux.go
+@@ -206,19 +206,19 @@ func Gettid() (tid int) {
+ //sys	Setxattr(path string, attr string, data []byte, flags int) (err error)
+ //setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
+ 
+-//sys	splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
+-//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
++//sys	splice(rfd int, roff *_off_t, wfd int, woff *_off_t, len int, flags int) (n int64, err error)
++//splice(rfd _C_int, roff *_off_t, wfd _C_int, woff *_off_t, len Size_t, flags _C_uint) Ssize_t
+ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
+-	var lroff _loff_t
+-	var plroff *_loff_t
++	var lroff _off_t
++	var plroff *_off_t
+ 	if roff != nil {
+-		lroff = _loff_t(*roff)
++		lroff = _off_t(*roff)
+ 		plroff = &lroff
+ 	}
+-	var lwoff _loff_t
+-	var plwoff *_loff_t
++	var lwoff _off_t
++	var plwoff *_off_t
+ 	if woff != nil {
+-		lwoff = _loff_t(*woff)
++		lwoff = _off_t(*woff)
+ 		plwoff = &lwoff
+ 	}
+ 	n, err = splice(rfd, plroff, wfd, plwoff, len, flags)
diff --git a/cross/gcc-armhf/0032-gcc-go-Don-t-include-sys-user.h.patch b/cross/gcc-armhf/0032-gcc-go-Don-t-include-sys-user.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..897dd6ec314d02b68ed79d7178c7432f105c668f
--- /dev/null
+++ b/cross/gcc-armhf/0032-gcc-go-Don-t-include-sys-user.h.patch
@@ -0,0 +1,27 @@
+From ba9db3417c93a42dbf994e7c18c021f5542aa354 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:58:21 +0200
+Subject: [PATCH] gcc-go: Don't include sys/user.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/sysinfo.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c
+index 0692fd41eb7..c8d987358d9 100644
+--- a/libgo/sysinfo.c
++++ b/libgo/sysinfo.c
+@@ -73,9 +73,6 @@
+ #include <sys/times.h>
+ #include <sys/wait.h>
+ #include <sys/un.h>
+-#if defined(HAVE_SYS_USER_H)
+-#include <sys/user.h>
+-#endif
+ #if defined(HAVE_SYS_UTSNAME_H)
+ #include <sys/utsname.h>
+ #endif
diff --git a/cross/gcc-armhf/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch b/cross/gcc-armhf/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4584a3595dd8a990d22a62f46400ecf840823f1a
--- /dev/null
+++ b/cross/gcc-armhf/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
@@ -0,0 +1,26 @@
+From a2da9c892a6b29a8067f20fda2d8a5e9a7b5193e Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:59:22 +0200
+Subject: [PATCH] gcc-go: Fix ucontext_t on PPC64
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/runtime/go-signal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
+index b429fdb2403..fd1c885f043 100644
+--- a/libgo/runtime/go-signal.c
++++ b/libgo/runtime/go-signal.c
+@@ -224,7 +224,7 @@ getSiginfo(siginfo_t *info, void *context __attribute__((unused)))
+ #elif defined(__alpha__) && defined(__linux__)
+ 	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.sc_pc;
+ #elif defined(__PPC__) && defined(__linux__)
+-	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip;
++	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.gp_regs[32];
+ #elif defined(__PPC__) && defined(_AIX)
+ 	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.jmp_context.iar;
+ #elif defined(__aarch64__) && defined(__linux__)
diff --git a/cross/gcc-armhf/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch b/cross/gcc-armhf/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
new file mode 100644
index 0000000000000000000000000000000000000000..528bbb3c211a29afbc86cd0e846d9551aa4b128c
--- /dev/null
+++ b/cross/gcc-armhf/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
@@ -0,0 +1,40 @@
+From 1d0cd9bbbef7d1bd3f42ad493db8d08b539cba60 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:59:45 +0200
+Subject: [PATCH] gcc-go: Fix handling of signal 34 on musl
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/mksigtab.sh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/libgo/mksigtab.sh b/libgo/mksigtab.sh
+index 11e4ec436bd..fe866eacb27 100644
+--- a/libgo/mksigtab.sh
++++ b/libgo/mksigtab.sh
+@@ -82,7 +82,7 @@ checksig _SIGPWR     '{_SigNotify, "SIGPWR: power failure restart"}'
+ checksig _SIGEMT     '{_SigThrow, "SIGEMT: emulate instruction executed"}'
+ checksig _SIGINFO    '{_SigNotify, "SIGINFO: status request from keyboard"}'
+ checksig _SIGTHR     '{_SigNotify, "SIGTHR: reserved"}'
+-checksig _SIGPOLL    '{_SigNotify, "SIGPOLL: pollable event occurred"}'
++#checksig _SIGPOLL    '{_SigNotify, "SIGPOLL: pollable event occurred"}'
+ checksig _SIGWAITING '{_SigNotify, "SIGWAITING: reserved signal no longer used by"}'
+ checksig _SIGLWP     '{_SigNotify, "SIGLWP: reserved signal no longer used by"}'
+ checksig _SIGFREEZE  '{_SigNotify, "SIGFREEZE: special signal used by CPR"}'
+@@ -95,10 +95,12 @@ checksig _SIGLOST '   {_SigNotify, "SIGLOST: resource lost (Sun); server died (G
+ 
+ # Special handling of signals 32 and 33 on GNU/Linux systems,
+ # because they are special to glibc.
++# Signal 34 is additionally special to Linux systems with musl.
+ if test "${GOOS}" = "linux"; then
+-    SIGLIST=$SIGLIST"_32__33_"
++    SIGLIST=$SIGLIST"_32__33__34_"
+     echo '	32: {_SigSetStack + _SigUnblock, "signal 32"}, /* SIGCANCEL; see issue 6997 */'
+     echo '	33: {_SigSetStack + _SigUnblock, "signal 33"}, /* SIGSETXID; see issues 3871, 9400, 12498 */'
++    echo '	34: {_SigSetStack + _SigUnblock, "signal 34"}, /* see issue 30062 */'
+ fi
+ 
+ if test "${GOOS}" = "aix"; then
diff --git a/cross/gcc-armhf/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch b/cross/gcc-armhf/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
new file mode 100644
index 0000000000000000000000000000000000000000..683242458bb316f7177f100d0144baae047c744f
--- /dev/null
+++ b/cross/gcc-armhf/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
@@ -0,0 +1,35 @@
+From 956c8cc94e7aa487eb142905c319487d94dc621d Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:01:03 +0200
+Subject: [PATCH] gcc-go: Use int64 type as offset argument for mmap
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/runtime/mem_gccgo.go | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go
+index ba38ebaa9ab..3c9e5ce9461 100644
+--- a/libgo/go/runtime/mem_gccgo.go
++++ b/libgo/go/runtime/mem_gccgo.go
+@@ -15,7 +15,7 @@ import (
+ //go:linkname sysFree
+ 
+ //extern mmap
+-func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) unsafe.Pointer
++func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off int64) unsafe.Pointer
+ 
+ //extern munmap
+ func munmap(addr unsafe.Pointer, length uintptr) int32
+@@ -37,7 +37,7 @@ func init() {
+ 	}
+ }
+ 
+-func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) (unsafe.Pointer, int) {
++func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off int64) (unsafe.Pointer, int) {
+ 	p := sysMmap(addr, n, prot, flags, fd, off)
+ 	if uintptr(p) == _MAP_FAILED {
+ 		return nil, errno()
diff --git a/cross/gcc-armhf/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch b/cross/gcc-armhf/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
new file mode 100644
index 0000000000000000000000000000000000000000..aa6849135415508a26495c7fe6cff71c848d3a92
--- /dev/null
+++ b/cross/gcc-armhf/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
@@ -0,0 +1,34 @@
+From c3a80843b7502ec2bfb5f1e5b514658c5f9dd884 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:02:28 +0200
+Subject: [PATCH] gcc-go: Fix st_{a,m,c}tim fields in generated sysinfo.go
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There are more than one st_{a,m,c}tim fields in struct stat on time64 machines.
+
+Run the Go-isation on all of them.
+
+Taken from Adélie Linux.
+---
+ libgo/mksysinfo.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
+index bd2ba32cba1..972e2c379bc 100755
+--- a/libgo/mksysinfo.sh
++++ b/libgo/mksysinfo.sh
+@@ -510,9 +510,9 @@ fi | sed -e 's/type _stat64/type Stat_t/' \
+          -e 's/st_size/Size/' \
+          -e 's/st_blksize/Blksize/' \
+          -e 's/st_blocks/Blocks/' \
+-         -e 's/st_atim/Atim/' \
+-         -e 's/st_mtim/Mtim/' \
+-         -e 's/st_ctim/Ctim/' \
++         -e 's/st_atim/Atim/g' \
++         -e 's/st_mtim/Mtim/g' \
++         -e 's/st_ctim/Ctim/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_timeval\([^a-zA-Z0-9_]\)/\1Timeval\2/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_timespec_t\([^a-zA-Z0-9_]\)/\1Timespec\2/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_st_timespec_t\([^a-zA-Z0-9_]\)/\1StTimespec\2/g' \
diff --git a/cross/gcc-armhf/0037-gcc-go-signal-34-is-special-on-musl-libc.patch b/cross/gcc-armhf/0037-gcc-go-signal-34-is-special-on-musl-libc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..89228cf8b52976582d8306ac31f59824796b6f25
--- /dev/null
+++ b/cross/gcc-armhf/0037-gcc-go-signal-34-is-special-on-musl-libc.patch
@@ -0,0 +1,26 @@
+From 75e274b0819c9a77ca121113301d353f7aa91740 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:03:03 +0200
+Subject: [PATCH] gcc-go: signal 34 is special on musl libc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/runtime/signal_gccgo.go | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/go/runtime/signal_gccgo.go b/libgo/go/runtime/signal_gccgo.go
+index c555712a03c..9e228580d37 100644
+--- a/libgo/go/runtime/signal_gccgo.go
++++ b/libgo/go/runtime/signal_gccgo.go
+@@ -106,7 +106,7 @@ func getsig(i uint32) uintptr {
+ 	if sigaction(i, nil, &sa) < 0 {
+ 		// On GNU/Linux glibc rejects attempts to call
+ 		// sigaction with signal 32 (SIGCANCEL) or 33 (SIGSETXID).
+-		if GOOS == "linux" && (i == 32 || i == 33) {
++		if GOOS == "linux" && (i == 32 || i == 33 || i == 34) {
+ 			return _SIG_DFL
+ 		}
+ 		throw("sigaction read failure")
diff --git a/cross/gcc-armhf/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch b/cross/gcc-armhf/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3c21fedaf1263483b673e0c3dd351f56a47d402a
--- /dev/null
+++ b/cross/gcc-armhf/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
@@ -0,0 +1,27 @@
+From ff096af4402ab87a61eb3979b47246a3a1b4fa38 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Sun, 30 Aug 2020 19:26:53 +0200
+Subject: [PATCH] gcc-go: Prefer _off_t over _off64_t
+
+musl does not seem to have _off64_t.
+---
+ libgo/mksysinfo.sh | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
+index 972e2c379bc..8d6da15f983 100755
+--- a/libgo/mksysinfo.sh
++++ b/libgo/mksysinfo.sh
+@@ -379,11 +379,7 @@ fi
+ # Some basic types.
+ echo 'type Size_t _size_t' >> ${OUT}
+ echo "type Ssize_t _ssize_t" >> ${OUT}
+-if grep '^const _HAVE_OFF64_T = ' gen-sysinfo.go > /dev/null 2>&1; then
+-  echo "type Offset_t _off64_t" >> ${OUT}
+-else
+-  echo "type Offset_t _off_t" >> ${OUT}
+-fi
++echo "type Offset_t _off_t" >> ${OUT}
+ echo "type Mode_t _mode_t" >> ${OUT}
+ echo "type Pid_t _pid_t" >> ${OUT}
+ echo "type Uid_t _uid_t" >> ${OUT}
diff --git a/cross/gcc-armhf/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch b/cross/gcc-armhf/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..30995e582bdf43899793cc5aace2e94e6815ee17
--- /dev/null
+++ b/cross/gcc-armhf/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
@@ -0,0 +1,24 @@
+From 56dc7cac03987e95915032161ff0f7d5a8b8bf36 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Sun, 30 Aug 2020 19:27:51 +0200
+Subject: [PATCH] gcc-go: undef SETCONTEXT_CLOBBERS_TLS in proc.c
+
+---
+ libgo/runtime/proc.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c
+index 274ce01c0bf..92a540bdde9 100644
+--- a/libgo/runtime/proc.c
++++ b/libgo/runtime/proc.c
+@@ -66,6 +66,10 @@ static void gscanstack(G*);
+ 
+ __thread G *g __asm__(GOSYM_PREFIX "runtime.g");
+ 
++/* libucontext does not seem to support tlsbase, undef the macro
++ * here to make sure we define initcontext and fixcontext as dummies. */
++#undef SETCONTEXT_CLOBBERS_TLS
++
+ #ifndef SETCONTEXT_CLOBBERS_TLS
+ 
+ static inline void
diff --git a/cross/gcc-armhf/0040-gcc-go-link-to-libucontext.patch b/cross/gcc-armhf/0040-gcc-go-link-to-libucontext.patch
new file mode 100644
index 0000000000000000000000000000000000000000..de59e07f67a4fa8b54d24251adfd0fc87c26a6cc
--- /dev/null
+++ b/cross/gcc-armhf/0040-gcc-go-link-to-libucontext.patch
@@ -0,0 +1,22 @@
+From ead76eced040b588f9374646a188ba21abab2049 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Mon, 31 Aug 2020 08:59:40 +0200
+Subject: [PATCH] gcc-go: link to libucontext
+
+---
+ Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 63627db68cf..c7f1f84d683 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -48823,7 +48823,7 @@ configure-target-libgo:
+ 	esac; \
+ 	module_srcdir=libgo; \
+ 	rm -f no-such-file || : ; \
+-	CONFIG_SITE=no-such-file $(SHELL) \
++	CONFIG_SITE=no-such-file LIBS="-lucontext $$LIBS" $(SHELL) \
+ 	  $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
diff --git a/cross/gcc-armhf/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch b/cross/gcc-armhf/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
new file mode 100644
index 0000000000000000000000000000000000000000..406a74d00618f1827d76a3310d8d9d7dd44d80b4
--- /dev/null
+++ b/cross/gcc-armhf/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
@@ -0,0 +1,23 @@
+From 3f5ee6a593215fbd40975d801ff37cf81a3fced3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Mon, 31 Aug 2020 20:26:56 +0200
+Subject: [PATCH] gcc-go: Disable printing of unaccessible ppc64 struct members
+
+These struct members do not seem to exist on musl.
+---
+ libgo/runtime/go-signal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
+index fd1c885f043..e845e453332 100644
+--- a/libgo/runtime/go-signal.c
++++ b/libgo/runtime/go-signal.c
+@@ -333,7 +333,7 @@ dumpregs(siginfo_t *info __attribute__((unused)), void *context __attribute__((u
+ 		runtime_printf("sp  %X\n", m->sc_regs[30]);
+ 		runtime_printf("pc  %X\n", m->sc_pc);
+ 	  }
+-#elif defined(__PPC__) && defined(__LITTLE_ENDIAN__) && defined(__linux__)
++#elif defined(__PPC__) && defined(__LITTLE_ENDIAN__) && defined(__GLIBC__)
+ 	  {
+ 		mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext;
+ 		int i;
diff --git a/cross/gcc-armhf/APKBUILD b/cross/gcc-armhf/APKBUILD
index 240c2bdd69920573dc443b98e151fcd324e608a7..affa2042fb87316b533b78a307b81e8a654353d4 100644
--- a/cross/gcc-armhf/APKBUILD
+++ b/cross/gcc-armhf/APKBUILD
@@ -30,7 +30,7 @@ pkgver=10.2.0
 [ "$CHOST" != "$CTARGET" ] && _target="-$CTARGET_ARCH" || _target=""
 
 pkgname=gcc-armhf
-pkgrel=2
+pkgrel=3
 pkgdesc="Stage2 cross-compiler for armhf"
 url="https://gcc.gnu.org"
 arch="x86_64"
@@ -117,9 +117,6 @@ fi
 # See libphobos/configure.tgt in GCC sources for supported targets
 [ "$CARCH" = ppc64le ] && LANG_D=false
 
-# Go needs {set,make,swap}context, unimplemented in musl
-[ "$CTARGET_LIBC" = musl ] && LANG_GO=false
-
 # libitm has TEXTRELs in ARM build, so disable for now
 case "$CTARGET_ARCH" in
 arm*)		_libitm=false ;;
@@ -203,6 +200,17 @@ source="https://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkg
 	0028-ada-musl-support-fixes.patch
 	0029-c-Fix-bogus-vector-initialisation-error-PR96377.patch
 	0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch
+	0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
+	0032-gcc-go-Don-t-include-sys-user.h.patch
+	0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
+	0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
+	0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
+	0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
+	0037-gcc-go-signal-34-is-special-on-musl-libc.patch
+	0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
+	0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
+	0040-gcc-go-link-to-libucontext.patch
+	0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
 	"
 
 #	gcc-4.8-build-args.patch
@@ -662,4 +670,15 @@ ac3288b7840e5cf2500608773f40e604798b30fcb885c9fec7ba0bcc4bcfd374211faa26e82fcf46
 59d9e0a5f39ad68b8bb1365f7c97a54ca4751cdad01ead8184fd897d8a13156145976a8b5b9856be154c053d6ba11eaad1e5662e7ddda9ba6d2811340df61cba  0027-ada-libgnarl-compatibility-for-musl.patch
 8207323c530929517c799b24b1a7ba39c07bbb0e6770f878f1d66088ae16667e7706c9402ac04fe5eb6447a6ad12b548cc7e7612c5b217cd24e7d00094d2a28f  0028-ada-musl-support-fixes.patch
 b90f7ad074b6183a4afc6be65349b8bf94b78d1c259d5be9877c16e3de95222fb6905cba7eb6ee4fe1e564ed20bf183c6815bd087896b6b0376656a841736fc1  0029-c-Fix-bogus-vector-initialisation-error-PR96377.patch
-39a66708fb7ab4a72e1973749e32c22484e8e6c0afde6a59a645f2536c71cea86c8de2f0448621d53888293121344e84a24617400fae849282df57e0f5ddc21d  0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch"
+39a66708fb7ab4a72e1973749e32c22484e8e6c0afde6a59a645f2536c71cea86c8de2f0448621d53888293121344e84a24617400fae849282df57e0f5ddc21d  0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch
+ae0d860324b8b907ff82fcebe4777afae19df85b091723ac55425d24f677fb4e1d14ff4f21cdcdf837dcf730a4c48174e0cc31d1d003a5d11a88c226d5ed3e4a  0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
+a08ea6ce516dc96029153de096b96dcd3262509ee546f1f03152abe8f78c11c75b8dc14de39ccd982896114bf33d2edade2b4810dcc0b2d68e4abf52b67b8a41  0032-gcc-go-Don-t-include-sys-user.h.patch
+3bbd3ab3d31fc81cbc6b641919a84807e52b59794f860cad83b9ff69bfd0f5f29aeefc5f19b203bc96db23bf6e5a6958690bd81caa3137eaa5111b5c465273b3  0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
+9c410c3a137a18559f1ae5ab5803d5bc8fc596a93da769b4ff2feec516602eb193333d18d55ce39e054b56726a5c243962e8ccdee001ae7e186b4222465b31a3  0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
+78af84111854f5d2de127f03fc0984ea1f9c2c87156be2c454cc88a6791c90817aed63aba2861657560b1d3bc182a31e3d74f7a946e56d831939870240625fb7  0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
+c0d47b5bc478b3e0943806806d81a9183b9d176148e31c75d50cdbb23a34d9c178d751a3fac743d94ebb44c7eae70d3c55ca115acedcf4a1a0bacf46c0c5cd5f  0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
+e9b523a34b5e2930e0c58ee19e903e5416fe65641df80c40937d445d4c8f4f4bde59b3a94a392f5ca0d1c4a87565bd655c186b3a5194cb5bce4de2864d5d025d  0037-gcc-go-signal-34-is-special-on-musl-libc.patch
+d75147c2b062b0321b36d843c55887673d8bdac6448da465c29853ac5df3b68153551913476f2ea0fdb6d09df3992e47d457e480b3c16d99e6668b4f941e6e16  0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
+a60d2101f49d921cb538fd46650ba550f30721650b40e15fe8a56da32e5f2a3ea62f10d93982ffb45bee2e284cc006141b5d7a96fa12215d63b183b0a67c4c55  0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
+f08cfc9622e84a5a527b626dcca7199a430ab1c02588fef718bcb0155bc5af5a11888aa975e76e55cc2b9b70520a8bf1bcf939e5afe073f6263685686bc9c26f  0040-gcc-go-link-to-libucontext.patch
+f27644461c8a3fd27026873639608e53a396e9b9d39c4f330c8eeba82bb9b1e68ae1bfb82c770424399a13762bb3ec147b2699b2cbbdca07628ab3896d806ce4  0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch"
diff --git a/cross/gcc-armv7/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch b/cross/gcc-armv7/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6c1eb03b96fa6d657995222a7873f73f9fd11cb9
--- /dev/null
+++ b/cross/gcc-armv7/0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
@@ -0,0 +1,45 @@
+From 756d3163d2ee3ee21ad815ab6dfebe58e8c32965 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:58:08 +0200
+Subject: [PATCH] gcc-go: Use _off_t type instead of _loff_t
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/syscall/libcall_linux.go | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go
+index 88286c07b6e..f8f5cfb5011 100644
+--- a/libgo/go/syscall/libcall_linux.go
++++ b/libgo/go/syscall/libcall_linux.go
+@@ -206,19 +206,19 @@ func Gettid() (tid int) {
+ //sys	Setxattr(path string, attr string, data []byte, flags int) (err error)
+ //setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
+ 
+-//sys	splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
+-//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
++//sys	splice(rfd int, roff *_off_t, wfd int, woff *_off_t, len int, flags int) (n int64, err error)
++//splice(rfd _C_int, roff *_off_t, wfd _C_int, woff *_off_t, len Size_t, flags _C_uint) Ssize_t
+ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
+-	var lroff _loff_t
+-	var plroff *_loff_t
++	var lroff _off_t
++	var plroff *_off_t
+ 	if roff != nil {
+-		lroff = _loff_t(*roff)
++		lroff = _off_t(*roff)
+ 		plroff = &lroff
+ 	}
+-	var lwoff _loff_t
+-	var plwoff *_loff_t
++	var lwoff _off_t
++	var plwoff *_off_t
+ 	if woff != nil {
+-		lwoff = _loff_t(*woff)
++		lwoff = _off_t(*woff)
+ 		plwoff = &lwoff
+ 	}
+ 	n, err = splice(rfd, plroff, wfd, plwoff, len, flags)
diff --git a/cross/gcc-armv7/0032-gcc-go-Don-t-include-sys-user.h.patch b/cross/gcc-armv7/0032-gcc-go-Don-t-include-sys-user.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..897dd6ec314d02b68ed79d7178c7432f105c668f
--- /dev/null
+++ b/cross/gcc-armv7/0032-gcc-go-Don-t-include-sys-user.h.patch
@@ -0,0 +1,27 @@
+From ba9db3417c93a42dbf994e7c18c021f5542aa354 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:58:21 +0200
+Subject: [PATCH] gcc-go: Don't include sys/user.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/sysinfo.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/libgo/sysinfo.c b/libgo/sysinfo.c
+index 0692fd41eb7..c8d987358d9 100644
+--- a/libgo/sysinfo.c
++++ b/libgo/sysinfo.c
+@@ -73,9 +73,6 @@
+ #include <sys/times.h>
+ #include <sys/wait.h>
+ #include <sys/un.h>
+-#if defined(HAVE_SYS_USER_H)
+-#include <sys/user.h>
+-#endif
+ #if defined(HAVE_SYS_UTSNAME_H)
+ #include <sys/utsname.h>
+ #endif
diff --git a/cross/gcc-armv7/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch b/cross/gcc-armv7/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4584a3595dd8a990d22a62f46400ecf840823f1a
--- /dev/null
+++ b/cross/gcc-armv7/0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
@@ -0,0 +1,26 @@
+From a2da9c892a6b29a8067f20fda2d8a5e9a7b5193e Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:59:22 +0200
+Subject: [PATCH] gcc-go: Fix ucontext_t on PPC64
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/runtime/go-signal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
+index b429fdb2403..fd1c885f043 100644
+--- a/libgo/runtime/go-signal.c
++++ b/libgo/runtime/go-signal.c
+@@ -224,7 +224,7 @@ getSiginfo(siginfo_t *info, void *context __attribute__((unused)))
+ #elif defined(__alpha__) && defined(__linux__)
+ 	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.sc_pc;
+ #elif defined(__PPC__) && defined(__linux__)
+-	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.regs->nip;
++	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.gp_regs[32];
+ #elif defined(__PPC__) && defined(_AIX)
+ 	ret.sigpc = ((ucontext_t*)(context))->uc_mcontext.jmp_context.iar;
+ #elif defined(__aarch64__) && defined(__linux__)
diff --git a/cross/gcc-armv7/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch b/cross/gcc-armv7/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
new file mode 100644
index 0000000000000000000000000000000000000000..528bbb3c211a29afbc86cd0e846d9551aa4b128c
--- /dev/null
+++ b/cross/gcc-armv7/0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
@@ -0,0 +1,40 @@
+From 1d0cd9bbbef7d1bd3f42ad493db8d08b539cba60 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 17:59:45 +0200
+Subject: [PATCH] gcc-go: Fix handling of signal 34 on musl
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/mksigtab.sh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/libgo/mksigtab.sh b/libgo/mksigtab.sh
+index 11e4ec436bd..fe866eacb27 100644
+--- a/libgo/mksigtab.sh
++++ b/libgo/mksigtab.sh
+@@ -82,7 +82,7 @@ checksig _SIGPWR     '{_SigNotify, "SIGPWR: power failure restart"}'
+ checksig _SIGEMT     '{_SigThrow, "SIGEMT: emulate instruction executed"}'
+ checksig _SIGINFO    '{_SigNotify, "SIGINFO: status request from keyboard"}'
+ checksig _SIGTHR     '{_SigNotify, "SIGTHR: reserved"}'
+-checksig _SIGPOLL    '{_SigNotify, "SIGPOLL: pollable event occurred"}'
++#checksig _SIGPOLL    '{_SigNotify, "SIGPOLL: pollable event occurred"}'
+ checksig _SIGWAITING '{_SigNotify, "SIGWAITING: reserved signal no longer used by"}'
+ checksig _SIGLWP     '{_SigNotify, "SIGLWP: reserved signal no longer used by"}'
+ checksig _SIGFREEZE  '{_SigNotify, "SIGFREEZE: special signal used by CPR"}'
+@@ -95,10 +95,12 @@ checksig _SIGLOST '   {_SigNotify, "SIGLOST: resource lost (Sun); server died (G
+ 
+ # Special handling of signals 32 and 33 on GNU/Linux systems,
+ # because they are special to glibc.
++# Signal 34 is additionally special to Linux systems with musl.
+ if test "${GOOS}" = "linux"; then
+-    SIGLIST=$SIGLIST"_32__33_"
++    SIGLIST=$SIGLIST"_32__33__34_"
+     echo '	32: {_SigSetStack + _SigUnblock, "signal 32"}, /* SIGCANCEL; see issue 6997 */'
+     echo '	33: {_SigSetStack + _SigUnblock, "signal 33"}, /* SIGSETXID; see issues 3871, 9400, 12498 */'
++    echo '	34: {_SigSetStack + _SigUnblock, "signal 34"}, /* see issue 30062 */'
+ fi
+ 
+ if test "${GOOS}" = "aix"; then
diff --git a/cross/gcc-armv7/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch b/cross/gcc-armv7/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
new file mode 100644
index 0000000000000000000000000000000000000000..683242458bb316f7177f100d0144baae047c744f
--- /dev/null
+++ b/cross/gcc-armv7/0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
@@ -0,0 +1,35 @@
+From 956c8cc94e7aa487eb142905c319487d94dc621d Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:01:03 +0200
+Subject: [PATCH] gcc-go: Use int64 type as offset argument for mmap
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/runtime/mem_gccgo.go | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go
+index ba38ebaa9ab..3c9e5ce9461 100644
+--- a/libgo/go/runtime/mem_gccgo.go
++++ b/libgo/go/runtime/mem_gccgo.go
+@@ -15,7 +15,7 @@ import (
+ //go:linkname sysFree
+ 
+ //extern mmap
+-func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) unsafe.Pointer
++func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off int64) unsafe.Pointer
+ 
+ //extern munmap
+ func munmap(addr unsafe.Pointer, length uintptr) int32
+@@ -37,7 +37,7 @@ func init() {
+ 	}
+ }
+ 
+-func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) (unsafe.Pointer, int) {
++func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off int64) (unsafe.Pointer, int) {
+ 	p := sysMmap(addr, n, prot, flags, fd, off)
+ 	if uintptr(p) == _MAP_FAILED {
+ 		return nil, errno()
diff --git a/cross/gcc-armv7/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch b/cross/gcc-armv7/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
new file mode 100644
index 0000000000000000000000000000000000000000..aa6849135415508a26495c7fe6cff71c848d3a92
--- /dev/null
+++ b/cross/gcc-armv7/0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
@@ -0,0 +1,34 @@
+From c3a80843b7502ec2bfb5f1e5b514658c5f9dd884 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:02:28 +0200
+Subject: [PATCH] gcc-go: Fix st_{a,m,c}tim fields in generated sysinfo.go
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There are more than one st_{a,m,c}tim fields in struct stat on time64 machines.
+
+Run the Go-isation on all of them.
+
+Taken from Adélie Linux.
+---
+ libgo/mksysinfo.sh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
+index bd2ba32cba1..972e2c379bc 100755
+--- a/libgo/mksysinfo.sh
++++ b/libgo/mksysinfo.sh
+@@ -510,9 +510,9 @@ fi | sed -e 's/type _stat64/type Stat_t/' \
+          -e 's/st_size/Size/' \
+          -e 's/st_blksize/Blksize/' \
+          -e 's/st_blocks/Blocks/' \
+-         -e 's/st_atim/Atim/' \
+-         -e 's/st_mtim/Mtim/' \
+-         -e 's/st_ctim/Ctim/' \
++         -e 's/st_atim/Atim/g' \
++         -e 's/st_mtim/Mtim/g' \
++         -e 's/st_ctim/Ctim/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_timeval\([^a-zA-Z0-9_]\)/\1Timeval\2/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_timespec_t\([^a-zA-Z0-9_]\)/\1Timespec\2/g' \
+          -e 's/\([^a-zA-Z0-9_]\)_st_timespec_t\([^a-zA-Z0-9_]\)/\1StTimespec\2/g' \
diff --git a/cross/gcc-armv7/0037-gcc-go-signal-34-is-special-on-musl-libc.patch b/cross/gcc-armv7/0037-gcc-go-signal-34-is-special-on-musl-libc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..89228cf8b52976582d8306ac31f59824796b6f25
--- /dev/null
+++ b/cross/gcc-armv7/0037-gcc-go-signal-34-is-special-on-musl-libc.patch
@@ -0,0 +1,26 @@
+From 75e274b0819c9a77ca121113301d353f7aa91740 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Sun, 30 Aug 2020 18:03:03 +0200
+Subject: [PATCH] gcc-go: signal 34 is special on musl libc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Taken from Adélie Linux.
+---
+ libgo/go/runtime/signal_gccgo.go | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/go/runtime/signal_gccgo.go b/libgo/go/runtime/signal_gccgo.go
+index c555712a03c..9e228580d37 100644
+--- a/libgo/go/runtime/signal_gccgo.go
++++ b/libgo/go/runtime/signal_gccgo.go
+@@ -106,7 +106,7 @@ func getsig(i uint32) uintptr {
+ 	if sigaction(i, nil, &sa) < 0 {
+ 		// On GNU/Linux glibc rejects attempts to call
+ 		// sigaction with signal 32 (SIGCANCEL) or 33 (SIGSETXID).
+-		if GOOS == "linux" && (i == 32 || i == 33) {
++		if GOOS == "linux" && (i == 32 || i == 33 || i == 34) {
+ 			return _SIG_DFL
+ 		}
+ 		throw("sigaction read failure")
diff --git a/cross/gcc-armv7/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch b/cross/gcc-armv7/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3c21fedaf1263483b673e0c3dd351f56a47d402a
--- /dev/null
+++ b/cross/gcc-armv7/0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
@@ -0,0 +1,27 @@
+From ff096af4402ab87a61eb3979b47246a3a1b4fa38 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Sun, 30 Aug 2020 19:26:53 +0200
+Subject: [PATCH] gcc-go: Prefer _off_t over _off64_t
+
+musl does not seem to have _off64_t.
+---
+ libgo/mksysinfo.sh | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
+index 972e2c379bc..8d6da15f983 100755
+--- a/libgo/mksysinfo.sh
++++ b/libgo/mksysinfo.sh
+@@ -379,11 +379,7 @@ fi
+ # Some basic types.
+ echo 'type Size_t _size_t' >> ${OUT}
+ echo "type Ssize_t _ssize_t" >> ${OUT}
+-if grep '^const _HAVE_OFF64_T = ' gen-sysinfo.go > /dev/null 2>&1; then
+-  echo "type Offset_t _off64_t" >> ${OUT}
+-else
+-  echo "type Offset_t _off_t" >> ${OUT}
+-fi
++echo "type Offset_t _off_t" >> ${OUT}
+ echo "type Mode_t _mode_t" >> ${OUT}
+ echo "type Pid_t _pid_t" >> ${OUT}
+ echo "type Uid_t _uid_t" >> ${OUT}
diff --git a/cross/gcc-armv7/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch b/cross/gcc-armv7/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..30995e582bdf43899793cc5aace2e94e6815ee17
--- /dev/null
+++ b/cross/gcc-armv7/0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
@@ -0,0 +1,24 @@
+From 56dc7cac03987e95915032161ff0f7d5a8b8bf36 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Sun, 30 Aug 2020 19:27:51 +0200
+Subject: [PATCH] gcc-go: undef SETCONTEXT_CLOBBERS_TLS in proc.c
+
+---
+ libgo/runtime/proc.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c
+index 274ce01c0bf..92a540bdde9 100644
+--- a/libgo/runtime/proc.c
++++ b/libgo/runtime/proc.c
+@@ -66,6 +66,10 @@ static void gscanstack(G*);
+ 
+ __thread G *g __asm__(GOSYM_PREFIX "runtime.g");
+ 
++/* libucontext does not seem to support tlsbase, undef the macro
++ * here to make sure we define initcontext and fixcontext as dummies. */
++#undef SETCONTEXT_CLOBBERS_TLS
++
+ #ifndef SETCONTEXT_CLOBBERS_TLS
+ 
+ static inline void
diff --git a/cross/gcc-armv7/0040-gcc-go-link-to-libucontext.patch b/cross/gcc-armv7/0040-gcc-go-link-to-libucontext.patch
new file mode 100644
index 0000000000000000000000000000000000000000..de59e07f67a4fa8b54d24251adfd0fc87c26a6cc
--- /dev/null
+++ b/cross/gcc-armv7/0040-gcc-go-link-to-libucontext.patch
@@ -0,0 +1,22 @@
+From ead76eced040b588f9374646a188ba21abab2049 Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Mon, 31 Aug 2020 08:59:40 +0200
+Subject: [PATCH] gcc-go: link to libucontext
+
+---
+ Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 63627db68cf..c7f1f84d683 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -48823,7 +48823,7 @@ configure-target-libgo:
+ 	esac; \
+ 	module_srcdir=libgo; \
+ 	rm -f no-such-file || : ; \
+-	CONFIG_SITE=no-such-file $(SHELL) \
++	CONFIG_SITE=no-such-file LIBS="-lucontext $$LIBS" $(SHELL) \
+ 	  $$s/$$module_srcdir/configure \
+ 	  --srcdir=$${topdir}/$$module_srcdir \
+ 	  $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \
diff --git a/cross/gcc-armv7/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch b/cross/gcc-armv7/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
new file mode 100644
index 0000000000000000000000000000000000000000..406a74d00618f1827d76a3310d8d9d7dd44d80b4
--- /dev/null
+++ b/cross/gcc-armv7/0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
@@ -0,0 +1,23 @@
+From 3f5ee6a593215fbd40975d801ff37cf81a3fced3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <soeren+git@soeren-tempel.net>
+Date: Mon, 31 Aug 2020 20:26:56 +0200
+Subject: [PATCH] gcc-go: Disable printing of unaccessible ppc64 struct members
+
+These struct members do not seem to exist on musl.
+---
+ libgo/runtime/go-signal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libgo/runtime/go-signal.c b/libgo/runtime/go-signal.c
+index fd1c885f043..e845e453332 100644
+--- a/libgo/runtime/go-signal.c
++++ b/libgo/runtime/go-signal.c
+@@ -333,7 +333,7 @@ dumpregs(siginfo_t *info __attribute__((unused)), void *context __attribute__((u
+ 		runtime_printf("sp  %X\n", m->sc_regs[30]);
+ 		runtime_printf("pc  %X\n", m->sc_pc);
+ 	  }
+-#elif defined(__PPC__) && defined(__LITTLE_ENDIAN__) && defined(__linux__)
++#elif defined(__PPC__) && defined(__LITTLE_ENDIAN__) && defined(__GLIBC__)
+ 	  {
+ 		mcontext_t *m = &((ucontext_t*)(context))->uc_mcontext;
+ 		int i;
diff --git a/cross/gcc-armv7/APKBUILD b/cross/gcc-armv7/APKBUILD
index 8ffe6283b6e7ccb9fd85e5369a62ce4de9c1c2e3..a011a083adff1a256c3c69d7472cbe166c0226bd 100644
--- a/cross/gcc-armv7/APKBUILD
+++ b/cross/gcc-armv7/APKBUILD
@@ -30,7 +30,7 @@ pkgver=10.2.0
 [ "$CHOST" != "$CTARGET" ] && _target="-$CTARGET_ARCH" || _target=""
 
 pkgname=gcc-armv7
-pkgrel=2
+pkgrel=3
 pkgdesc="Stage2 cross-compiler for armv7"
 url="https://gcc.gnu.org"
 arch="x86_64"
@@ -117,9 +117,6 @@ fi
 # See libphobos/configure.tgt in GCC sources for supported targets
 [ "$CARCH" = ppc64le ] && LANG_D=false
 
-# Go needs {set,make,swap}context, unimplemented in musl
-[ "$CTARGET_LIBC" = musl ] && LANG_GO=false
-
 # libitm has TEXTRELs in ARM build, so disable for now
 case "$CTARGET_ARCH" in
 arm*)		_libitm=false ;;
@@ -203,6 +200,17 @@ source="https://gcc.gnu.org/pub/gcc/releases/gcc-${_pkgbase:-$pkgver}/gcc-${_pkg
 	0028-ada-musl-support-fixes.patch
 	0029-c-Fix-bogus-vector-initialisation-error-PR96377.patch
 	0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch
+	0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
+	0032-gcc-go-Don-t-include-sys-user.h.patch
+	0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
+	0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
+	0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
+	0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
+	0037-gcc-go-signal-34-is-special-on-musl-libc.patch
+	0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
+	0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
+	0040-gcc-go-link-to-libucontext.patch
+	0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch
 	"
 
 #	gcc-4.8-build-args.patch
@@ -662,4 +670,15 @@ ac3288b7840e5cf2500608773f40e604798b30fcb885c9fec7ba0bcc4bcfd374211faa26e82fcf46
 59d9e0a5f39ad68b8bb1365f7c97a54ca4751cdad01ead8184fd897d8a13156145976a8b5b9856be154c053d6ba11eaad1e5662e7ddda9ba6d2811340df61cba  0027-ada-libgnarl-compatibility-for-musl.patch
 8207323c530929517c799b24b1a7ba39c07bbb0e6770f878f1d66088ae16667e7706c9402ac04fe5eb6447a6ad12b548cc7e7612c5b217cd24e7d00094d2a28f  0028-ada-musl-support-fixes.patch
 b90f7ad074b6183a4afc6be65349b8bf94b78d1c259d5be9877c16e3de95222fb6905cba7eb6ee4fe1e564ed20bf183c6815bd087896b6b0376656a841736fc1  0029-c-Fix-bogus-vector-initialisation-error-PR96377.patch
-39a66708fb7ab4a72e1973749e32c22484e8e6c0afde6a59a645f2536c71cea86c8de2f0448621d53888293121344e84a24617400fae849282df57e0f5ddc21d  0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch"
+39a66708fb7ab4a72e1973749e32c22484e8e6c0afde6a59a645f2536c71cea86c8de2f0448621d53888293121344e84a24617400fae849282df57e0f5ddc21d  0030-rs6000-ICE-when-using-an-MMA-type-as-a-function-para.patch
+ae0d860324b8b907ff82fcebe4777afae19df85b091723ac55425d24f677fb4e1d14ff4f21cdcdf837dcf730a4c48174e0cc31d1d003a5d11a88c226d5ed3e4a  0031-gcc-go-Use-_off_t-type-instead-of-_loff_t.patch
+a08ea6ce516dc96029153de096b96dcd3262509ee546f1f03152abe8f78c11c75b8dc14de39ccd982896114bf33d2edade2b4810dcc0b2d68e4abf52b67b8a41  0032-gcc-go-Don-t-include-sys-user.h.patch
+3bbd3ab3d31fc81cbc6b641919a84807e52b59794f860cad83b9ff69bfd0f5f29aeefc5f19b203bc96db23bf6e5a6958690bd81caa3137eaa5111b5c465273b3  0033-gcc-go-Fix-ucontext_t-on-PPC64.patch
+9c410c3a137a18559f1ae5ab5803d5bc8fc596a93da769b4ff2feec516602eb193333d18d55ce39e054b56726a5c243962e8ccdee001ae7e186b4222465b31a3  0034-gcc-go-Fix-handling-of-signal-34-on-musl.patch
+78af84111854f5d2de127f03fc0984ea1f9c2c87156be2c454cc88a6791c90817aed63aba2861657560b1d3bc182a31e3d74f7a946e56d831939870240625fb7  0035-gcc-go-Use-int64-type-as-offset-argument-for-mmap.patch
+c0d47b5bc478b3e0943806806d81a9183b9d176148e31c75d50cdbb23a34d9c178d751a3fac743d94ebb44c7eae70d3c55ca115acedcf4a1a0bacf46c0c5cd5f  0036-gcc-go-Fix-st_-a-m-c-tim-fields-in-generated-sysinfo.patch
+e9b523a34b5e2930e0c58ee19e903e5416fe65641df80c40937d445d4c8f4f4bde59b3a94a392f5ca0d1c4a87565bd655c186b3a5194cb5bce4de2864d5d025d  0037-gcc-go-signal-34-is-special-on-musl-libc.patch
+d75147c2b062b0321b36d843c55887673d8bdac6448da465c29853ac5df3b68153551913476f2ea0fdb6d09df3992e47d457e480b3c16d99e6668b4f941e6e16  0038-gcc-go-Prefer-_off_t-over-_off64_t.patch
+a60d2101f49d921cb538fd46650ba550f30721650b40e15fe8a56da32e5f2a3ea62f10d93982ffb45bee2e284cc006141b5d7a96fa12215d63b183b0a67c4c55  0039-gcc-go-undef-SETCONTEXT_CLOBBERS_TLS-in-proc.c.patch
+f08cfc9622e84a5a527b626dcca7199a430ab1c02588fef718bcb0155bc5af5a11888aa975e76e55cc2b9b70520a8bf1bcf939e5afe073f6263685686bc9c26f  0040-gcc-go-link-to-libucontext.patch
+f27644461c8a3fd27026873639608e53a396e9b9d39c4f330c8eeba82bb9b1e68ae1bfb82c770424399a13762bb3ec147b2699b2cbbdca07628ab3896d806ce4  0041-gcc-go-Disable-printing-of-unaccessible-ppc64-struct.patch"