From 1c369d087b9579baa06abc048d6181bf9da5cc60 Mon Sep 17 00:00:00 2001 From: Chris Friesen Date: Fri, 7 Jan 2022 20:09:51 -0500 Subject: [PATCH] Replace golang 1.16.6 with 1.16.12 In order to add kubernetes 1.21.8 we need to add support for golang 1.16.12. We're going to be removing kubernetes 1.21.3 so we no longer need golang 1.16.6. The ppc64le-vdso-fix.patch patch was merged upstream and so is no longer applicable. No direct testing is possible, but it is tested indirectly by building and testing Kubernetes 1.21.8. Partial-Bug: 1957994 Signed-off-by: Chris Friesen Change-Id: I25d18ee9c7e6a2a2aaa72c896b4687768804fa30 --- centos_pkg_dirs | 2 +- centos_tarball-dl.lst | 3 +- debian_pkg_dirs | 2 +- .../centos/Readme.rst | 0 .../centos/build_srpm.data | 2 +- ...ndled-tzdata-at-runtime-except-for-t.patch | 0 ...expose-IfInfomsg.X__ifi_pad-on-s390x.patch | 0 ...-go-disable-Google-s-proxy-and-sumdb.patch | 0 .../centos/files/fedora.go | 0 .../centos/files/golang-gdbinit | 0 .../centos/files/golang-prelink.conf | 0 .../centos/files/macros.golang | 0 .../centos/golang.spec | 29 +-- .../centos/golang.spec.orig | 30 ++- ...-files-to-the-package-to-keep-aligne.patch | 0 .../debian/deb_patches/series | 0 .../debian/meta_data.yaml | 2 +- .../0001-Add-fedora.go-to-src-dir.patch | 0 ...ndled-tzdata-at-runtime-except-for-t.patch | 0 ...expose-IfInfomsg.X__ifi_pad-on-s390x.patch | 0 ...-go-disable-Google-s-proxy-and-sumdb.patch | 0 .../debian/patches/series | 1 - .../centos/files/ppc64le-vdso-fix.patch | 227 ------------------ .../debian/patches/ppc64le-vdso-fix.patch | 227 ------------------ 24 files changed, 45 insertions(+), 480 deletions(-) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/Readme.rst (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/build_srpm.data (91%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/files/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/files/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/files/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/files/fedora.go (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/files/golang-gdbinit (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/files/golang-prelink.conf (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/files/macros.golang (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/golang.spec (97%) rename languages/{golang-1.16.6 => golang-1.16.12}/centos/golang.spec.orig (98%) rename languages/{golang-1.16.6 => golang-1.16.12}/debian/deb_patches/0001-golang-add-extra-files-to-the-package-to-keep-aligne.patch (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/debian/deb_patches/series (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/debian/meta_data.yaml (89%) rename languages/{golang-1.16.6 => golang-1.16.12}/debian/patches/0001-Add-fedora.go-to-src-dir.patch (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/debian/patches/0001-Don-t-use-the-bundled-tzdata-at-runtime-except-for-t.patch (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/debian/patches/0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/debian/patches/0003-cmd-go-disable-Google-s-proxy-and-sumdb.patch (100%) rename languages/{golang-1.16.6 => golang-1.16.12}/debian/patches/series (90%) delete mode 100644 languages/golang-1.16.6/centos/files/ppc64le-vdso-fix.patch delete mode 100644 languages/golang-1.16.6/debian/patches/ppc64le-vdso-fix.patch 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) -