!15 golang: upgrade to 1.15.5
From: @zvier Reviewed-by: @jing-rui Signed-off-by: @jing-rui
This commit is contained in:
commit
72293a06dd
@ -1,41 +0,0 @@
|
||||
From 817407fc2d6a861e65086388766f58082d38bc0b Mon Sep 17 00:00:00 2001
|
||||
From: Michael Munday <munday@ca.ibm.com>
|
||||
Date: Tue, 17 Jan 2017 11:33:38 -0500
|
||||
Subject: [PATCH 2/3] syscall: expose IfInfomsg.X__ifi_pad on s390x
|
||||
|
||||
Exposing this field on s390x improves compatibility with the other
|
||||
linux architectures, all of which already expose it.
|
||||
|
||||
Fixes #18628 and updates #18632.
|
||||
|
||||
Change-Id: I08e8e1eb705f898cd8822f8bee0d61ce11d514b5
|
||||
---
|
||||
src/syscall/ztypes_linux_s390x.go | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/syscall/ztypes_linux_s390x.go b/src/syscall/ztypes_linux_s390x.go
|
||||
index 63c4a83b19..b5894255df 100644
|
||||
--- a/src/syscall/ztypes_linux_s390x.go
|
||||
+++ b/src/syscall/ztypes_linux_s390x.go
|
||||
@@ -449,12 +449,12 @@ type RtAttr struct {
|
||||
}
|
||||
|
||||
type IfInfomsg struct {
|
||||
- Family uint8
|
||||
- _ uint8
|
||||
- Type uint16
|
||||
- Index int32
|
||||
- Flags uint32
|
||||
- Change uint32
|
||||
+ Family uint8
|
||||
+ X__ifi_pad uint8
|
||||
+ Type uint16
|
||||
+ Index int32
|
||||
+ Flags uint32
|
||||
+ Change uint32
|
||||
}
|
||||
|
||||
type IfAddrmsg struct {
|
||||
--
|
||||
2.14.3
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
From de4a8f2f1c0e7c30dc5f54d19212eb29d01871ed Mon Sep 17 00:00:00 2001
|
||||
From: jingrui <jingrui@huawei.com>
|
||||
Date: Wed, 27 Nov 2019 10:46:52 +0800
|
||||
Subject: [PATCH 6/6] golang: delete pem files
|
||||
|
||||
Signed-off-by: jingrui <jingrui@huawei.com>
|
||||
---
|
||||
src/crypto/tls/testdata/example-cert.pem | 11 -----------
|
||||
src/crypto/tls/testdata/example-key.pem | 5 -----
|
||||
2 files changed, 16 deletions(-)
|
||||
delete mode 100644 src/crypto/tls/testdata/example-cert.pem
|
||||
delete mode 100644 src/crypto/tls/testdata/example-key.pem
|
||||
|
||||
diff --git a/src/crypto/tls/testdata/example-cert.pem b/src/crypto/tls/testdata/example-cert.pem
|
||||
deleted file mode 100644
|
||||
index e0bf7db..0000000
|
||||
--- a/src/crypto/tls/testdata/example-cert.pem
|
||||
+++ /dev/null
|
||||
@@ -1,11 +0,0 @@
|
||||
------BEGIN CERTIFICATE-----
|
||||
-MIIBhTCCASugAwIBAgIQIRi6zePL6mKjOipn+dNuaTAKBggqhkjOPQQDAjASMRAw
|
||||
-DgYDVQQKEwdBY21lIENvMB4XDTE3MTAyMDE5NDMwNloXDTE4MTAyMDE5NDMwNlow
|
||||
-EjEQMA4GA1UEChMHQWNtZSBDbzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD0d
|
||||
-7VNhbWvZLWPuj/RtHFjvtJBEwOkhbN/BnnE8rnZR8+sbwnc/KhCk3FhnpHZnQz7B
|
||||
-5aETbbIgmuvewdjvSBSjYzBhMA4GA1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggr
|
||||
-BgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdEQQiMCCCDmxvY2FsaG9zdDo1
|
||||
-NDUzgg4xMjcuMC4wLjE6NTQ1MzAKBggqhkjOPQQDAgNIADBFAiEA2zpJEPQyz6/l
|
||||
-Wf86aX6PepsntZv2GYlA5UpabfT2EZICICpJ5h/iI+i341gBmLiAFQOyTDT+/wQc
|
||||
-6MF9+Yw1Yy0t
|
||||
------END CERTIFICATE-----
|
||||
diff --git a/src/crypto/tls/testdata/example-key.pem b/src/crypto/tls/testdata/example-key.pem
|
||||
deleted file mode 100644
|
||||
index 104fb09..0000000
|
||||
--- a/src/crypto/tls/testdata/example-key.pem
|
||||
+++ /dev/null
|
||||
@@ -1,5 +0,0 @@
|
||||
------BEGIN EC PRIVATE KEY-----
|
||||
-MHcCAQEEIIrYSSNQFaA2Hwf1duRSxKtLYX5CB04fSeQ6tF1aY/PuoAoGCCqGSM49
|
||||
-AwEHoUQDQgAEPR3tU2Fta9ktY+6P9G0cWO+0kETA6SFs38GecTyudlHz6xvCdz8q
|
||||
-EKTcWGekdmdDPsHloRNtsiCa697B2O9IFA==
|
||||
------END EC PRIVATE KEY-----
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@ -1,101 +0,0 @@
|
||||
From fa95a1d8e7eda9ab90a7fd29785cad0ae7d816e2 Mon Sep 17 00:00:00 2001
|
||||
From: jingrui <jingrui@huawei.com>
|
||||
Date: Wed, 27 Nov 2019 09:54:22 +0800
|
||||
Subject: [PATCH 1/6] syscall: implement rawVforkSyscall for linux/arm64
|
||||
|
||||
This allows the use of CLONE_VFORK and CLONE_VM for fork/exec, preventing
|
||||
"fork/exec ...: cannot allocate memory" failures from occuring when attempting
|
||||
to execute commands from a Go process that has a large memory footprint.
|
||||
Additionally, this should reduce the latency of fork/exec on linux/arm64.
|
||||
|
||||
With CLONE_VM the child process shares the same memory with the parent
|
||||
process. On its own this would lead to conflicting use of the same
|
||||
memory, so CLONE_VFORK is used to suspend the parent process until the
|
||||
child releases the memory when switching to the new program binary
|
||||
via the exec syscall. When the parent process continues to run, one
|
||||
has to consider the changes to memory that the child process did,
|
||||
namely the return address of the syscall function needs to be restored
|
||||
from a register.
|
||||
|
||||
exec.Command() callers can start in a faster manner, as child process who
|
||||
do exec commands job can be cloned faster via vfork than via fork on arm64.
|
||||
|
||||
The same problem was addressed on linux/amd64 via issue #5838.
|
||||
|
||||
Updates #31936
|
||||
Contributed by Howard Zhang <howard.zhang@arm.com> and Bin Lu <bin.lu@arm.com>
|
||||
|
||||
Change-Id: Ia99d81d877f564ec60d19f17e596276836576eaf
|
||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/189418
|
||||
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
|
||||
TryBot-Result: Gobot Gobot <gobot@golang.org>
|
||||
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
|
||||
Reviewed-by: Cherry Zhang <cherryyz@google.com>
|
||||
---
|
||||
src/syscall/asm_linux_arm64.s | 23 +++++++++++++++++++++++
|
||||
src/syscall/exec_linux.go | 2 +-
|
||||
src/syscall/syscall_linux_arm64.go | 4 +---
|
||||
3 files changed, 25 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/syscall/asm_linux_arm64.s b/src/syscall/asm_linux_arm64.s
|
||||
index 7edeafc..fb22f8d 100644
|
||||
--- a/src/syscall/asm_linux_arm64.s
|
||||
+++ b/src/syscall/asm_linux_arm64.s
|
||||
@@ -103,6 +103,29 @@ ok:
|
||||
MOVD ZR, err+72(FP) // errno
|
||||
RET
|
||||
|
||||
+// func rawVforkSyscall(trap, a1 uintptr) (r1, err uintptr)
|
||||
+TEXT ·rawVforkSyscall(SB),NOSPLIT,$0-32
|
||||
+ MOVD a1+8(FP), R0
|
||||
+ MOVD $0, R1
|
||||
+ MOVD $0, R2
|
||||
+ MOVD $0, R3
|
||||
+ MOVD $0, R4
|
||||
+ MOVD $0, R5
|
||||
+ MOVD trap+0(FP), R8 // syscall entry
|
||||
+ SVC
|
||||
+ CMN $4095, R0
|
||||
+ BCC ok
|
||||
+ MOVD $-1, R4
|
||||
+ MOVD R4, r1+16(FP) // r1
|
||||
+ NEG R0, R0
|
||||
+ MOVD R0, err+24(FP) // errno
|
||||
+ RET
|
||||
+ok:
|
||||
+ MOVD R0, r1+16(FP) // r1
|
||||
+ MOVD ZR, err+24(FP) // errno
|
||||
+ RET
|
||||
+
|
||||
+
|
||||
// func rawSyscallNoError(trap uintptr, a1, a2, a3 uintptr) (r1, r2 uintptr);
|
||||
TEXT ·rawSyscallNoError(SB),NOSPLIT,$0-48
|
||||
MOVD a1+8(FP), R0
|
||||
diff --git a/src/syscall/exec_linux.go b/src/syscall/exec_linux.go
|
||||
index a2242b2..3540d51 100644
|
||||
--- a/src/syscall/exec_linux.go
|
||||
+++ b/src/syscall/exec_linux.go
|
||||
@@ -196,7 +196,7 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att
|
||||
}
|
||||
}
|
||||
|
||||
- hasRawVforkSyscall := runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "s390x"
|
||||
+ hasRawVforkSyscall := runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64" || runtime.GOARCH == "s390x" || runtime.GOARCH == "arm64"
|
||||
|
||||
// About to call fork.
|
||||
// No more allocation or calls of non-assembly functions.
|
||||
diff --git a/src/syscall/syscall_linux_arm64.go b/src/syscall/syscall_linux_arm64.go
|
||||
index 48ad0bb..89b2ab2 100644
|
||||
--- a/src/syscall/syscall_linux_arm64.go
|
||||
+++ b/src/syscall/syscall_linux_arm64.go
|
||||
@@ -154,6 +154,4 @@ const (
|
||||
SYS_EPOLL_WAIT = 1069
|
||||
)
|
||||
|
||||
-func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno) {
|
||||
- panic("not implemented")
|
||||
-}
|
||||
+func rawVforkSyscall(trap, a1 uintptr) (r1 uintptr, err Errno)
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@ -1,191 +0,0 @@
|
||||
From 8a755c0f0389dca42ec8caef0efa9b6ebe9d1e3c Mon Sep 17 00:00:00 2001
|
||||
From: Yuichi Nishiwaki <yuichi.nishiwaki@gmail.com>
|
||||
Date: Wed, 11 Sep 2019 02:26:02 +0000
|
||||
Subject: [PATCH 2/6] runtime: fix crash during VDSO calls on arm
|
||||
|
||||
As discussed in #32912, a crash occurs when go runtime calls a VDSO function (say
|
||||
__vdso_clock_gettime) and a signal arrives to that thread.
|
||||
Since VDSO functions temporarily destroy the G register (R10),
|
||||
Go functions asynchronously executed in that thread (i.e. Go's signal
|
||||
handler) can try to load data from the destroyed G, which causes
|
||||
segmentation fault.
|
||||
|
||||
To fix the issue a guard is inserted in front of sigtrampgo, so that the control escapes from
|
||||
signal handlers without touching G in case the signal occurred in the VDSO context.
|
||||
The test case included in the patch is take from discussion in a relevant thread on github:
|
||||
https://github.com/golang/go/issues/32912#issuecomment-517874531.
|
||||
This patch not only fixes the issue on AArch64 but also that on 32bit ARM.
|
||||
|
||||
Fixes #32912
|
||||
|
||||
Change-Id: I657472e54b7aa3c617fabc5019ce63aa4105624a
|
||||
GitHub-Last-Rev: 28ce42c4a02a060f08c1b0dd1c9a392123fd2ee9
|
||||
GitHub-Pull-Request: golang/go#34030
|
||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/192937
|
||||
Run-TryBot: Ian Lance Taylor <iant@golang.org>
|
||||
TryBot-Result: Gobot Gobot <gobot@golang.org>
|
||||
Reviewed-by: Ian Lance Taylor <iant@golang.org>
|
||||
---
|
||||
src/runtime/crash_test.go | 9 +++++
|
||||
src/runtime/signal_unix.go | 27 ++++++++++---
|
||||
src/runtime/testdata/testprog/vdso.go | 55 +++++++++++++++++++++++++++
|
||||
src/runtime/vdso_linux.go | 1 +
|
||||
4 files changed, 86 insertions(+), 6 deletions(-)
|
||||
create mode 100644 src/runtime/testdata/testprog/vdso.go
|
||||
|
||||
diff --git a/src/runtime/crash_test.go b/src/runtime/crash_test.go
|
||||
index c54bb57..c2cab7c 100644
|
||||
--- a/src/runtime/crash_test.go
|
||||
+++ b/src/runtime/crash_test.go
|
||||
@@ -143,6 +143,15 @@ func buildTestProg(t *testing.T, binary string, flags ...string) (string, error)
|
||||
return exe, nil
|
||||
}
|
||||
|
||||
+func TestVDSO(t *testing.T) {
|
||||
+ t.Parallel()
|
||||
+ output := runTestProg(t, "testprog", "SignalInVDSO")
|
||||
+ want := "success\n"
|
||||
+ if output != want {
|
||||
+ t.Fatalf("output:\n%s\n\nwanted:\n%s", output, want);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
var (
|
||||
staleRuntimeOnce sync.Once // guards init of staleRuntimeErr
|
||||
staleRuntimeErr error
|
||||
diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go
|
||||
index ad51dc1..63fb07f 100644
|
||||
--- a/src/runtime/signal_unix.go
|
||||
+++ b/src/runtime/signal_unix.go
|
||||
@@ -274,6 +274,21 @@ func sigpipe() {
|
||||
dieFromSignal(_SIGPIPE)
|
||||
}
|
||||
|
||||
+// sigFetchG fetches the value of G safely when running in a signal handler.
|
||||
+// On some architectures, the g value may be clobbered when running in a VDSO.
|
||||
+// See issue #32912.
|
||||
+//
|
||||
+//go:nosplit
|
||||
+func sigFetchG(c *sigctxt) *g {
|
||||
+ switch GOARCH {
|
||||
+ case "arm", "arm64", "ppc64", "ppc64le":
|
||||
+ if inVDSOPage(c.sigpc()) {
|
||||
+ return nil
|
||||
+ }
|
||||
+ }
|
||||
+ return getg()
|
||||
+}
|
||||
+
|
||||
// sigtrampgo is called from the signal handler function, sigtramp,
|
||||
// written in assembly code.
|
||||
// This is called by the signal handler, and the world may be stopped.
|
||||
@@ -289,9 +304,9 @@ func sigtrampgo(sig uint32, info *siginfo, ctx unsafe.Pointer) {
|
||||
if sigfwdgo(sig, info, ctx) {
|
||||
return
|
||||
}
|
||||
- g := getg()
|
||||
+ c := &sigctxt{info, ctx}
|
||||
+ g := sigFetchG(c)
|
||||
if g == nil {
|
||||
- c := &sigctxt{info, ctx}
|
||||
if sig == _SIGPROF {
|
||||
sigprofNonGoPC(c.sigpc())
|
||||
return
|
||||
@@ -347,7 +362,6 @@ func sigtrampgo(sig uint32, info *siginfo, ctx unsafe.Pointer) {
|
||||
signalDuringFork(sig)
|
||||
}
|
||||
|
||||
- c := &sigctxt{info, ctx}
|
||||
c.fixsigcode(sig)
|
||||
sighandler(sig, info, ctx, g)
|
||||
setg(g)
|
||||
@@ -650,9 +664,10 @@ func sigfwdgo(sig uint32, info *siginfo, ctx unsafe.Pointer) bool {
|
||||
return false
|
||||
}
|
||||
// Determine if the signal occurred inside Go code. We test that:
|
||||
- // (1) we were in a goroutine (i.e., m.curg != nil), and
|
||||
- // (2) we weren't in CGO.
|
||||
- g := getg()
|
||||
+ // (1) we weren't in VDSO page,
|
||||
+ // (2) we were in a goroutine (i.e., m.curg != nil), and
|
||||
+ // (3) we weren't in CGO.
|
||||
+ g := sigFetchG(c)
|
||||
if g != nil && g.m != nil && g.m.curg != nil && !g.m.incgo {
|
||||
return false
|
||||
}
|
||||
diff --git a/src/runtime/testdata/testprog/vdso.go b/src/runtime/testdata/testprog/vdso.go
|
||||
new file mode 100644
|
||||
index 0000000..6036f45
|
||||
--- /dev/null
|
||||
+++ b/src/runtime/testdata/testprog/vdso.go
|
||||
@@ -0,0 +1,55 @@
|
||||
+// Copyright 2019 The Go Authors. All rights reserved.
|
||||
+// Use of this source code is governed by a BSD-style
|
||||
+// license that can be found in the LICENSE file.
|
||||
+
|
||||
+// Invoke signal hander in the VDSO context (see issue 32912).
|
||||
+
|
||||
+package main
|
||||
+
|
||||
+import (
|
||||
+ "fmt"
|
||||
+ "io/ioutil"
|
||||
+ "os"
|
||||
+ "runtime/pprof"
|
||||
+ "time"
|
||||
+)
|
||||
+
|
||||
+func init() {
|
||||
+ register("SignalInVDSO", signalInVDSO)
|
||||
+}
|
||||
+
|
||||
+func signalInVDSO() {
|
||||
+ f, err := ioutil.TempFile("", "timeprofnow")
|
||||
+ if err != nil {
|
||||
+ fmt.Fprintln(os.Stderr, err)
|
||||
+ os.Exit(2)
|
||||
+ }
|
||||
+
|
||||
+ if err := pprof.StartCPUProfile(f); err != nil {
|
||||
+ fmt.Fprintln(os.Stderr, err)
|
||||
+ os.Exit(2)
|
||||
+ }
|
||||
+
|
||||
+ t0 := time.Now()
|
||||
+ t1 := t0
|
||||
+ // We should get a profiling signal 100 times a second,
|
||||
+ // so running for 1 second should be sufficient.
|
||||
+ for t1.Sub(t0) < time.Second {
|
||||
+ t1 = time.Now()
|
||||
+ }
|
||||
+
|
||||
+ pprof.StopCPUProfile()
|
||||
+
|
||||
+ name := f.Name()
|
||||
+ if err := f.Close(); err != nil {
|
||||
+ fmt.Fprintln(os.Stderr, err)
|
||||
+ os.Exit(2)
|
||||
+ }
|
||||
+
|
||||
+ if err := os.Remove(name); err != nil {
|
||||
+ fmt.Fprintln(os.Stderr, err)
|
||||
+ os.Exit(2)
|
||||
+ }
|
||||
+
|
||||
+ fmt.Println("success");
|
||||
+}
|
||||
diff --git a/src/runtime/vdso_linux.go b/src/runtime/vdso_linux.go
|
||||
index 71ba4ce..8518276 100644
|
||||
--- a/src/runtime/vdso_linux.go
|
||||
+++ b/src/runtime/vdso_linux.go
|
||||
@@ -281,6 +281,7 @@ func vdsoauxv(tag, val uintptr) {
|
||||
}
|
||||
|
||||
// vdsoMarker reports whether PC is on the VDSO page.
|
||||
+//go:nosplit
|
||||
func inVDSOPage(pc uintptr) bool {
|
||||
for _, k := range vdsoSymbolKeys {
|
||||
if *k.ptr != 0 {
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@ -1,253 +0,0 @@
|
||||
From 4717d9a1a21dfe051a14f033615218d833371d68 Mon Sep 17 00:00:00 2001
|
||||
From: jingrui <jingrui@huawei.com>
|
||||
Date: Wed, 27 Nov 2019 10:19:13 +0800
|
||||
Subject: [PATCH 3/6] runtime: save/fetch g register during VDSO on ARM and
|
||||
ARM64
|
||||
|
||||
On ARM and ARM64, during a VDSO call, the g register may be
|
||||
temporarily clobbered by the VDSO code. If a signal is received
|
||||
during the execution of VDSO code, we may not find a valid g
|
||||
reading the g register. In CL 192937, we conservatively assume
|
||||
g is nil. But this approach has a problem: we cannot handle
|
||||
the signal in this case. Further, if the signal is not a
|
||||
profiling signal, we'll call badsignal, which calls needm, which
|
||||
wants to get an extra m, but we don't have one in a non-cgo
|
||||
binary, which cuases the program to hang.
|
||||
|
||||
This is even more of a problem with async preemption, where we
|
||||
will receive more signals than before. I ran into this problem
|
||||
while working on async preemption support on ARM64.
|
||||
|
||||
In this CL, before making a VDSO call, we save the g on the
|
||||
gsignal stack. When we receive a signal, we will be running on
|
||||
the gsignal stack, so we can fetch the g from there and move on.
|
||||
|
||||
We probably want to do the same for PPC64. Currently we rely on
|
||||
that the VDSO code doesn't actually clobber the g register, but
|
||||
this is not guaranteed and we don't have control with.
|
||||
|
||||
Idea from discussion with Dan Cross and Austin.
|
||||
|
||||
Should fix #34391.
|
||||
|
||||
Change-Id: Idbefc5e4c2f4373192c2be797be0140ae08b26e3
|
||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/202759
|
||||
Run-TryBot: Cherry Zhang <cherryyz@google.com>
|
||||
Reviewed-by: Austin Clements <austin@google.com>
|
||||
---
|
||||
src/os/signal/signal_test.go | 49 +++++++++++++++++++++++++++++++++++
|
||||
src/runtime/proc.go | 3 +++
|
||||
src/runtime/signal_unix.go | 24 ++++++++++++-----
|
||||
src/runtime/sys_linux_arm.s | 32 +++++++++++++++++++++++
|
||||
src/runtime/sys_linux_arm64.s | 28 ++++++++++++++++++++
|
||||
5 files changed, 129 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/os/signal/signal_test.go b/src/os/signal/signal_test.go
|
||||
index 6ea59f4..c8274ea 100644
|
||||
--- a/src/os/signal/signal_test.go
|
||||
+++ b/src/os/signal/signal_test.go
|
||||
@@ -453,3 +453,52 @@ func atomicStopTestProgram() {
|
||||
|
||||
os.Exit(0)
|
||||
}
|
||||
+
|
||||
+func TestTime(t *testing.T) {
|
||||
+ // Test that signal works fine when we are in a call to get time,
|
||||
+ // which on some platforms is using VDSO. See issue #34391.
|
||||
+ dur := 3 * time.Second
|
||||
+ if testing.Short() {
|
||||
+ dur = 100 * time.Millisecond
|
||||
+ }
|
||||
+ defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4))
|
||||
+ done := make(chan bool)
|
||||
+ finished := make(chan bool)
|
||||
+ go func() {
|
||||
+ sig := make(chan os.Signal, 1)
|
||||
+ Notify(sig, syscall.SIGUSR1)
|
||||
+ defer Stop(sig)
|
||||
+ Loop:
|
||||
+ for {
|
||||
+ select {
|
||||
+ case <-sig:
|
||||
+ case <-done:
|
||||
+ break Loop
|
||||
+ }
|
||||
+ }
|
||||
+ finished <- true
|
||||
+ }()
|
||||
+ go func() {
|
||||
+ Loop:
|
||||
+ for {
|
||||
+ select {
|
||||
+ case <-done:
|
||||
+ break Loop
|
||||
+ default:
|
||||
+ syscall.Kill(syscall.Getpid(), syscall.SIGUSR1)
|
||||
+ runtime.Gosched()
|
||||
+ }
|
||||
+ }
|
||||
+ finished <- true
|
||||
+ }()
|
||||
+ t0 := time.Now()
|
||||
+ for t1 := t0; t1.Sub(t0) < dur; t1 = time.Now() {
|
||||
+ } // hammering on getting time
|
||||
+ close(done)
|
||||
+ <-finished
|
||||
+ <-finished
|
||||
+ // When run with 'go test -cpu=1,2,4' SIGUSR1 from this test can slip
|
||||
+ // into subsequent TestSignal() causing failure.
|
||||
+ // Sleep for a while to reduce the possibility of the failure.
|
||||
+ time.Sleep(10 * time.Millisecond)
|
||||
+}
|
||||
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
|
||||
index 93d329d..1487647 100644
|
||||
--- a/src/runtime/proc.go
|
||||
+++ b/src/runtime/proc.go
|
||||
@@ -3237,6 +3237,9 @@ func malg(stacksize int32) *g {
|
||||
})
|
||||
newg.stackguard0 = newg.stack.lo + _StackGuard
|
||||
newg.stackguard1 = ^uintptr(0)
|
||||
+ // Clear the bottom word of the stack. We record g
|
||||
+ // there on gsignal stack during VDSO on ARM and ARM64.
|
||||
+ *(*uintptr)(unsafe.Pointer(newg.stack.lo)) = 0
|
||||
}
|
||||
return newg
|
||||
}
|
||||
diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go
|
||||
index 63fb07f..2cf1e3b 100644
|
||||
--- a/src/runtime/signal_unix.go
|
||||
+++ b/src/runtime/signal_unix.go
|
||||
@@ -280,13 +280,23 @@ func sigpipe() {
|
||||
//
|
||||
//go:nosplit
|
||||
func sigFetchG(c *sigctxt) *g {
|
||||
- switch GOARCH {
|
||||
- case "arm", "arm64", "ppc64", "ppc64le":
|
||||
- if inVDSOPage(c.sigpc()) {
|
||||
- return nil
|
||||
- }
|
||||
- }
|
||||
- return getg()
|
||||
+ switch GOARCH {
|
||||
+ case "arm", "arm64":
|
||||
+ if inVDSOPage(c.sigpc()) {
|
||||
+ // Before making a VDSO call we save the g to the bottom of the
|
||||
+ // signal stack. Fetch from there.
|
||||
+ // TODO: in efence mode, stack is sysAlloc'd, so this wouldn't
|
||||
+ // work.
|
||||
+ sp := getcallersp()
|
||||
+ s := spanOf(sp)
|
||||
+ if s != nil && s.state == mSpanManual && s.base() < sp && sp < s.limit {
|
||||
+ gp := *(**g)(unsafe.Pointer(s.base()))
|
||||
+ return gp
|
||||
+ }
|
||||
+ return nil
|
||||
+ }
|
||||
+ }
|
||||
+ return getg()
|
||||
}
|
||||
|
||||
// sigtrampgo is called from the signal handler function, sigtramp,
|
||||
diff --git a/src/runtime/sys_linux_arm.s b/src/runtime/sys_linux_arm.s
|
||||
index 9c73984..26e12a8 100644
|
||||
--- a/src/runtime/sys_linux_arm.s
|
||||
+++ b/src/runtime/sys_linux_arm.s
|
||||
@@ -246,7 +246,23 @@ noswitch:
|
||||
CMP $0, R11
|
||||
B.EQ fallback
|
||||
|
||||
+ // 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.
|
||||
+ MOVW m_gsignal(R5), R6 // g.m.gsignal
|
||||
+ CMP $0, R6
|
||||
+ BEQ 3(PC)
|
||||
+ MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
|
||||
+ MOVW g, (R6)
|
||||
+
|
||||
BL (R11)
|
||||
+
|
||||
+ CMP $0, R6 // R6 is unchanged by C code
|
||||
+ BEQ 3(PC)
|
||||
+ MOVW $0, R1
|
||||
+ MOVW R1, (R6) // clear g slot
|
||||
+
|
||||
JMP finish
|
||||
|
||||
fallback:
|
||||
@@ -297,7 +313,23 @@ noswitch:
|
||||
CMP $0, R11
|
||||
B.EQ fallback
|
||||
|
||||
+ // 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.
|
||||
+ MOVW m_gsignal(R5), R6 // g.m.gsignal
|
||||
+ CMP $0, R6
|
||||
+ BEQ 3(PC)
|
||||
+ MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
|
||||
+ MOVW g, (R6)
|
||||
+
|
||||
BL (R11)
|
||||
+
|
||||
+ CMP $0, R6 // R6 is unchanged by C code
|
||||
+ BEQ 3(PC)
|
||||
+ MOVW $0, R1
|
||||
+ MOVW R1, (R6) // clear g slot
|
||||
+
|
||||
JMP finish
|
||||
|
||||
fallback:
|
||||
diff --git a/src/runtime/sys_linux_arm64.s b/src/runtime/sys_linux_arm64.s
|
||||
index 2835b6c..fd40bf9 100644
|
||||
--- a/src/runtime/sys_linux_arm64.s
|
||||
+++ b/src/runtime/sys_linux_arm64.s
|
||||
@@ -207,7 +207,21 @@ noswitch:
|
||||
MOVW $CLOCK_REALTIME, R0
|
||||
MOVD runtime·vdsoClockgettimeSym(SB), R2
|
||||
CBZ R2, fallback
|
||||
+
|
||||
+ // 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.
|
||||
+ MOVD m_gsignal(R21), R22 // g.m.gsignal
|
||||
+ CBZ R22, 3(PC)
|
||||
+ MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo
|
||||
+ MOVD g, (R22)
|
||||
+
|
||||
BL (R2)
|
||||
+
|
||||
+ CBZ R22, 2(PC) // R22 is unchanged by C code
|
||||
+ MOVD ZR, (R22) // clear g slot
|
||||
+
|
||||
B finish
|
||||
|
||||
fallback:
|
||||
@@ -250,7 +264,21 @@ noswitch:
|
||||
MOVW $CLOCK_MONOTONIC, R0
|
||||
MOVD runtime·vdsoClockgettimeSym(SB), R2
|
||||
CBZ R2, fallback
|
||||
+
|
||||
+ // 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.
|
||||
+ MOVD m_gsignal(R21), R22 // g.m.gsignal
|
||||
+ CBZ R22, 3(PC)
|
||||
+ MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo
|
||||
+ MOVD g, (R22)
|
||||
+
|
||||
BL (R2)
|
||||
+
|
||||
+ CBZ R22, 2(PC) // R22 is unchanged by C code
|
||||
+ MOVD ZR, (R22) // clear g slot
|
||||
+
|
||||
B finish
|
||||
|
||||
fallback:
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@ -1,179 +0,0 @@
|
||||
From fce0a59fc370634fcd7de8f8691e918cdf122f7d Mon Sep 17 00:00:00 2001
|
||||
From: Cherry Zhang <cherryyz@google.com>
|
||||
Date: Thu, 31 Oct 2019 10:32:31 -0400
|
||||
Subject: [PATCH 4/6] runtime: don't fetch G from signal stack when using cgo
|
||||
|
||||
When using cgo, we save G to TLS, and when a signal happens, we
|
||||
load G from TLS in sigtramp. This should give us a valid G. Don't
|
||||
try to fetch from the signal stack. In particular, C code may
|
||||
change the signal stack or call our signal handler directly (e.g.
|
||||
TSAN), so we are not necessarily running on the original gsignal
|
||||
stack where we saved G.
|
||||
|
||||
Also skip saving G on the signal stack when using cgo.
|
||||
|
||||
Updates #35249.
|
||||
|
||||
Change-Id: I40749ce6682709bd4ebfdfd9f23bd0f317fc197d
|
||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/204519
|
||||
Reviewed-by: Ian Lance Taylor <iant@golang.org>
|
||||
---
|
||||
src/runtime/signal_unix.go | 8 +++++---
|
||||
src/runtime/sys_linux_arm.s | 30 ++++++++++++++++++++++--------
|
||||
src/runtime/sys_linux_arm64.s | 26 ++++++++++++++++++++------
|
||||
3 files changed, 47 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go
|
||||
index 2cf1e3b..721edb5 100644
|
||||
--- a/src/runtime/signal_unix.go
|
||||
+++ b/src/runtime/signal_unix.go
|
||||
@@ -282,9 +282,11 @@ func sigpipe() {
|
||||
func sigFetchG(c *sigctxt) *g {
|
||||
switch GOARCH {
|
||||
case "arm", "arm64":
|
||||
- if inVDSOPage(c.sigpc()) {
|
||||
- // Before making a VDSO call we save the g to the bottom of the
|
||||
- // signal stack. Fetch from there.
|
||||
+ if !iscgo && inVDSOPage(c.sigpc()) {
|
||||
+ // When using cgo, we save the g on TLS and load it from there
|
||||
+ // in sigtramp. Just use that.
|
||||
+ // Otherwise, before making a VDSO call we save the g to the
|
||||
+ // bottom of the signal stack. Fetch from there.
|
||||
// TODO: in efence mode, stack is sysAlloc'd, so this wouldn't
|
||||
// work.
|
||||
sp := getcallersp()
|
||||
diff --git a/src/runtime/sys_linux_arm.s b/src/runtime/sys_linux_arm.s
|
||||
index 26e12a8..a47ac5f 100644
|
||||
--- a/src/runtime/sys_linux_arm.s
|
||||
+++ b/src/runtime/sys_linux_arm.s
|
||||
@@ -250,21 +250,28 @@ noswitch:
|
||||
// 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.
|
||||
+ MOVB runtime·iscgo(SB), R6
|
||||
+ CMP $0, R6
|
||||
+ BNE nosaveg
|
||||
MOVW m_gsignal(R5), R6 // g.m.gsignal
|
||||
CMP $0, R6
|
||||
- BEQ 3(PC)
|
||||
+ BEQ nosaveg
|
||||
MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
|
||||
MOVW g, (R6)
|
||||
|
||||
BL (R11)
|
||||
|
||||
- CMP $0, R6 // R6 is unchanged by C code
|
||||
- BEQ 3(PC)
|
||||
MOVW $0, R1
|
||||
- MOVW R1, (R6) // clear g slot
|
||||
+ MOVW R1, (R6) // clear g slot, R6 is unchanged by C code
|
||||
|
||||
JMP finish
|
||||
|
||||
+nosaveg:
|
||||
+ BL (R11)
|
||||
+ JMP finish
|
||||
+
|
||||
fallback:
|
||||
MOVW $SYS_clock_gettime, R7
|
||||
SWI $0
|
||||
@@ -317,21 +324,28 @@ noswitch:
|
||||
// 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.
|
||||
+ MOVB runtime·iscgo(SB), R6
|
||||
+ CMP $0, R6
|
||||
+ BNE nosaveg
|
||||
MOVW m_gsignal(R5), R6 // g.m.gsignal
|
||||
CMP $0, R6
|
||||
- BEQ 3(PC)
|
||||
+ BEQ nosaveg
|
||||
MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
|
||||
MOVW g, (R6)
|
||||
|
||||
BL (R11)
|
||||
|
||||
- CMP $0, R6 // R6 is unchanged by C code
|
||||
- BEQ 3(PC)
|
||||
MOVW $0, R1
|
||||
- MOVW R1, (R6) // clear g slot
|
||||
+ MOVW R1, (R6) // clear g slot, R6 is unchanged by C code
|
||||
|
||||
JMP finish
|
||||
|
||||
+nosaveg:
|
||||
+ BL (R11)
|
||||
+ JMP finish
|
||||
+
|
||||
fallback:
|
||||
MOVW $SYS_clock_gettime, R7
|
||||
SWI $0
|
||||
diff --git a/src/runtime/sys_linux_arm64.s b/src/runtime/sys_linux_arm64.s
|
||||
index fd40bf9..94c93ca 100644
|
||||
--- a/src/runtime/sys_linux_arm64.s
|
||||
+++ b/src/runtime/sys_linux_arm64.s
|
||||
@@ -212,18 +212,25 @@ noswitch:
|
||||
// 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.
|
||||
+ MOVBU runtime·iscgo(SB), R22
|
||||
+ CBNZ R22, nosaveg
|
||||
MOVD m_gsignal(R21), R22 // g.m.gsignal
|
||||
- CBZ R22, 3(PC)
|
||||
+ CBZ R22, nosaveg
|
||||
MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo
|
||||
MOVD g, (R22)
|
||||
|
||||
BL (R2)
|
||||
|
||||
- CBZ R22, 2(PC) // R22 is unchanged by C code
|
||||
- MOVD ZR, (R22) // clear g slot
|
||||
+ MOVD ZR, (R22) // clear g slot, R22 is unchanged by C code
|
||||
|
||||
B finish
|
||||
|
||||
+nosaveg:
|
||||
+ BL (R2)
|
||||
+ B finish
|
||||
+
|
||||
fallback:
|
||||
MOVD $SYS_clock_gettime, R8
|
||||
SVC
|
||||
@@ -269,18 +276,25 @@ noswitch:
|
||||
// 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.
|
||||
+ MOVBU runtime·iscgo(SB), R22
|
||||
+ CBNZ R22, nosaveg
|
||||
MOVD m_gsignal(R21), R22 // g.m.gsignal
|
||||
- CBZ R22, 3(PC)
|
||||
+ CBZ R22, nosaveg
|
||||
MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo
|
||||
MOVD g, (R22)
|
||||
|
||||
BL (R2)
|
||||
|
||||
- CBZ R22, 2(PC) // R22 is unchanged by C code
|
||||
- MOVD ZR, (R22) // clear g slot
|
||||
+ MOVD ZR, (R22) // clear g slot, R22 is unchanged by C code
|
||||
|
||||
B finish
|
||||
|
||||
+nosaveg:
|
||||
+ BL (R2)
|
||||
+ B finish
|
||||
+
|
||||
fallback:
|
||||
MOVD $SYS_clock_gettime, R8
|
||||
SVC
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@ -1,107 +0,0 @@
|
||||
From e83074ea52287115b85002a6b72137c72f6d7ecc Mon Sep 17 00:00:00 2001
|
||||
From: Cherry Zhang <cherryyz@google.com>
|
||||
Date: Sun, 10 Nov 2019 13:18:06 -0500
|
||||
Subject: [PATCH 5/6] runtime: don't save G during VDSO if we're handling
|
||||
signal
|
||||
|
||||
On some platforms (currently ARM and ARM64), when calling into
|
||||
VDSO we store the G to the gsignal stack, if there is one, so if
|
||||
we receive a signal during VDSO we can find the G.
|
||||
|
||||
If we receive a signal during VDSO, and within the signal handler
|
||||
we call nanotime again (e.g. when handling profiling signal),
|
||||
we'll save/clear the G slot on the gsignal stack again, which
|
||||
clobbers the original saved G. If we receive a second signal
|
||||
during the same VDSO execution, we will fetch a nil G, which will
|
||||
lead to bad things such as deadlock.
|
||||
|
||||
Don't save G if we're calling VDSO code from the gsignal stack.
|
||||
Saving G is not necessary as we won't receive a nested signal.
|
||||
|
||||
Fixes #35473.
|
||||
|
||||
Change-Id: Ibfd8587a3c70c2f1533908b056e81b94d75d65a5
|
||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/206397
|
||||
Run-TryBot: Cherry Zhang <cherryyz@google.com>
|
||||
TryBot-Result: Gobot Gobot <gobot@golang.org>
|
||||
Reviewed-by: Bryan C. Mills <bcmills@google.com>
|
||||
---
|
||||
src/runtime/sys_linux_arm.s | 8 ++++++++
|
||||
src/runtime/sys_linux_arm64.s | 8 ++++++++
|
||||
2 files changed, 16 insertions(+)
|
||||
|
||||
diff --git a/src/runtime/sys_linux_arm.s b/src/runtime/sys_linux_arm.s
|
||||
index a47ac5f..577faac 100644
|
||||
--- a/src/runtime/sys_linux_arm.s
|
||||
+++ b/src/runtime/sys_linux_arm.s
|
||||
@@ -252,12 +252,16 @@ noswitch:
|
||||
// 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.
|
||||
MOVB runtime·iscgo(SB), R6
|
||||
CMP $0, R6
|
||||
BNE nosaveg
|
||||
MOVW m_gsignal(R5), R6 // g.m.gsignal
|
||||
CMP $0, R6
|
||||
BEQ nosaveg
|
||||
+ CMP g, R6
|
||||
+ BEQ nosaveg
|
||||
MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
|
||||
MOVW g, (R6)
|
||||
|
||||
@@ -326,12 +330,16 @@ noswitch:
|
||||
// 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.
|
||||
MOVB runtime·iscgo(SB), R6
|
||||
CMP $0, R6
|
||||
BNE nosaveg
|
||||
MOVW m_gsignal(R5), R6 // g.m.gsignal
|
||||
CMP $0, R6
|
||||
BEQ nosaveg
|
||||
+ CMP g, R6
|
||||
+ BEQ nosaveg
|
||||
MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
|
||||
MOVW g, (R6)
|
||||
|
||||
diff --git a/src/runtime/sys_linux_arm64.s b/src/runtime/sys_linux_arm64.s
|
||||
index 94c93ca..a076744 100644
|
||||
--- a/src/runtime/sys_linux_arm64.s
|
||||
+++ b/src/runtime/sys_linux_arm64.s
|
||||
@@ -214,10 +214,14 @@ noswitch:
|
||||
// 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.
|
||||
MOVBU runtime·iscgo(SB), R22
|
||||
CBNZ R22, nosaveg
|
||||
MOVD m_gsignal(R21), R22 // g.m.gsignal
|
||||
CBZ R22, nosaveg
|
||||
+ CMP g, R22
|
||||
+ BEQ nosaveg
|
||||
MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo
|
||||
MOVD g, (R22)
|
||||
|
||||
@@ -278,10 +282,14 @@ noswitch:
|
||||
// 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.
|
||||
MOVBU runtime·iscgo(SB), R22
|
||||
CBNZ R22, nosaveg
|
||||
MOVD m_gsignal(R21), R22 // g.m.gsignal
|
||||
CBZ R22, nosaveg
|
||||
+ CMP g, R22
|
||||
+ BEQ nosaveg
|
||||
MOVD (g_stack+stack_lo)(R22), R22 // g.m.gsignal.stack.lo
|
||||
MOVD g, (R22)
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@ -1,135 +0,0 @@
|
||||
From 2720067ebfb7568792bb0c8fe3fbf095c89b77a9 Mon Sep 17 00:00:00 2001
|
||||
From: jingrui <jingrui@huawei.com>
|
||||
Date: Tue, 17 Mar 2020 17:43:33 +0800
|
||||
Subject: [PATCH] drop hard-code cert
|
||||
|
||||
Signed-off-by: jingrui <jingrui@huawei.com>
|
||||
---
|
||||
src/crypto/x509/test-file.crt | 32 ---------------------------
|
||||
src/crypto/x509/testdata/test-dir.crt | 31 --------------------------
|
||||
src/net/http/internal/testcert.go | 31 ++------------------------
|
||||
3 files changed, 2 insertions(+), 92 deletions(-)
|
||||
delete mode 100644 src/crypto/x509/test-file.crt
|
||||
delete mode 100644 src/crypto/x509/testdata/test-dir.crt
|
||||
|
||||
diff --git a/src/crypto/x509/test-file.crt b/src/crypto/x509/test-file.crt
|
||||
deleted file mode 100644
|
||||
index caa83b9..0000000
|
||||
--- a/src/crypto/x509/test-file.crt
|
||||
+++ /dev/null
|
||||
@@ -1,32 +0,0 @@
|
||||
------BEGIN CERTIFICATE-----
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-BgNVHSMEGDAWgBTLT/RbyfBB/Pa07oBnaM+QSJPO9TAMBgNVHRMEBTADAQH/MA0G
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
||||
-vQ==
|
||||
------END CERTIFICATE-----
|
||||
diff --git a/src/crypto/x509/testdata/test-dir.crt b/src/crypto/x509/testdata/test-dir.crt
|
||||
deleted file mode 100644
|
||||
index b7fc9c5..0000000
|
||||
--- a/src/crypto/x509/testdata/test-dir.crt
|
||||
+++ /dev/null
|
||||
@@ -1,31 +0,0 @@
|
||||
------BEGIN CERTIFICATE-----
|
||||
-MIIFazCCA1OgAwIBAgIJAL8a/lsnspOqMA0GCSqGSIb3DQEBCwUAMEwxCzAJBgNV
|
||||
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-g0/v3aXJCp4j/9VoNhI1WXz3M45nysZIL5OQgXymLqJElQa1pZ3Wa4i/nidvT4AT
|
||||
-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
-3UFGzYXDjxYnK2frQfjLS8stOQIqSrGthW6x0fdkVx0y8BByvd5J6+JmZl4UZfzA
|
||||
-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
-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
-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
-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
|
||||
------END CERTIFICATE-----
|
||||
diff --git a/src/net/http/internal/testcert.go b/src/net/http/internal/testcert.go
|
||||
index 2284a83..a33d06b 100644
|
||||
--- a/src/net/http/internal/testcert.go
|
||||
+++ b/src/net/http/internal/testcert.go
|
||||
@@ -10,36 +10,9 @@ import "strings"
|
||||
// "127.0.0.1" and "[::1]", expiring at Jan 29 16:00:00 2084 GMT.
|
||||
// generated from src/crypto/tls:
|
||||
// go run generate_cert.go --rsa-bits 1024 --host 127.0.0.1,::1,example.com --ca --start-date "Jan 1 00:00:00 1970" --duration=1000000h
|
||||
-var LocalhostCert = []byte(`-----BEGIN CERTIFICATE-----
|
||||
-MIICEzCCAXygAwIBAgIQMIMChMLGrR+QvmQvpwAU6zANBgkqhkiG9w0BAQsFADAS
|
||||
-MRAwDgYDVQQKEwdBY21lIENvMCAXDTcwMDEwMTAwMDAwMFoYDzIwODQwMTI5MTYw
|
||||
-MDAwWjASMRAwDgYDVQQKEwdBY21lIENvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
||||
-iQKBgQDuLnQAI3mDgey3VBzWnB2L39JUU4txjeVE6myuDqkM/uGlfjb9SjY1bIw4
|
||||
-iA5sBBZzHi3z0h1YV8QPuxEbi4nW91IJm2gsvvZhIrCHS3l6afab4pZBl2+XsDul
|
||||
-rKBxKKtD1rGxlG4LjncdabFn9gvLZad2bSysqz/qTAUStTvqJQIDAQABo2gwZjAO
|
||||
-BgNVHQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUw
|
||||
-AwEB/zAuBgNVHREEJzAlggtleGFtcGxlLmNvbYcEfwAAAYcQAAAAAAAAAAAAAAAA
|
||||
-AAAAATANBgkqhkiG9w0BAQsFAAOBgQCEcetwO59EWk7WiJsG4x8SY+UIAA+flUI9
|
||||
-tyC4lNhbcF2Idq9greZwbYCqTTTr2XiRNSMLCOjKyI7ukPoPjo16ocHj+P3vZGfs
|
||||
-h1fIw3cSS2OolhloGw/XM6RWPWtPAlGykKLciQrBru5NAPvCMsb/I1DAceTiotQM
|
||||
-fblo6RBxUQ==
|
||||
------END CERTIFICATE-----`)
|
||||
+var LocalhostCert = []byte(``)
|
||||
|
||||
// LocalhostKey is the private key for localhostCert.
|
||||
-var LocalhostKey = []byte(testingKey(`-----BEGIN RSA TESTING KEY-----
|
||||
-MIICXgIBAAKBgQDuLnQAI3mDgey3VBzWnB2L39JUU4txjeVE6myuDqkM/uGlfjb9
|
||||
-SjY1bIw4iA5sBBZzHi3z0h1YV8QPuxEbi4nW91IJm2gsvvZhIrCHS3l6afab4pZB
|
||||
-l2+XsDulrKBxKKtD1rGxlG4LjncdabFn9gvLZad2bSysqz/qTAUStTvqJQIDAQAB
|
||||
-AoGAGRzwwir7XvBOAy5tM/uV6e+Zf6anZzus1s1Y1ClbjbE6HXbnWWF/wbZGOpet
|
||||
-3Zm4vD6MXc7jpTLryzTQIvVdfQbRc6+MUVeLKwZatTXtdZrhu+Jk7hx0nTPy8Jcb
|
||||
-uJqFk541aEw+mMogY/xEcfbWd6IOkp+4xqjlFLBEDytgbIECQQDvH/E6nk+hgN4H
|
||||
-qzzVtxxr397vWrjrIgPbJpQvBsafG7b0dA4AFjwVbFLmQcj2PprIMmPcQrooz8vp
|
||||
-jy4SHEg1AkEA/v13/5M47K9vCxmb8QeD/asydfsgS5TeuNi8DoUBEmiSJwma7FXY
|
||||
-fFUtxuvL7XvjwjN5B30pNEbc6Iuyt7y4MQJBAIt21su4b3sjXNueLKH85Q+phy2U
|
||||
-fQtuUE9txblTu14q3N7gHRZB4ZMhFYyDy8CKrN2cPg/Fvyt0Xlp/DoCzjA0CQQDU
|
||||
-y2ptGsuSmgUtWj3NM9xuwYPm+Z/F84K6+ARYiZ6PYj013sovGKUFfYAqVXVlxtIX
|
||||
-qyUBnu3X9ps8ZfjLZO7BAkEAlT4R5Yl6cGhaJQYZHOde3JEMhNRcVFMO8dJDaFeo
|
||||
-f9Oeos0UUothgiDktdQHxdNEwLjQf7lJJBzV+5OtwswCWA==
|
||||
------END RSA TESTING KEY-----`))
|
||||
+var LocalhostKey = []byte(testingKey(``))
|
||||
|
||||
func testingKey(s string) string { return strings.ReplaceAll(s, "TESTING KEY", "PRIVATE KEY") }
|
||||
--
|
||||
2.17.1
|
||||
|
||||
Binary file not shown.
20
golang.spec
20
golang.spec
@ -2,8 +2,8 @@
|
||||
%global _binaries_in_noarch_packages_terminate_build 0
|
||||
%global golibdir %{_libdir}/golang
|
||||
%global goroot /usr/lib/%{name}
|
||||
%global go_api 1.13
|
||||
%global go_version 1.13
|
||||
%global go_api 1.15
|
||||
%global go_version 1.15
|
||||
%global __spec_install_post /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot /usr/lib/rpm/brp-compress
|
||||
%global __requires_exclude_from ^(%{_datadir}|/usr/lib)/%{name}/(doc|src)/.*$
|
||||
%global __strip /bin/true
|
||||
@ -61,12 +61,12 @@
|
||||
%endif
|
||||
|
||||
Name: golang
|
||||
Version: 1.13.15
|
||||
Version: 1.15.5
|
||||
Release: 1
|
||||
Summary: The Go Programming Language
|
||||
License: BSD and Public Domain
|
||||
URL: https://golang.org/
|
||||
Source0: https://dl.google.com/go/go1.13.15.src.tar.gz
|
||||
Source0: https://dl.google.com/go/go1.15.5.src.tar.gz
|
||||
|
||||
%if !%{golang_bootstrap}
|
||||
BuildRequires: gcc-go >= 5
|
||||
@ -149,15 +149,6 @@ Obsoletes: %{name}-vim < 1.4
|
||||
Obsoletes: emacs-%{name} < 1.4
|
||||
Requires: openEuler-rpm-config
|
||||
|
||||
Patch6002: 0002-syscall-expose-IfInfomsg.X__ifi_pad-on-s390x.patch
|
||||
Patch6003: 0003-golang-delete-pem-files.patch
|
||||
Patch6004: 0004-syscall-implement-rawVforkSyscall-for-linux-arm64.patch
|
||||
Patch6005: 0005-runtime-fix-crash-during-VDSO-calls-on-arm.patch
|
||||
Patch6006: 0006-runtime-save-fetch-g-register-during-VDSO-on-ARM-and.patch
|
||||
Patch6007: 0007-runtime-don-t-fetch-G-from-signal-stack-when-using-c.patch
|
||||
Patch6008: 0008-runtime-don-t-save-G-during-VDSO-if-we-re-handling-s.patch
|
||||
Patch6014: 0013-drop-hard-code-cert.patch
|
||||
|
||||
ExclusiveArch: %{golang_arches}
|
||||
|
||||
|
||||
@ -390,6 +381,9 @@ fi
|
||||
%files devel -f go-tests.list -f go-misc.list -f go-src.list
|
||||
|
||||
%changelog
|
||||
* Tue Dec 18 liuzekun <liuzekun@huawei.com> - 1.15.5-1
|
||||
- upgrade to 1.15.5
|
||||
|
||||
* Tue Aug 18 xiadanni <xiadanni1@huawei.com> - 1.13.15-1
|
||||
- upgrade to 1.13.15
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user