mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: mlock top of signal stack on both amd64 and 386
CL 209899 worked around an issue that corrupts vector registers in recent versions of the Linux kernel by mlocking the top page of every signal stack on amd64. However, the underlying issue also affects the XMM registers on 386. This CL applies the mlock fix to both amd64 and 386. Fixes #35777 (again). Change-Id: I9886f2dc4c23625421296bd5518d5fd3288bfe48 Reviewed-on: https://go-review.googlesource.com/c/go/+/210345 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
daaab44f31
commit
1c8d1f45ba
4 changed files with 33 additions and 7 deletions
|
|
@ -227,3 +227,14 @@ type sockaddr_un struct {
|
||||||
family uint16
|
family uint16
|
||||||
path [108]byte
|
path [108]byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const __NEW_UTS_LEN = 64
|
||||||
|
|
||||||
|
type new_utsname struct {
|
||||||
|
sysname [__NEW_UTS_LEN + 1]byte
|
||||||
|
nodename [__NEW_UTS_LEN + 1]byte
|
||||||
|
release [__NEW_UTS_LEN + 1]byte
|
||||||
|
version [__NEW_UTS_LEN + 1]byte
|
||||||
|
machine [__NEW_UTS_LEN + 1]byte
|
||||||
|
domainname [__NEW_UTS_LEN + 1]byte
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
// 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.
|
|
||||||
|
|
||||||
package runtime
|
|
||||||
|
|
||||||
func osArchInit() {}
|
|
||||||
|
|
@ -2,6 +2,9 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build linux
|
||||||
|
// +build 386 amd64
|
||||||
|
|
||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
//go:noescape
|
//go:noescape
|
||||||
|
|
@ -39,6 +39,8 @@
|
||||||
#define SYS_socketcall 102
|
#define SYS_socketcall 102
|
||||||
#define SYS_setittimer 104
|
#define SYS_setittimer 104
|
||||||
#define SYS_clone 120
|
#define SYS_clone 120
|
||||||
|
#define SYS_uname 122
|
||||||
|
#define SYS_mlock 150
|
||||||
#define SYS_sched_yield 158
|
#define SYS_sched_yield 158
|
||||||
#define SYS_nanosleep 162
|
#define SYS_nanosleep 162
|
||||||
#define SYS_rt_sigreturn 173
|
#define SYS_rt_sigreturn 173
|
||||||
|
|
@ -776,3 +778,20 @@ TEXT runtime·sbrk0(SB),NOSPLIT,$0-4
|
||||||
INVOKE_SYSCALL
|
INVOKE_SYSCALL
|
||||||
MOVL AX, ret+0(FP)
|
MOVL AX, ret+0(FP)
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
// func uname(utsname *new_utsname) int
|
||||||
|
TEXT ·uname(SB),NOSPLIT,$0-8
|
||||||
|
MOVL $SYS_uname, AX
|
||||||
|
MOVL utsname+0(FP), BX
|
||||||
|
INVOKE_SYSCALL
|
||||||
|
MOVL AX, ret+4(FP)
|
||||||
|
RET
|
||||||
|
|
||||||
|
// func mlock(addr, len uintptr) int
|
||||||
|
TEXT ·mlock(SB),NOSPLIT,$0-12
|
||||||
|
MOVL $SYS_mlock, AX
|
||||||
|
MOVL addr+0(FP), BX
|
||||||
|
MOVL len+4(FP), CX
|
||||||
|
INVOKE_SYSCALL
|
||||||
|
MOVL AX, ret+8(FP)
|
||||||
|
RET
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue