diff --git a/centos_pkg_dirs b/centos_pkg_dirs index 0ebc555..f251fce 100644 --- a/centos_pkg_dirs +++ b/centos_pkg_dirs @@ -6,4 +6,4 @@ languages/python-2.7.5 languages/golang-1.13.9 languages/golang-1.13.15 languages/golang-1.15.14 -languages/golang-1.16.6 +languages/golang-1.16.12 diff --git a/centos_tarball-dl.lst b/centos_tarball-dl.lst index c41a0ac..ad52d10 100644 --- a/centos_tarball-dl.lst +++ b/centos_tarball-dl.lst @@ -4,4 +4,5 @@ rpm-4.14.0.tar.bz2#rpm-4.14.0#https://ftp.osuosl.org/pub/rpm/releases/rpm-4.14.x go1.13.9.src.tar.gz#go#https://dl.google.com/go/go1.13.9.src.tar.gz##https## go1.13.15.src.tar.gz#go-13.15#https://storage.googleapis.com/golang/go1.13.15.src.tar.gz##https## go1.15.14.src.tar.gz#go-15.14#https://storage.googleapis.com/golang/go1.15.14.src.tar.gz##https## -go1.16.6.src.tar.gz#go-16.6#https://storage.googleapis.com/golang/go1.16.6.src.tar.gz##https## +go1.16.12.src.tar.gz#go-16.12#https://storage.googleapis.com/golang/go1.16.12.src.tar.gz##https## + diff --git a/debian_pkg_dirs b/debian_pkg_dirs index 0c97ec9..1973b64 100644 --- a/debian_pkg_dirs +++ b/debian_pkg_dirs @@ -1,3 +1,3 @@ languages/bash -languages/golang-1.16.6 +languages/golang-1.16.12 tools/golang-dep diff --git a/languages/golang-1.16.6/centos/Readme.rst b/languages/golang-1.16.12/centos/Readme.rst similarity index 100% rename from languages/golang-1.16.6/centos/Readme.rst rename to languages/golang-1.16.12/centos/Readme.rst diff --git a/languages/golang-1.16.6/centos/build_srpm.data b/languages/golang-1.16.12/centos/build_srpm.data similarity index 91% rename from languages/golang-1.16.6/centos/build_srpm.data rename to languages/golang-1.16.12/centos/build_srpm.data index b61d7ce..e0ec537 100644 --- a/languages/golang-1.16.6/centos/build_srpm.data +++ b/languages/golang-1.16.12/centos/build_srpm.data @@ -1,4 +1,4 @@ -VERSION=1.16.6 +VERSION=1.16.12 TAR_NAME=go TAR="$TAR_NAME$VERSION.src.tar.gz" CONTRIB="$TAR_NAME-contrib-v$CON_VERSION.tar.gz" diff --git a/languages/golang-1.16.6/centos/files/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch b/languages/golang-1.16.12/centos/files/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch similarity index 100% rename from languages/golang-1.16.6/centos/files/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch rename to languages/golang-1.16.12/centos/files/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch diff --git a/languages/golang-1.16.6/centos/files/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch b/languages/golang-1.16.12/centos/files/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch similarity index 100% rename from languages/golang-1.16.6/centos/files/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch rename to languages/golang-1.16.12/centos/files/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch diff --git a/languages/golang-1.16.6/centos/files/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch b/languages/golang-1.16.12/centos/files/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch similarity index 100% rename from languages/golang-1.16.6/centos/files/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch rename to languages/golang-1.16.12/centos/files/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch diff --git a/languages/golang-1.16.6/centos/files/fedora.go b/languages/golang-1.16.12/centos/files/fedora.go similarity index 100% rename from languages/golang-1.16.6/centos/files/fedora.go rename to languages/golang-1.16.12/centos/files/fedora.go diff --git a/languages/golang-1.16.6/centos/files/golang-gdbinit b/languages/golang-1.16.12/centos/files/golang-gdbinit similarity index 100% rename from languages/golang-1.16.6/centos/files/golang-gdbinit rename to languages/golang-1.16.12/centos/files/golang-gdbinit diff --git a/languages/golang-1.16.6/centos/files/golang-prelink.conf b/languages/golang-1.16.12/centos/files/golang-prelink.conf similarity index 100% rename from languages/golang-1.16.6/centos/files/golang-prelink.conf rename to languages/golang-1.16.12/centos/files/golang-prelink.conf diff --git a/languages/golang-1.16.6/centos/files/macros.golang b/languages/golang-1.16.12/centos/files/macros.golang similarity index 100% rename from languages/golang-1.16.6/centos/files/macros.golang rename to languages/golang-1.16.12/centos/files/macros.golang diff --git a/languages/golang-1.16.6/centos/golang.spec b/languages/golang-1.16.12/centos/golang.spec similarity index 97% rename from languages/golang-1.16.6/centos/golang.spec rename to languages/golang-1.16.12/centos/golang.spec index 81b44d9..19f6042 100644 --- a/languages/golang-1.16.6/centos/golang.spec +++ b/languages/golang-1.16.12/centos/golang.spec @@ -81,9 +81,9 @@ %endif %global go_api 1.16 -%global go_tar_dir go-16.6 -%global go_version 1.16.6 -%global go_macro_version 1_16_6 +%global go_tar_dir go +%global go_version 1.16.12 +%global go_macro_version 1_16_12 %global obsoletes_name golang # Fedora GOROOT @@ -153,16 +153,16 @@ Obsoletes: %{obsoletes_name} < 1.13 # Bundled/Vendored provides generated by bundled-deps.sh based on the in tree module data # - in version filed substituted with . per versioning guidelines -Provides: bundled(golang(github.com/google/pprof)) = 0.0.0.20201203190320.1bf35d6f28c2 -Provides: bundled(golang(github.com/ianlancetaylor/demangle)) = 0.0.0.20200824232613.28f6c0f3b639 -Provides: bundled(golang(golang.org/x/arch)) = 0.0.0.20201008161808.52c3e6f60cff -Provides: bundled(golang(golang.org/x/crypto)) = 0.0.0.20201016220609.9e8e0b390897 -Provides: bundled(golang(golang.org/x/mod)) = 0.4.1 -Provides: bundled(golang(golang.org/x/net)) = 0.0.0.20201209123823.ac852fbbde11 -Provides: bundled(golang(golang.org/x/sys)) = 0.0.0.20201204225414.ed752295db88 -Provides: bundled(golang(golang.org/x/text)) = 0.3.4 -Provides: bundled(golang(golang.org/x/tools)) = 0.0.0.20210107193943.4ed967dd8eff -Provides: bundled(golang(golang.org/x/xerrors)) = 0.0.0.20200804184101.5ec99f83aff1 +# Provides: bundled(golang(github.com/google/pprof)) = 0.0.0.20201203190320.1bf35d6f28c2 +# Provides: bundled(golang(github.com/ianlancetaylor/demangle)) = 0.0.0.20200824232613.28f6c0f3b639 +# Provides: bundled(golang(golang.org/x/arch)) = 0.0.0.20201008161808.52c3e6f60cff +# Provides: bundled(golang(golang.org/x/crypto)) = 0.0.0.20201016220609.9e8e0b390897 +# Provides: bundled(golang(golang.org/x/mod)) = 0.4.1 +# Provides: bundled(golang(golang.org/x/net)) = 0.0.0.20201209123823.ac852fbbde11 +# Provides: bundled(golang(golang.org/x/sys)) = 0.0.0.20201204225414.ed752295db88 +# Provides: bundled(golang(golang.org/x/text)) = 0.3.4 +# Provides: bundled(golang(golang.org/x/tools)) = 0.0.0.20210107193943.4ed967dd8eff +# Provides: bundled(golang(golang.org/x/xerrors)) = 0.0.0.20200804184101.5ec99f83aff1 Requires: %{name}-bin = %{version}-%{release} Requires: %{name}-src = %{version}-%{release} @@ -170,8 +170,6 @@ Requires: %{name}-src = %{version}-%{release} Patch1: 0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch Patch2: 0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch Patch3: 0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch -# Scheduled backport for go1.16 https://golang.org/cl/316750 by laboger -Patch4: ppc64le-vdso-fix.patch # Having documentation separate was broken Obsoletes: %{obsoletes_name}-docs < 1.13 @@ -311,7 +309,6 @@ Requires: %{name} = %{version}-%{release} %patch1 -p1 %patch2 -p1 %patch3 -p1 -%patch4 -p1 cp %{SOURCE1} ./src/runtime/ diff --git a/languages/golang-1.16.6/centos/golang.spec.orig b/languages/golang-1.16.12/centos/golang.spec.orig similarity index 98% rename from languages/golang-1.16.6/centos/golang.spec.orig rename to languages/golang-1.16.12/centos/golang.spec.orig index 6004ffa..3f514b6 100644 --- a/languages/golang-1.16.6/centos/golang.spec.orig +++ b/languages/golang-1.16.12/centos/golang.spec.orig @@ -106,10 +106,10 @@ %endif %global go_api 1.16 -%global go_version %{go_api}.6 +%global go_version %{go_api}.12 # For rpmdev-bumpspec and releng automation -%global baserelease 2 +%global baserelease 1 Name: golang Version: %{go_version} @@ -158,8 +158,6 @@ Requires: go-srpm-macros Patch1: 0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch Patch2: 0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch Patch3: 0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch -# https://go-review.googlesource.com/c/go/+/334410/ -Patch4: ppc64le-vdso-fix.patch # Having documentation separate was broken Obsoletes: %{name}-docs < 1.1-4 @@ -531,6 +529,30 @@ fi %endif %changelog +* Tue Dec 21 2021 Alejandro Sáez - 1.16.12-1 +- Update to go1.16.12 +- Resolves: rhbz#2030810 +- Resolves: rhbz#2030804 + +* Tue Dec 07 2021 Alejandro Sáez - 1.16.11-1 +- Update to go1.16.11 +- Related: rhbz#2020739 +- Related: rhbz#2020728 +- Related: rhbz#2014923 +- Related: rhbz#2006045 + +* Fri Nov 12 2021 Alejandro Sáez - 1.16.10-1 +- Update to go1.16.10 + +* Mon Sep 13 2021 Alejandro Sáez - 1.16.8-2 +- Fix patch + +* Fri Sep 10 2021 Alejandro Sáez - 1.16.8-1 +- Update to go1.16.8 +- Remove patch: ppc64le-vdso-fix.patch +- Related: rhbz#1937911 +- Related: rhbz#1999415 + * Thu Jul 29 2021 Jakub Čajka - 1.16.6-2 - fix crash in VDSO calls on ppc64le with new kernels diff --git a/languages/golang-1.16.6/debian/deb_patches/0001-golang-add-extra-files-to-the-package-to-keep-aligne.patch b/languages/golang-1.16.12/debian/deb_patches/0001-golang-add-extra-files-to-the-package-to-keep-aligne.patch similarity index 100% rename from languages/golang-1.16.6/debian/deb_patches/0001-golang-add-extra-files-to-the-package-to-keep-aligne.patch rename to languages/golang-1.16.12/debian/deb_patches/0001-golang-add-extra-files-to-the-package-to-keep-aligne.patch diff --git a/languages/golang-1.16.6/debian/deb_patches/series b/languages/golang-1.16.12/debian/deb_patches/series similarity index 100% rename from languages/golang-1.16.6/debian/deb_patches/series rename to languages/golang-1.16.12/debian/deb_patches/series diff --git a/languages/golang-1.16.6/debian/meta_data.yaml b/languages/golang-1.16.12/debian/meta_data.yaml similarity index 89% rename from languages/golang-1.16.6/debian/meta_data.yaml rename to languages/golang-1.16.12/debian/meta_data.yaml index 82069d5..0b37f58 100644 --- a/languages/golang-1.16.6/debian/meta_data.yaml +++ b/languages/golang-1.16.12/debian/meta_data.yaml @@ -1,4 +1,4 @@ -debver: 1.16.6-1 +debver: 1.16.12-1 debname: golang-1.16 archive: http://snapshot.debian.org/archive/debian/20210713T090742Z/pool/main/g/golang-1.16/ revision: diff --git a/languages/golang-1.16.6/debian/patches/0001-Add-fedora.go-to-src-dir.patch b/languages/golang-1.16.12/debian/patches/0001-Add-fedora.go-to-src-dir.patch similarity index 100% rename from languages/golang-1.16.6/debian/patches/0001-Add-fedora.go-to-src-dir.patch rename to languages/golang-1.16.12/debian/patches/0001-Add-fedora.go-to-src-dir.patch diff --git a/languages/golang-1.16.6/debian/patches/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch b/languages/golang-1.16.12/debian/patches/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch similarity index 100% rename from languages/golang-1.16.6/debian/patches/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch rename to languages/golang-1.16.12/debian/patches/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch diff --git a/languages/golang-1.16.6/debian/patches/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch b/languages/golang-1.16.12/debian/patches/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch similarity index 100% rename from languages/golang-1.16.6/debian/patches/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch rename to languages/golang-1.16.12/debian/patches/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch diff --git a/languages/golang-1.16.6/debian/patches/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch b/languages/golang-1.16.12/debian/patches/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch similarity index 100% rename from languages/golang-1.16.6/debian/patches/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch rename to languages/golang-1.16.12/debian/patches/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch diff --git a/languages/golang-1.16.6/debian/patches/series b/languages/golang-1.16.12/debian/patches/series similarity index 90% rename from languages/golang-1.16.6/debian/patches/series rename to languages/golang-1.16.12/debian/patches/series index e343400..c852193 100644 --- a/languages/golang-1.16.6/debian/patches/series +++ b/languages/golang-1.16.12/debian/patches/series @@ -1,5 +1,4 @@ 0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch 0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch 0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch -ppc64le-vdso-fix.patch 0001-Add-fedora.go-to-src-dir.patch diff --git a/languages/golang-1.16.6/centos/files/ppc64le-vdso-fix.patch b/languages/golang-1.16.6/centos/files/ppc64le-vdso-fix.patch deleted file mode 100644 index 0d9fe6f..0000000 --- a/languages/golang-1.16.6/centos/files/ppc64le-vdso-fix.patch +++ /dev/null @@ -1,227 +0,0 @@ -From 7cb7ce3cfae172ff7b128592c3ca9ac591b0f7cb Mon Sep 17 00:00:00 2001 -From: Derek Parker -Date: Thu, 17 Jun 2021 20:22:40 +0000 -Subject: [PATCH] [release-branch.go1.16] runtime: fix crash during VDSO calls on PowerPC - -This patch reinstates a fix for PowerPC with regard to making VDSO calls -while receiving a signal, and subsequently crashing. The crash happens -because certain VDSO calls can modify the r30 register, which is where g -is stored. This change was reverted for PowerPC because r30 is supposed -to be a non-volatile register. This is true, but that only makes a -guarantee across function calls, but not "within" a function call. This -patch was seemingly fine before because the Linux kernel still had hand -rolled assembly VDSO function calls, however with a recent change to C -function calls it seems the compiler used can generate instructions -which temporarily clobber r30. This means that when we receive a signal -during one of these calls the value of r30 will not be the g as the -runtime expects, causing a segfault. - -You can see from this assembly dump how the register is clobbered during -the call: - -(the following is from a 5.13rc2 kernel) - -``` -Dump of assembler code for function __cvdso_clock_gettime_data: - 0x00007ffff7ff0700 <+0>: cmplwi r4,15 - 0x00007ffff7ff0704 <+4>: bgt 0x7ffff7ff07f0 <__cvdso_clock_gettime_data+240> - 0x00007ffff7ff0708 <+8>: li r9,1 - 0x00007ffff7ff070c <+12>: slw r9,r9,r4 - 0x00007ffff7ff0710 <+16>: andi. r10,r9,2179 - 0x00007ffff7ff0714 <+20>: beq 0x7ffff7ff0810 <__cvdso_clock_gettime_data+272> - 0x00007ffff7ff0718 <+24>: rldicr r10,r4,4,59 - 0x00007ffff7ff071c <+28>: lis r9,32767 - 0x00007ffff7ff0720 <+32>: std r30,-16(r1) - 0x00007ffff7ff0724 <+36>: std r31,-8(r1) - 0x00007ffff7ff0728 <+40>: add r6,r3,r10 - 0x00007ffff7ff072c <+44>: ori r4,r9,65535 - 0x00007ffff7ff0730 <+48>: lwz r8,0(r3) - 0x00007ffff7ff0734 <+52>: andi. r9,r8,1 - 0x00007ffff7ff0738 <+56>: bne 0x7ffff7ff07d0 <__cvdso_clock_gettime_data+208> - 0x00007ffff7ff073c <+60>: lwsync - 0x00007ffff7ff0740 <+64>: mftb r30 <---- RIGHT HERE -=> 0x00007ffff7ff0744 <+68>: ld r12,40(r6) -``` - -What I believe is happening is that the kernel changed the PowerPC VDSO -calls to use standard C calls instead of using hand rolled assembly. The -hand rolled assembly calls never touched r30, so this change was safe to -roll back. That does not seem to be the case anymore as on the 5.13rc2 -kernel the compiler *is* generating assembly which modifies r30, making -this change again unsafe and causing a crash when the program receives a -signal during these calls (which will happen often due to async -preempt). This change happened here: -https://lwn.net/ml/linux-kernel/235e5571959cfa89ced081d7e838ed5ff38447d2.1601365870.git.christophe.leroy@csgroup.eu/. - -I realize this was reverted due to unexplained hangs in PowerPC -builders, but I think we should reinstate this change and investigate -those issues separately: -https://github.com/golang/go/commit/f4ca3c1e0a2066ca4f7bd6203866d282ed34acf2 - -Fixes #46858 - -Change-Id: Ib18d7bbfc80a1a9cb558f0098878d41081324b52 -GitHub-Last-Rev: c3002bcfca3ef58b27485e31328e6297b7a9dfe7 -GitHub-Pull-Request: golang/go#46767 -Reviewed-on: https://go-review.googlesource.com/c/go/+/328110 -Run-TryBot: Lynn Boger -TryBot-Result: Go Bot -Reviewed-by: Cherry Mui -Trust: Lynn Boger -(cherry picked from commit 16e82be454cbf41299e6a055d54d489ca4612ee0) ---- - -diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go -index 3f70707..89f936e 100644 ---- a/src/runtime/signal_unix.go -+++ b/src/runtime/signal_unix.go -@@ -381,7 +381,7 @@ - //go:nosplit - func sigFetchG(c *sigctxt) *g { - switch GOARCH { -- case "arm", "arm64": -+ case "arm", "arm64", "ppc64", "ppc64le": - if !iscgo && inVDSOPage(c.sigpc()) { - // When using cgo, we save the g on TLS and load it from there - // in sigtramp. Just use that. -diff --git a/src/runtime/sys_linux_ppc64x.s b/src/runtime/sys_linux_ppc64x.s -index fd69ee7..7be8c4c 100644 ---- a/src/runtime/sys_linux_ppc64x.s -+++ b/src/runtime/sys_linux_ppc64x.s -@@ -215,15 +215,45 @@ - MOVD (g_sched+gobuf_sp)(R7), R1 // Set SP to g0 stack - - noswitch: -- SUB $16, R1 // Space for results -- RLDICR $0, R1, $59, R1 // Align for C code -+ SUB $16, R1 // Space for results -+ RLDICR $0, R1, $59, R1 // Align for C code - MOVD R12, CTR - MOVD R1, R4 -- BL (CTR) // Call from VDSO -- MOVD $0, R0 // Restore R0 -- MOVD 0(R1), R3 // sec -- MOVD 8(R1), R5 // nsec -- MOVD R15, R1 // Restore SP -+ -+ // Store g on gsignal's stack, so if we receive a signal -+ // during VDSO code we can find the g. -+ // If we don't have a signal stack, we won't receive signal, -+ // so don't bother saving g. -+ // When using cgo, we already saved g on TLS, also don't save -+ // g here. -+ // Also don't save g if we are already on the signal stack. -+ // We won't get a nested signal. -+ MOVBZ runtime·iscgo(SB), R22 -+ CMP R22, $0 -+ BNE nosaveg -+ MOVD m_gsignal(R21), R22 // g.m.gsignal -+ CMP R22, $0 -+ BEQ nosaveg -+ -+ CMP g, R22 -+ BEQ nosaveg -+ MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo -+ MOVD g, (R22) -+ -+ BL (CTR) // Call from VDSO -+ -+ MOVD $0, (R22) // clear g slot, R22 is unchanged by C code -+ -+ JMP finish -+ -+nosaveg: -+ BL (CTR) // Call from VDSO -+ -+finish: -+ MOVD $0, R0 // Restore R0 -+ MOVD 0(R1), R3 // sec -+ MOVD 8(R1), R5 // nsec -+ MOVD R15, R1 // Restore SP - - // Restore vdsoPC, vdsoSP - // We don't worry about being signaled between the two stores. -@@ -235,7 +265,7 @@ - MOVD 32(R1), R6 - MOVD R6, m_vdsoPC(R21) - --finish: -+return: - MOVD R3, sec+0(FP) - MOVW R5, nsec+8(FP) - RET -@@ -246,7 +276,7 @@ - SYSCALL $SYS_clock_gettime - MOVD 32(R1), R3 - MOVD 40(R1), R5 -- JMP finish -+ JMP return - - TEXT runtime·nanotime1(SB),NOSPLIT,$16-8 - MOVD $1, R3 // CLOCK_MONOTONIC -@@ -282,7 +312,37 @@ - RLDICR $0, R1, $59, R1 // Align for C code - MOVD R12, CTR - MOVD R1, R4 -- BL (CTR) // Call from VDSO -+ -+ // Store g on gsignal's stack, so if we receive a signal -+ // during VDSO code we can find the g. -+ // If we don't have a signal stack, we won't receive signal, -+ // so don't bother saving g. -+ // When using cgo, we already saved g on TLS, also don't save -+ // g here. -+ // Also don't save g if we are already on the signal stack. -+ // We won't get a nested signal. -+ MOVBZ runtime·iscgo(SB), R22 -+ CMP R22, $0 -+ BNE nosaveg -+ MOVD m_gsignal(R21), R22 // g.m.gsignal -+ CMP R22, $0 -+ BEQ nosaveg -+ -+ CMP g, R22 -+ BEQ nosaveg -+ MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo -+ MOVD g, (R22) -+ -+ BL (CTR) // Call from VDSO -+ -+ MOVD $0, (R22) // clear g slot, R22 is unchanged by C code -+ -+ JMP finish -+ -+nosaveg: -+ BL (CTR) // Call from VDSO -+ -+finish: - MOVD $0, R0 // Restore R0 - MOVD 0(R1), R3 // sec - MOVD 8(R1), R5 // nsec -@@ -298,7 +358,7 @@ - MOVD 32(R1), R6 - MOVD R6, m_vdsoPC(R21) - --finish: -+return: - // sec is in R3, nsec in R5 - // return nsec in R3 - MOVD $1000000000, R4 -@@ -313,7 +373,7 @@ - SYSCALL $SYS_clock_gettime - MOVD 32(R1), R3 - MOVD 40(R1), R5 -- JMP finish -+ JMP return - - TEXT runtime·rtsigprocmask(SB),NOSPLIT|NOFRAME,$0-28 - MOVW how+0(FP), R3 -@@ -366,7 +426,7 @@ - // this might be called in external code context, - // where g is not set. - MOVBZ runtime·iscgo(SB), R6 -- CMP R6, $0 -+ CMP R6, $0 - BEQ 2(PC) - BL runtime·load_g(SB) - diff --git a/languages/golang-1.16.6/debian/patches/ppc64le-vdso-fix.patch b/languages/golang-1.16.6/debian/patches/ppc64le-vdso-fix.patch deleted file mode 100644 index 0d9fe6f..0000000 --- a/languages/golang-1.16.6/debian/patches/ppc64le-vdso-fix.patch +++ /dev/null @@ -1,227 +0,0 @@ -From 7cb7ce3cfae172ff7b128592c3ca9ac591b0f7cb Mon Sep 17 00:00:00 2001 -From: Derek Parker -Date: Thu, 17 Jun 2021 20:22:40 +0000 -Subject: [PATCH] [release-branch.go1.16] runtime: fix crash during VDSO calls on PowerPC - -This patch reinstates a fix for PowerPC with regard to making VDSO calls -while receiving a signal, and subsequently crashing. The crash happens -because certain VDSO calls can modify the r30 register, which is where g -is stored. This change was reverted for PowerPC because r30 is supposed -to be a non-volatile register. This is true, but that only makes a -guarantee across function calls, but not "within" a function call. This -patch was seemingly fine before because the Linux kernel still had hand -rolled assembly VDSO function calls, however with a recent change to C -function calls it seems the compiler used can generate instructions -which temporarily clobber r30. This means that when we receive a signal -during one of these calls the value of r30 will not be the g as the -runtime expects, causing a segfault. - -You can see from this assembly dump how the register is clobbered during -the call: - -(the following is from a 5.13rc2 kernel) - -``` -Dump of assembler code for function __cvdso_clock_gettime_data: - 0x00007ffff7ff0700 <+0>: cmplwi r4,15 - 0x00007ffff7ff0704 <+4>: bgt 0x7ffff7ff07f0 <__cvdso_clock_gettime_data+240> - 0x00007ffff7ff0708 <+8>: li r9,1 - 0x00007ffff7ff070c <+12>: slw r9,r9,r4 - 0x00007ffff7ff0710 <+16>: andi. r10,r9,2179 - 0x00007ffff7ff0714 <+20>: beq 0x7ffff7ff0810 <__cvdso_clock_gettime_data+272> - 0x00007ffff7ff0718 <+24>: rldicr r10,r4,4,59 - 0x00007ffff7ff071c <+28>: lis r9,32767 - 0x00007ffff7ff0720 <+32>: std r30,-16(r1) - 0x00007ffff7ff0724 <+36>: std r31,-8(r1) - 0x00007ffff7ff0728 <+40>: add r6,r3,r10 - 0x00007ffff7ff072c <+44>: ori r4,r9,65535 - 0x00007ffff7ff0730 <+48>: lwz r8,0(r3) - 0x00007ffff7ff0734 <+52>: andi. r9,r8,1 - 0x00007ffff7ff0738 <+56>: bne 0x7ffff7ff07d0 <__cvdso_clock_gettime_data+208> - 0x00007ffff7ff073c <+60>: lwsync - 0x00007ffff7ff0740 <+64>: mftb r30 <---- RIGHT HERE -=> 0x00007ffff7ff0744 <+68>: ld r12,40(r6) -``` - -What I believe is happening is that the kernel changed the PowerPC VDSO -calls to use standard C calls instead of using hand rolled assembly. The -hand rolled assembly calls never touched r30, so this change was safe to -roll back. That does not seem to be the case anymore as on the 5.13rc2 -kernel the compiler *is* generating assembly which modifies r30, making -this change again unsafe and causing a crash when the program receives a -signal during these calls (which will happen often due to async -preempt). This change happened here: -https://lwn.net/ml/linux-kernel/235e5571959cfa89ced081d7e838ed5ff38447d2.1601365870.git.christophe.leroy@csgroup.eu/. - -I realize this was reverted due to unexplained hangs in PowerPC -builders, but I think we should reinstate this change and investigate -those issues separately: -https://github.com/golang/go/commit/f4ca3c1e0a2066ca4f7bd6203866d282ed34acf2 - -Fixes #46858 - -Change-Id: Ib18d7bbfc80a1a9cb558f0098878d41081324b52 -GitHub-Last-Rev: c3002bcfca3ef58b27485e31328e6297b7a9dfe7 -GitHub-Pull-Request: golang/go#46767 -Reviewed-on: https://go-review.googlesource.com/c/go/+/328110 -Run-TryBot: Lynn Boger -TryBot-Result: Go Bot -Reviewed-by: Cherry Mui -Trust: Lynn Boger -(cherry picked from commit 16e82be454cbf41299e6a055d54d489ca4612ee0) ---- - -diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go -index 3f70707..89f936e 100644 ---- a/src/runtime/signal_unix.go -+++ b/src/runtime/signal_unix.go -@@ -381,7 +381,7 @@ - //go:nosplit - func sigFetchG(c *sigctxt) *g { - switch GOARCH { -- case "arm", "arm64": -+ case "arm", "arm64", "ppc64", "ppc64le": - if !iscgo && inVDSOPage(c.sigpc()) { - // When using cgo, we save the g on TLS and load it from there - // in sigtramp. Just use that. -diff --git a/src/runtime/sys_linux_ppc64x.s b/src/runtime/sys_linux_ppc64x.s -index fd69ee7..7be8c4c 100644 ---- a/src/runtime/sys_linux_ppc64x.s -+++ b/src/runtime/sys_linux_ppc64x.s -@@ -215,15 +215,45 @@ - MOVD (g_sched+gobuf_sp)(R7), R1 // Set SP to g0 stack - - noswitch: -- SUB $16, R1 // Space for results -- RLDICR $0, R1, $59, R1 // Align for C code -+ SUB $16, R1 // Space for results -+ RLDICR $0, R1, $59, R1 // Align for C code - MOVD R12, CTR - MOVD R1, R4 -- BL (CTR) // Call from VDSO -- MOVD $0, R0 // Restore R0 -- MOVD 0(R1), R3 // sec -- MOVD 8(R1), R5 // nsec -- MOVD R15, R1 // Restore SP -+ -+ // Store g on gsignal's stack, so if we receive a signal -+ // during VDSO code we can find the g. -+ // If we don't have a signal stack, we won't receive signal, -+ // so don't bother saving g. -+ // When using cgo, we already saved g on TLS, also don't save -+ // g here. -+ // Also don't save g if we are already on the signal stack. -+ // We won't get a nested signal. -+ MOVBZ runtime·iscgo(SB), R22 -+ CMP R22, $0 -+ BNE nosaveg -+ MOVD m_gsignal(R21), R22 // g.m.gsignal -+ CMP R22, $0 -+ BEQ nosaveg -+ -+ CMP g, R22 -+ BEQ nosaveg -+ MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo -+ MOVD g, (R22) -+ -+ BL (CTR) // Call from VDSO -+ -+ MOVD $0, (R22) // clear g slot, R22 is unchanged by C code -+ -+ JMP finish -+ -+nosaveg: -+ BL (CTR) // Call from VDSO -+ -+finish: -+ MOVD $0, R0 // Restore R0 -+ MOVD 0(R1), R3 // sec -+ MOVD 8(R1), R5 // nsec -+ MOVD R15, R1 // Restore SP - - // Restore vdsoPC, vdsoSP - // We don't worry about being signaled between the two stores. -@@ -235,7 +265,7 @@ - MOVD 32(R1), R6 - MOVD R6, m_vdsoPC(R21) - --finish: -+return: - MOVD R3, sec+0(FP) - MOVW R5, nsec+8(FP) - RET -@@ -246,7 +276,7 @@ - SYSCALL $SYS_clock_gettime - MOVD 32(R1), R3 - MOVD 40(R1), R5 -- JMP finish -+ JMP return - - TEXT runtime·nanotime1(SB),NOSPLIT,$16-8 - MOVD $1, R3 // CLOCK_MONOTONIC -@@ -282,7 +312,37 @@ - RLDICR $0, R1, $59, R1 // Align for C code - MOVD R12, CTR - MOVD R1, R4 -- BL (CTR) // Call from VDSO -+ -+ // Store g on gsignal's stack, so if we receive a signal -+ // during VDSO code we can find the g. -+ // If we don't have a signal stack, we won't receive signal, -+ // so don't bother saving g. -+ // When using cgo, we already saved g on TLS, also don't save -+ // g here. -+ // Also don't save g if we are already on the signal stack. -+ // We won't get a nested signal. -+ MOVBZ runtime·iscgo(SB), R22 -+ CMP R22, $0 -+ BNE nosaveg -+ MOVD m_gsignal(R21), R22 // g.m.gsignal -+ CMP R22, $0 -+ BEQ nosaveg -+ -+ CMP g, R22 -+ BEQ nosaveg -+ MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo -+ MOVD g, (R22) -+ -+ BL (CTR) // Call from VDSO -+ -+ MOVD $0, (R22) // clear g slot, R22 is unchanged by C code -+ -+ JMP finish -+ -+nosaveg: -+ BL (CTR) // Call from VDSO -+ -+finish: - MOVD $0, R0 // Restore R0 - MOVD 0(R1), R3 // sec - MOVD 8(R1), R5 // nsec -@@ -298,7 +358,7 @@ - MOVD 32(R1), R6 - MOVD R6, m_vdsoPC(R21) - --finish: -+return: - // sec is in R3, nsec in R5 - // return nsec in R3 - MOVD $1000000000, R4 -@@ -313,7 +373,7 @@ - SYSCALL $SYS_clock_gettime - MOVD 32(R1), R3 - MOVD 40(R1), R5 -- JMP finish -+ JMP return - - TEXT runtime·rtsigprocmask(SB),NOSPLIT|NOFRAME,$0-28 - MOVW how+0(FP), R3 -@@ -366,7 +426,7 @@ - // this might be called in external code context, - // where g is not set. - MOVBZ runtime·iscgo(SB), R6 -- CMP R6, $0 -+ CMP R6, $0 - BEQ 2(PC) - BL runtime·load_g(SB) -