Hi Martin, On 2026-06-16 08:40, Martin Storsjö wrote: > When running Wine on arm64, on HW with pointer authentication > (armv8.3 and newer), Wine fails to run.
[...] > The issue can be consistently observed by running > "WINEDEBUG=+seh wine wineboot" in a fresh install with no > preexisting wine prefix (~/.wine). > > On older hardware, without support for pointer authentication, > Wine starts up nicely (and there are a handful of debug printouts > about unwinding one exception). On newer hardware, it results in > repeated printouts about EXCEPTION_ILLEGAL_INSTRUCTION. On systems with FEAT_FPAC support, indeed I could reproduce the behavior you mentioned: EXCEPTION_ILLEGAL_INSTRUCTION printed out repeatedly, immediate failure. On systems with pointer authentication but without FEAT_FPAC, the issue is more subtle: things seem to more or less work, but explorer.exe maxes out one CPU core. Also, running simple stuff like `wine cmd` does not really work. > This fix will be in the upcoming development release Wine 11.12, > but it also applies cleanly on e.g. Wine 10.0. Applying this > patch in the Debian packaging will likely fix this issue. I built a local version of wine with your patch, and it does seem to fix the issue for systems without FEAT_FPAC. I don't see explorer.exe maxing out cores, and `wine cmd` works fine. However, on systems with FEAT_FPAC I still get illegal instructions. The general difference between the two is that with FEAT_FPAC, the autiasp (or equivalent) instruction fails with a SIGILL when failing to validate the value stored in LR. Without FEAT_FPAC, the autiasp instruction itself does not cause an exception, but instead it leaves a faulting value in LR. The crash then occurs when that corrupted value is next used. See https://wiki.debian.org/ToolChain/PACBTI#PAC-1. Here's the SIGILL with your patch: $ WINEDEBUG=+seh gdb /usr/lib/aarch64-linux-gnu/wine/wine [...] (gdb) run wineboot [...] wine_dbg_output: debugstr buffer overflow (contents: '002c:trace:seh:dispatch_exception code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D76230 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c000001d (EXCEPTION_ILLEGAL_INSTRUCTION) flags=0 addr=0000FFFFF7D763F0 code=c00000fd (EXCEPTION_STACK_OVERFLOW) flags=0 addr=00006FFFFFD567C4 ') 002c:err:virtual:virtual_setup_exception nested exception on signal stack addr 0xfffff7e7b5bc stack 0x7ffce130 Program received signal SIGILL, Illegal instruction. 0x0000fffff7d76230 in __wine_syscall_dispatcher () from /usr/lib/aarch64-linux-gnu/wine/aarch64-unix/ntdll.so For anyone who wants to follow along and build a patched wine, the version currently in sid (10.0~repack-12) does not build for several reasons. First you have to install a bunch of unicode-related packages from stable due to https://bugs.debian.org/1125336 # apt install unicode-data=15.1.0-1 unicode-idna=16.0.0-1 unicode-cldr-core=46-0.1 Then the make_vulkan bits fail due to the XML files shipped by libvulkan being too new. Again installing stuff from stable helps: # apt install libvulkan-dev=1.4.309.0-1 libvulkan1=1.4.309.0-1 The patch disable/duplicate-nls.patch does not seem to apply, I've commented it out in debian/patch/series. Then later the build fails due to NLS files not being installed anywhere. Out of time, I just added the following to debian/wine-common.install to carry on with the build: usr/* usr/share/wine/nls

