Commit 1c8d1f45 authored by Austin Clements's avatar Austin Clements

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: default avatarBrad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
Reviewed-by: default avatarDavid Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent daaab44f
......@@ -227,3 +227,14 @@ type sockaddr_un struct {
family uint16
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
}
// 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
// license that can be found in the LICENSE file.
// +build linux
// +build 386 amd64
package runtime
//go:noescape
......
......@@ -39,6 +39,8 @@
#define SYS_socketcall 102
#define SYS_setittimer 104
#define SYS_clone 120
#define SYS_uname 122
#define SYS_mlock 150
#define SYS_sched_yield 158
#define SYS_nanosleep 162
#define SYS_rt_sigreturn 173
......@@ -776,3 +778,20 @@ TEXT runtime·sbrk0(SB),NOSPLIT,$0-4
INVOKE_SYSCALL
MOVL AX, ret+0(FP)
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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment