3f1642e4bc
ring0.Save/LoadFloatingPoint() are only usable if the caller can ensure that Go will not clobber floating point registers before/after calling them respectively. Due to regabig in Go 1.17, this is no longer the case; regabig (among other things) maintains a zeroed XMM15 during ABIInternal execution, including by zeroing it after ABI0-to-ABIInternal transitions. In ring0.sysenter/exception, this happens in ring0.kernelSyscall/kernelException.abi0 respectively; in ring0.CPU.SwitchToUser, this happens after returning from ring0.sysret/iret.abi0. Delete these functions and do floating point save/load in assembly. While arm64 doesn't appear to be immediately affected (so this CL permits us to resume usage of Go 1.17), its use of Save/LoadFloatingPoint() still seems to be incorrect for the same fundamental reason (Go code can't sanely assume what registers the Go compiler will or won't use) and should be fixed eventually. PiperOrigin-RevId: 401895658 |
||
---|---|---|
.. | ||
gen_offsets | ||
pagetables | ||
BUILD | ||
aarch64.go | ||
defs.go | ||
defs_amd64.go | ||
defs_arm64.go | ||
entry_amd64.go | ||
entry_amd64.s | ||
entry_arm64.go | ||
entry_arm64.s | ||
kernel.go | ||
kernel_amd64.go | ||
kernel_arm64.go | ||
kernel_unsafe.go | ||
lib_amd64.go | ||
lib_amd64.s | ||
lib_arm64.go | ||
lib_arm64.s | ||
offsets_amd64.go | ||
offsets_arm64.go | ||
ring0.go | ||
x86.go |