import golang-1.18.10-1.module+el8.7.0+18302+aa634922
This commit is contained in:
parent
61d02fbf0e
commit
00b4a8b35b
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/go1.18.9-1-openssl-fips.tar.gz
|
SOURCES/go1.18.10-1-openssl-fips.tar.gz
|
||||||
|
@ -1 +1 @@
|
|||||||
ed6295dd73f7b822cd89f4527797ce87271bc672 SOURCES/go1.18.9-1-openssl-fips.tar.gz
|
d12404b2ef5e4e0ed1d9f735cb487812c1c6ceb1 SOURCES/go1.18.10-1-openssl-fips.tar.gz
|
||||||
|
@ -1,160 +0,0 @@
|
|||||||
From 63dd776220bb3a443e6b5c0766a389ec33dc4b69 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Paul E. Murphy" <murp@ibm.com>
|
|
||||||
Date: Wed, 16 Nov 2022 14:53:39 -0600
|
|
||||||
Subject: [PATCH] [release-branch.go1.18] cmd/link/internal/ppc64: fix
|
|
||||||
trampoline reuse distance calculation
|
|
||||||
|
|
||||||
If a compatible trampoline has been inserted by a previously laid
|
|
||||||
function in the same section, and is known to be sufficiently close,
|
|
||||||
it can be reused.
|
|
||||||
|
|
||||||
When testing if the trampoline can be reused, the addend of the direct
|
|
||||||
call should be ignored. It is already encoded in the trampoline. If the
|
|
||||||
addend is non-zero, and the target sufficiently far away, and just
|
|
||||||
beyond direct call reach, this may cause the trampoline to be
|
|
||||||
incorrectly reused.
|
|
||||||
|
|
||||||
This was observed on go1.17.13 and openshift-installer commit f3c53b382
|
|
||||||
building in release mode with the following error:
|
|
||||||
|
|
||||||
github.com/aliyun/alibaba-cloud-sdk-go/services/cms.(*Client).DescribeMonitoringAgentAccessKeyWithChan.func1: direct call too far: runtime.duffzero+1f0-tramp0-1 -2000078
|
|
||||||
|
|
||||||
Fixes #56833
|
|
||||||
|
|
||||||
Change-Id: I54af957302506d4e3cd5d3121542c83fe980e912
|
|
||||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/451415
|
|
||||||
Reviewed-by: Cherry Mui <cherryyz@google.com>
|
|
||||||
Run-TryBot: Paul Murphy <murp@ibm.com>
|
|
||||||
TryBot-Result: Gopher Robot <gobot@golang.org>
|
|
||||||
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
|
|
||||||
Reviewed-by: Than McIntosh <thanm@google.com>
|
|
||||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/451916
|
|
||||||
Reviewed-by: Joedian Reid <joedian@golang.org>
|
|
||||||
---
|
|
||||||
.../testdata/script/trampoline_reuse_test.txt | 100 ++++++++++++++++++
|
|
||||||
src/cmd/link/internal/ppc64/asm.go | 5 +-
|
|
||||||
2 files changed, 103 insertions(+), 2 deletions(-)
|
|
||||||
create mode 100644 src/cmd/go/testdata/script/trampoline_reuse_test.txt
|
|
||||||
|
|
||||||
diff --git a/src/cmd/go/testdata/script/trampoline_reuse_test.txt b/src/cmd/go/testdata/script/trampoline_reuse_test.txt
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000000000..bca897c16d054
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/cmd/go/testdata/script/trampoline_reuse_test.txt
|
|
||||||
@@ -0,0 +1,100 @@
|
|
||||||
+# Verify PPC64 does not reuse a trampoline which is too far away.
|
|
||||||
+# This tests an edge case where the direct call relocation addend should
|
|
||||||
+# be ignored when computing the distance from the direct call to the
|
|
||||||
+# already placed trampoline
|
|
||||||
+[short] skip
|
|
||||||
+[!ppc64] [!ppc64le] skip
|
|
||||||
+[aix] skip
|
|
||||||
+
|
|
||||||
+# Note, this program does not run. Presumably, 'DWORD $0' is simpler to
|
|
||||||
+# assembly 2^26 or so times.
|
|
||||||
+#
|
|
||||||
+# We build something which should be laid out as such:
|
|
||||||
+#
|
|
||||||
+# bar.Bar
|
|
||||||
+# main.Func1
|
|
||||||
+# bar.Bar+400-tramp0
|
|
||||||
+# main.BigAsm
|
|
||||||
+# main.Func2
|
|
||||||
+# bar.Bar+400-tramp1
|
|
||||||
+#
|
|
||||||
+# bar.Bar needs to be placed far enough away to generate relocations
|
|
||||||
+# from main package calls. and main.Func1 and main.Func2 are placed
|
|
||||||
+# a bit more than the direct call limit apart, but not more than 0x400
|
|
||||||
+# bytes beyond it (to verify the reloc calc).
|
|
||||||
+
|
|
||||||
+go build
|
|
||||||
+
|
|
||||||
+-- go.mod --
|
|
||||||
+
|
|
||||||
+module foo
|
|
||||||
+
|
|
||||||
+go 1.19
|
|
||||||
+
|
|
||||||
+-- main.go --
|
|
||||||
+
|
|
||||||
+package main
|
|
||||||
+
|
|
||||||
+import "foo/bar"
|
|
||||||
+
|
|
||||||
+func Func1()
|
|
||||||
+
|
|
||||||
+func main() {
|
|
||||||
+ Func1()
|
|
||||||
+ bar.Bar2()
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+-- foo.s --
|
|
||||||
+
|
|
||||||
+TEXT main·Func1(SB),0,$0-0
|
|
||||||
+ CALL bar·Bar+0x400(SB)
|
|
||||||
+ CALL main·BigAsm(SB)
|
|
||||||
+// A trampoline will be placed here to bar.Bar
|
|
||||||
+
|
|
||||||
+// This creates a gap sufficiently large to prevent trampoline reuse
|
|
||||||
+#define NOP64 DWORD $0; DWORD $0; DWORD $0; DWORD $0; DWORD $0; DWORD $0; DWORD $0; DWORD $0;
|
|
||||||
+#define NOP256 NOP64 NOP64 NOP64 NOP64
|
|
||||||
+#define NOP2S10 NOP256 NOP256 NOP256 NOP256
|
|
||||||
+#define NOP2S12 NOP2S10 NOP2S10 NOP2S10 NOP2S10
|
|
||||||
+#define NOP2S14 NOP2S12 NOP2S12 NOP2S12 NOP2S12
|
|
||||||
+#define NOP2S16 NOP2S14 NOP2S14 NOP2S14 NOP2S14
|
|
||||||
+#define NOP2S18 NOP2S16 NOP2S16 NOP2S16 NOP2S16
|
|
||||||
+#define NOP2S20 NOP2S18 NOP2S18 NOP2S18 NOP2S18
|
|
||||||
+#define NOP2S22 NOP2S20 NOP2S20 NOP2S20 NOP2S20
|
|
||||||
+#define NOP2S24 NOP2S22 NOP2S22 NOP2S22 NOP2S22
|
|
||||||
+#define BIGNOP NOP2S24 NOP2S24
|
|
||||||
+TEXT main·BigAsm(SB),0,$0-0
|
|
||||||
+ // Fill to the direct call limit so Func2 must generate a new trampoline.
|
|
||||||
+ // As the implicit trampoline above is just barely unreachable.
|
|
||||||
+ BIGNOP
|
|
||||||
+ MOVD $main·Func2(SB), R3
|
|
||||||
+
|
|
||||||
+TEXT main·Func2(SB),0,$0-0
|
|
||||||
+ CALL bar·Bar+0x400(SB)
|
|
||||||
+// Another trampoline should be placed here.
|
|
||||||
+
|
|
||||||
+-- bar/bar.s --
|
|
||||||
+
|
|
||||||
+#define NOP64 DWORD $0; DWORD $0; DWORD $0; DWORD $0; DWORD $0; DWORD $0; DWORD $0; DWORD $0;
|
|
||||||
+#define NOP256 NOP64 NOP64 NOP64 NOP64
|
|
||||||
+#define NOP2S10 NOP256 NOP256 NOP256 NOP256
|
|
||||||
+#define NOP2S12 NOP2S10 NOP2S10 NOP2S10 NOP2S10
|
|
||||||
+#define NOP2S14 NOP2S12 NOP2S12 NOP2S12 NOP2S12
|
|
||||||
+#define NOP2S16 NOP2S14 NOP2S14 NOP2S14 NOP2S14
|
|
||||||
+#define NOP2S18 NOP2S16 NOP2S16 NOP2S16 NOP2S16
|
|
||||||
+#define NOP2S20 NOP2S18 NOP2S18 NOP2S18 NOP2S18
|
|
||||||
+#define NOP2S22 NOP2S20 NOP2S20 NOP2S20 NOP2S20
|
|
||||||
+#define NOP2S24 NOP2S22 NOP2S22 NOP2S22 NOP2S22
|
|
||||||
+#define BIGNOP NOP2S24 NOP2S24 NOP2S10
|
|
||||||
+// A very big not very interesting function.
|
|
||||||
+TEXT bar·Bar(SB),0,$0-0
|
|
||||||
+ BIGNOP
|
|
||||||
+
|
|
||||||
+-- bar/bar.go --
|
|
||||||
+
|
|
||||||
+package bar
|
|
||||||
+
|
|
||||||
+func Bar()
|
|
||||||
+
|
|
||||||
+func Bar2() {
|
|
||||||
+}
|
|
||||||
diff --git a/src/cmd/link/internal/ppc64/asm.go b/src/cmd/link/internal/ppc64/asm.go
|
|
||||||
index 73c2718a3369f..879adaa965050 100644
|
|
||||||
--- a/src/cmd/link/internal/ppc64/asm.go
|
|
||||||
+++ b/src/cmd/link/internal/ppc64/asm.go
|
|
||||||
@@ -809,8 +809,9 @@ func trampoline(ctxt *ld.Link, ldr *loader.Loader, ri int, rs, s loader.Sym) {
|
|
||||||
if ldr.SymValue(tramp) == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- t = ldr.SymValue(tramp) + r.Add() - (ldr.SymValue(s) + int64(r.Off()))
|
|
||||||
+ // Note, the trampoline is always called directly. The addend of the original relocation is accounted for in the
|
|
||||||
+ // trampoline itself.
|
|
||||||
+ t = ldr.SymValue(tramp) - (ldr.SymValue(s) + int64(r.Off()))
|
|
||||||
|
|
||||||
// With internal linking, the trampoline can be used if it is not too far.
|
|
||||||
// With external linking, the trampoline must be in this section for it to be reused.
|
|
@ -96,7 +96,7 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%global go_api 1.18
|
%global go_api 1.18
|
||||||
%global go_version 1.18.9
|
%global go_version 1.18.10
|
||||||
%global pkg_release 1
|
%global pkg_release 1
|
||||||
|
|
||||||
Name: golang
|
Name: golang
|
||||||
@ -147,7 +147,6 @@ Patch223: remove_ed25519vectors_test.patch
|
|||||||
|
|
||||||
Patch227: cmd-link-use-correct-path-for-dynamic-loader-on-ppc6.patch
|
Patch227: cmd-link-use-correct-path-for-dynamic-loader-on-ppc6.patch
|
||||||
|
|
||||||
Patch228: do-not-reuse-far-trampolines.patch
|
|
||||||
Patch229: big-endian.patch
|
Patch229: big-endian.patch
|
||||||
|
|
||||||
# Having documentation separate was broken
|
# Having documentation separate was broken
|
||||||
@ -244,7 +243,6 @@ Requires: %{name} = %{version}-%{release}
|
|||||||
%patch223 -p1
|
%patch223 -p1
|
||||||
%patch226 -p1
|
%patch226 -p1
|
||||||
%patch227 -p1
|
%patch227 -p1
|
||||||
%patch228 -p1
|
|
||||||
%patch229 -p1
|
%patch229 -p1
|
||||||
|
|
||||||
cp %{SOURCE1} ./src/runtime/
|
cp %{SOURCE1} ./src/runtime/
|
||||||
@ -520,6 +518,11 @@ cd ..
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Mar 02 2023 Alejandro Sáez <asm@redhat.com> - 1.18.10-1
|
||||||
|
- Update to Go 1.18.10
|
||||||
|
- Remove ./do-not-reuse-far-trampolines.patch
|
||||||
|
- Resolves: rhbz#2174417
|
||||||
|
|
||||||
* Thu Dec 22 2022 Alejandro Sáez <asm@redhat.com> - 1.18.9-1
|
* Thu Dec 22 2022 Alejandro Sáez <asm@redhat.com> - 1.18.9-1
|
||||||
- Update to Go 1.18.9
|
- Update to Go 1.18.9
|
||||||
- Add big-endian.patch
|
- Add big-endian.patch
|
||||||
|
Loading…
Reference in New Issue
Block a user