In cpu_fork() do not copy the register windows stashed in the u_pcb
authorclaudio <claudio@openbsd.org>
Mon, 19 Feb 2024 09:59:29 +0000 (09:59 +0000)
committerclaudio <claudio@openbsd.org>
Mon, 19 Feb 2024 09:59:29 +0000 (09:59 +0000)
commit4930177a55dbfa846ec36a56eaa025fd8a8cf8d2
tree9d31181a265cdba571743c0d9edc0b0c60cac17e
parentcfda45639a5cff5780a6f40814e7d74479c846c3
In cpu_fork() do not copy the register windows stashed in the u_pcb
if the new proc has its own stack. In that case the new thread starts
with a fresh stack and there are no register windows to spill back.

This fixes the pthread issues that kurt@ was struggling with for a long
time. Depending on the scheduler a thread would stomp over another threads
stack which caused strange crashes.

Improved diff provided by miod@
OK miod@ mpi@ kurt@
sys/arch/sparc64/sparc64/vm_machdep.c