https://bugs.winehq.org/show_bug.cgi?id=51996
Bug ID: 51996 Summary: aarch64: NtGetContextThread/NtSetContextThread on another thread ignores FPU state due to buggy SIGUSR1 handler Product: Wine Version: 6.21 Hardware: aarch64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: jinoh.kang.kr@gmail.com Regression SHA1: 07f37f21377e930aefeb1fef3ab9c3cf9daee84f Distribution: ---
Created attachment 70987 --> https://bugs.winehq.org/attachment.cgi?id=70987 Test program reproducing the behaviour
Compiled with -O2, the attached test program's output should be:
value = 2.0
When the actual output is:
value = -1.0
This is due to NtGetContextThread/NtSetContextThread not being able to save/restore FP registers, since save_context()/restore_context() ignores them.
The bug can be traced back to commit 07f37f21377 (ntdll: Add support for saving/restoring FPU state on ARM64., 2019-08-13), which implements save_fpu()/restore_fpu() but does not make use of them in save_context()/restore_context().