Followup to 03039ab2ee.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58335
If I observed it right we currently leave `init_xstate_features` on older computers with EnabledFeatures being zero. This leads in `__wine_syscall_dispatcher` to getting the xsave64 getting called with "$rax = 0x0", therefore e.g. xmm6 gets not saved to the stack. But later e.g. xmm6 gets restored from stack in `__wine_syscall_dispatcher` (see [](https://gitlab.winehq.org/wine/wine/-/blob/wine-10.12/dlls/ntdll/unix/signal...))
From: Bernhard Übelacker bernhardu@mailbox.org
Followup to 03039ab2ee.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58335 --- dlls/ntdll/unix/system.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c index e486da40691..e8758a3df6d 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c @@ -436,10 +436,10 @@ static void init_xstate_features( XSTATE_CONFIGURATION *xstate ) TRACE( "XSAVE details %#x, %#x, %#x, %#x.\n", regs[0], regs[1], regs[2], regs[3] ); supported_mask = ((ULONG64)regs[3] << 32) | regs[0]; supported_mask &= do_xgetbv(0) & supported_features; - if (!(supported_mask >> 2)) return;
xstate->EnabledFeatures = (1 << XSTATE_LEGACY_FLOATING_POINT) | (1 << XSTATE_LEGACY_SSE) | supported_mask; xstate->EnabledVolatileFeatures = xstate->EnabledFeatures; + if (!(supported_mask >> 2)) return; xstate->AllFeatureSize = regs[1];
do_cpuid( 0x0000000d, 1, regs );
Limited testing shows that this patch works. What's the reason that it's marked as a draft?
On Fri Jul 18 11:26:43 2025 +0000, Dmitry Timoshkov wrote:
Limited testing shows that this patch works. What's the reason that it's marked as a draft?
The first run of `test-linux-64` failed, so I wanted to check. But a second run succeeded, so I removed the draft state now.
The real question is what does Windows do in this case?
On Fri Jul 18 23:21:29 2025 +0000, Alexandre Julliard wrote:
The real question is what does Windows do in this case?
I don't know if I understand this right. Is the question how Windows fills the `xstate->EnabledFeatures`?
Then one would somehow need to run a Windows at such an ancient machine (I guess a VM could be sufficient with `-cpu host`?) and examine `user_shared_data.XState.EnabledFeatures` (and EnabledVolatileFeatures), by accessing it like in `test_user_shared_data`?
On Fri Jul 18 23:21:29 2025 +0000, Bernhard Übelacker wrote:
I don't know if I understand this right. Is the question how Windows fills the `xstate->EnabledFeatures`? Then one would somehow need to run a Windows at such an ancient machine (I guess a VM could be sufficient with `-cpu host`?) and examine `user_shared_data.XState.EnabledFeatures` (and EnabledVolatileFeatures), by accessing it like in `test_user_shared_data`?
Yes that's the trick, it would need someone with the appropriate hardware. I'm not sure if a VM would emulate cpuid properly, but it's certainly worth a try.
On Sat Jul 19 07:55:12 2025 +0000, Alexandre Julliard wrote:
Yes that's the trick, it would need someone with the appropriate hardware. I'm not sure if a VM would emulate cpuid properly, but it's certainly worth a try.
Unfortunately a VM with `cpu host` is not possible because this CPU misses the vmx/Intel-VT extension ... Had hoped I can avoid installing a Windows 7 on this machine.
See below the output of the ntdll:virtual test inside a Windows 7.
If I read it right my change is then not reflecting what Windows does. But would that mean using `EnabledFeatures` in `__wine_syscall_dispatcher` is wrong?
``` C:\temp> ntdll_test.exe virtual virtual.c:3293: system page size 0x1000 virtual.c:313: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:722: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:1662: Test failed: NtMapViewOfSection returned address 000007FEFC300000 virtual.c:1692: Tests skipped: NtMapViewOfSectionEx() is not supported. virtual.c:2516: Tests skipped: no NtSetInformationVirtualMemory in ntdll virtual.c:2033: XState EnabledFeatures 0xf95a0000, EnabledSupervisorFeatures 0, EnabledVolatileFeatures 3. virtual.c:2038: Test failed: Got unexpected feature_mask 3. virtual.c:2038: this is the last test seen before the exception 0374:virtual: unhandled exception c0000005 at 0000000000000000 ```
For completeness, this is the lscpu output: ``` root@aspire8735:~# lscpu Architektur: x86_64 CPU Operationsmodus: 32-bit, 64-bit Adressgrößen: 36 bits physical, 48 bits virtual Byte-Reihenfolge: Little Endian CPU(s): 2 Liste der Online-CPU(s): 0,1 Anbieterkennung: GenuineIntel BIOS-Anbieterkennung: Intel Modellname: Pentium(R) Dual-Core CPU T4500 @ 2.30GHz BIOS-Modellname: CPU Version CPU @ 2.3GHz BIOS-Prozessorfamilie: 190 Prozessorfamilie: 6 Modell: 23 Thread(s) pro Kern: 1 Kern(e) pro Sockel: 2 Sockel: 1 Stepping: 10 Skalierung der CPU(s): 52% Maximale Taktfrequenz der CPU: 2300,0000 Minimale Taktfrequenz der CPU: 1200,0000 BogoMIPS: 4588,54 Markierungen: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm pti dtherm Caches (Gesamtsumme): L1d: 64 KiB (2 Instanzen) L1i: 64 KiB (2 Instanzen) L2: 1 MiB (1 Instanz) NUMA: NUMA-Knoten: 1 NUMA-Knoten0 CPU(s): 0,1 Schwachstellen: Gather data sampling: Not affected Indirect target selection: Not affected Itlb multihit: KVM: Mitigation: VMX unsupported L1tf: Mitigation; PTE Inversion Mds: Vulnerable: Clear CPU buffers attempted, no microcode; SMT disabled Meltdown: Mitigation; PTI Mmio stale data: Unknown: No mitigations Reg file data sampling: Not affected Retbleed: Not affected Spec rstack overflow: Not affected Spec store bypass: Vulnerable Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Spectre v2: Mitigation; Retpolines; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected Srbds: Not affected Tsx async abort: Not affected root@aspire8735:~# ```
On Sat Jul 19 15:24:14 2025 +0000, Bernhard Übelacker wrote:
Unfortunately a VM with `cpu host` is not possible because this CPU misses the vmx/Intel-VT extension ... Had hoped I can avoid installing a Windows 7 on this machine. See below the output of the ntdll:virtual test inside a Windows 7. If I read it right my change is then not reflecting what Windows does. But would that mean using `EnabledFeatures` in `__wine_syscall_dispatcher` is wrong?
C:\temp> ntdll_test.exe virtual virtual.c:3293: system page size 0x1000 virtual.c:313: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:722: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:1662: Test failed: NtMapViewOfSection returned address 000007FEFC300000 virtual.c:1692: Tests skipped: NtMapViewOfSectionEx() is not supported. virtual.c:2516: Tests skipped: no NtSetInformationVirtualMemory in ntdll virtual.c:2033: XState EnabledFeatures 0xf95a0000, EnabledSupervisorFeatures 0, EnabledVolatileFeatures 3. virtual.c:2038: Test failed: Got unexpected feature_mask 3. virtual.c:2038: this is the last test seen before the exception 0374:virtual: unhandled exception c0000005 at 0000000000000000
For completeness, this is the lscpu output:
root@aspire8735:~# lscpu Architektur: x86_64 CPU Operationsmodus: 32-bit, 64-bit Adressgrößen: 36 bits physical, 48 bits virtual Byte-Reihenfolge: Little Endian CPU(s): 2 Liste der Online-CPU(s): 0,1 Anbieterkennung: GenuineIntel BIOS-Anbieterkennung: Intel Modellname: Pentium(R) Dual-Core CPU T4500 @ 2.30GHz BIOS-Modellname: CPU Version CPU @ 2.3GHz BIOS-Prozessorfamilie: 190 Prozessorfamilie: 6 Modell: 23 Thread(s) pro Kern: 1 Kern(e) pro Sockel: 2 Sockel: 1 Stepping: 10 Skalierung der CPU(s): 52% Maximale Taktfrequenz der CPU: 2300,0000 Minimale Taktfrequenz der CPU: 1200,0000 BogoMIPS: 4588,54 Markierungen: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm xsave lahf_lm pti dtherm Caches (Gesamtsumme): L1d: 64 KiB (2 Instanzen) L1i: 64 KiB (2 Instanzen) L2: 1 MiB (1 Instanz) NUMA: NUMA-Knoten: 1 NUMA-Knoten0 CPU(s): 0,1 Schwachstellen: Gather data sampling: Not affected Indirect target selection: Not affected Itlb multihit: KVM: Mitigation: VMX unsupported L1tf: Mitigation; PTE Inversion Mds: Vulnerable: Clear CPU buffers attempted, no microcode; SMT disabled Meltdown: Mitigation; PTI Mmio stale data: Unknown: No mitigations Reg file data sampling: Not affected Retbleed: Not affected Spec rstack overflow: Not affected Spec store bypass: Vulnerable Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization Spectre v2: Mitigation; Retpolines; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected Srbds: Not affected Tsx async abort: Not affected root@aspire8735:~#
Is using a USB drive with Windows 7 an option?
Is using a USB drive with Windows 7 an option?
I guess it should not make a difference how it is bootet, but I guess I got already a usable sample from EnabledFeatures above.
On Sat Jul 19 16:05:24 2025 +0000, Bernhard Übelacker wrote:
Is using a USB drive with Windows 7 an option?
I guess it should not make a difference how it is bootet, but I guess I got already a usable sample from EnabledFeatures above.
I have Core 2 Quad that I dual boot Void Linux and Windows 10 LTSC 2019. Tell me if I can help.
On Mon Jul 21 11:02:03 2025 +0000, Xerox Slayer wrote:
I have a Core2Quad that I dual boot Void Linux and Windows 10 LTSC 2019. Let me know if I can help. I can also install Windows 7 on it if you think that will be even better.
From my testing it seems that commit 745a11a231816a7d82490156c72a18c39216a14c introduced the issue described in https://bugs.winehq.org/show_bug.cgi?id=58335 and for which this merge request is a fix, at least from my testing. Does that help to find a solution?
Hello @xeroxslayer, if you are prepared to build a current wine git with tests enabled, it might be interesting to copy the dlls/ntdll/x86_64-windows/ntdll_test.exe to the windows side and run `ntdll_test.exe virtual` like I have done above. Most intersting would be the line starting with `XState EnabledFeatures`.
Hello @escwyp, I fear my test result above may indicate the lowest 3 bits of `EnabledFeatures` are not set which in my opinion would mean we should not use it in `__wine_syscall_dispatcher` like it is currently done. But I guess we should wait for an authoritative answer from Alexandre when he is back.
On Thu Jul 24 23:13:33 2025 +0000, Jean Rene Dawin wrote:
From my testing it seems that commit 745a11a231816a7d82490156c72a18c39216a14c introduced the issue described in https://bugs.winehq.org/show_bug.cgi?id=58335 and for which this merge request is a fix, at least from my testing. Does that help to find a solution?
Hello @xeroxslayer, if you are prepared to build a current wine git with tests enabled, it might be interesting to copy the dlls/ntdll/x86_64-windows/ntdll_test.exe to the windows side and run `ntdll_test.exe virtual` like I have done above. Most intersting would be the line starting with `XState EnabledFeatures`.
Hello @escwyp, I fear my test result above may indicate the lowest 3 bits of `EnabledFeatures` are not set which in my opinion would mean we should not use it in `__wine_syscall_dispatcher` like it is currently done. But I guess we should wait for an authoritative answer from Alexandre when he is back.
On Fri Jul 25 19:59:21 2025 +0000, Bernhard Übelacker wrote:
Hello @xeroxslayer, if you are prepared to build a current wine git with tests enabled, it might be interesting to copy the dlls/ntdll/x86_64-windows/ntdll_test.exe to the windows side and run `ntdll_test.exe virtual` like I have done above. Most intersting would be the line starting with `XState EnabledFeatures`. Hello @escwyp, I fear my test result above may indicate the lowest 3 bits of `EnabledFeatures` are not set which in my opinion would mean we should not use it in `__wine_syscall_dispatcher` like it is currently done. But I guess we should wait for an authoritative answer from Alexandre when he is back.
@bernhardu From your ntdll:virtual test on Windows 7, it looks like you were running Windows 7 SP0 which doesn't support AVX or XState (hence why `user_shared_data->XState` contains garbage and the crash when trying to run the missing `GetEnabledXStateFeatures`). It's a bug that the tests don't handle SP0 correctly, although maybe one we don't care about.
Otherwise I think that laptop is a good one to test with, I think it has XSAVE but definitely not AVX.
I tried running Linux and Windows 10 under VMware and disabling AVX through CPUID overrides (I think VirtualBox can also do this), here's what I get when running the tests:
``` C:\Users\Brendan>ntdll_test.exe virtual virtual.c:3246: system page size 0x1000 virtual.c:1955: Tests skipped: MemExtendedParameterImageMachine not supported virtual.c:2033: XState EnabledFeatures 0x3, EnabledSupervisorFeatures 0, EnabledVolatileFeatures 3. virtual.c:2043: Test failed: Got unexpected EnabledFeatures 3. virtual.c:2047: Test failed: Got unexpected Size 576. virtual.c:2052: Test failed: Got unexpected AllFeatureSize 576. virtual.c:2062: Test failed: Got unexpected Features[2].Size 0, expected 256. virtual.c:2064: Test failed: Got unexpected Features[2].Offset 0, expected 576. ```
These tests (and likely `init_xstate_features`) clearly don't handle the case where the CPU has XSAVE but not AVX.
On Thu Aug 7 19:12:36 2025 +0000, Brendan Shanks wrote:
@bernhardu From your ntdll:virtual test on Windows 7, it looks like you were running Windows 7 SP0 which doesn't support AVX or XState (hence why `user_shared_data->XState` contains garbage and the crash when trying to run the missing `GetEnabledXStateFeatures`). It's a bug that the tests don't handle SP0 correctly, although maybe one we don't care about. Otherwise I think that laptop is a good one to test with, I think it has XSAVE but definitely not AVX. I tried running Linux and Windows 10 under VMware and disabling AVX through CPUID overrides (I think VirtualBox can also do this), here's what I get when running the tests:
C:\Users\Brendan>ntdll_test.exe virtual virtual.c:3246: system page size 0x1000 virtual.c:1955: Tests skipped: MemExtendedParameterImageMachine not supported virtual.c:2033: XState EnabledFeatures 0x3, EnabledSupervisorFeatures 0, EnabledVolatileFeatures 3. virtual.c:2043: Test failed: Got unexpected EnabledFeatures 3. virtual.c:2047: Test failed: Got unexpected Size 576. virtual.c:2052: Test failed: Got unexpected AllFeatureSize 576. virtual.c:2062: Test failed: Got unexpected Features[2].Size 0, expected 256. virtual.c:2064: Test failed: Got unexpected Features[2].Offset 0, expected 576.
These tests (and likely `init_xstate_features`) clearly don't handle the case where the CPU has XSAVE but not AVX.
Thanks for taking care - so I am going to repeat the `ntdll_test` on that laptop with upgrading to latest service pack.
On Fri Aug 8 14:56:23 2025 +0000, Bernhard Übelacker wrote:
Thanks for taking care - so I am going to repeat the `ntdll_test` on that laptop with upgrading to latest service pack.
This is with winver showing `Windows 7 Version 6.1 (Build 7601: Service pack 1)`: ``` C:\temp>ntdll_test.exe virtual virtual.c:3293: system page size 0x1000 virtual.c:313: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:722: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:1692: Tests skipped: NtMapViewOfSectionEx() is not supported. virtual.c:2516: Tests skipped: no NtSetInformationVirtualMemory in ntdll virtual.c:2033: XState EnabledFeatures 0xf9d20000, EnabledSupervisorFeatures 0, EnabledVolatileFeatures 3. virtual.c:2038: Test failed: Got unexpected feature_mask 3. virtual.c:2041: Test failed: Got unexpected feature_mask 3. virtual.c:2043: Test failed: Got unexpected EnabledFeatures f9d20000. virtual.c:2045: Test failed: Got unexpected EnabledVolatileFeatures 3. virtual.c:2047: Test failed: Got unexpected Size 576. virtual.c:2062: Test failed: Got unexpected Features[2].Size 4294965248, expected 256. virtual.c:2064: Test failed: Got unexpected Features[2].Offset 66592992, expected 576. virtual.c:2165: Tests skipped: RtlFindExportedRoutineByName not supported virtual.c:2748: Tests skipped: MemoryImageInformation not supported 0b58:virtual: 1 tests executed (0 marked as todo, 0 as flaky, 0 failures), 0 skipped. 0b8c:virtual: 2061 tests executed (0 marked as todo, 0 as flaky, 7 failures), 6 skipped. ```
On Fri Aug 8 16:09:15 2025 +0000, Bernhard Übelacker wrote:
This is with winver showing `Windows 7 Version 6.1 (Build 7601: Service pack 1)`:
C:\temp>ntdll_test.exe virtual virtual.c:3293: system page size 0x1000 virtual.c:313: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:722: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:1692: Tests skipped: NtMapViewOfSectionEx() is not supported. virtual.c:2516: Tests skipped: no NtSetInformationVirtualMemory in ntdll virtual.c:2033: XState EnabledFeatures 0xf9d20000, EnabledSupervisorFeatures 0, EnabledVolatileFeatures 3. virtual.c:2038: Test failed: Got unexpected feature_mask 3. virtual.c:2041: Test failed: Got unexpected feature_mask 3. virtual.c:2043: Test failed: Got unexpected EnabledFeatures f9d20000. virtual.c:2045: Test failed: Got unexpected EnabledVolatileFeatures 3. virtual.c:2047: Test failed: Got unexpected Size 576. virtual.c:2062: Test failed: Got unexpected Features[2].Size 4294965248, expected 256. virtual.c:2064: Test failed: Got unexpected Features[2].Offset 66592992, expected 576. virtual.c:2165: Tests skipped: RtlFindExportedRoutineByName not supported virtual.c:2748: Tests skipped: MemoryImageInformation not supported 0b58:virtual: 1 tests executed (0 marked as todo, 0 as flaky, 0 failures), 0 skipped. 0b8c:virtual: 2061 tests executed (0 marked as todo, 0 as flaky, 7 failures), 6 skipped.
Above was directly after the big SP1 update. Now after having installed all updates from a wsus-offline folder from 2016 it still shows `Windows 7 Version 6.1 (Build 7601: Service pack 1):`, but now the output is much shorter and especially the `Old structure layout.` path is now taken. (Below is with having the trace copied into that if block.) ``` C:\temp> ntdll_test.exe virtual virtual.c:3319: system page size 0x1000 virtual.c:313: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:722: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:1692: Tests skipped: NtMapViewOfSectionEx() is not supported. virtual.c:2518: Tests skipped: no NtSetInformationVirtualMemory in ntdll virtual.c:2029: XState EnabledFeatures 0, EnabledSupervisorFeatures 0, EnabledVolatileFeatures 3. virtual.c:2031: Tests skipped: Old structure layout. virtual.c:2167: Tests skipped: RtlFindExportedRoutineByName not supported virtual.c:2750: Tests skipped: MemoryImageInformation not supported 09b8:virtual: 1 tests executed (0 marked as todo, 0 as flaky, 0 failures), 0 skipped. 0bd8:virtual: 2043 tests executed (0 marked as todo, 0 as flaky, 0 failures), 7 skipped.```
On Fri Aug 8 18:09:57 2025 +0000, Bernhard Übelacker wrote:
Above was directly after the big SP1 update. Now after having installed all updates from a wsus-offline folder from 2016 it still shows `Windows 7 Version 6.1 (Build 7601: Service pack 1)`. But now the output is much shorter and especially we enter the `Old structure layout.` path. (Below is the added trace line and below the output.)
win_skip("Old structure layout.\n"); + trace("XState xs_old->EnabledFeatures %#I64x.\n", xs_old->EnabledFeatures); return;
C:\temp> ntdll_test.exe virtual virtual.c:3318: system page size 0x1000 virtual.c:313: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:722: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:1692: Tests skipped: NtMapViewOfSectionEx() is not supported. virtual.c:2517: Tests skipped: no NtSetInformationVirtualMemory in ntdll virtual.c:2029: Tests skipped: Old structure layout. virtual.c:2030: XState xs_old->EnabledFeatures 0x3. virtual.c:2166: Tests skipped: RtlFindExportedRoutineByName not supported virtual.c:2749: Tests skipped: MemoryImageInformation not supported 0884:virtual: 1 tests executed (0 marked as todo, 0 as flaky, 0 failures), 0 skipped. 06f4:virtual: 2049 tests executed (0 marked as todo, 0 as flaky, 0 failures), 7 skipped.
So that means my output in the comment from two weeks ago is invalid as it used the wrong layout for Windows 7? And I guess this proves EnabledFeatures should have a value of 3 at this machine? Are we confident enough to say the patch of this merge request is right?
The offset (and I think format) of `XState` in `USER_SHARED_DATA` is different between Windows 7 SP1 and Win 8+ (see [Geoff Chappell](https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi_x/...)), the "old structure layout" is the Win7SP1 offset. I'm not sure how to explain your SP1 pre-update results, maybe the check in the tests is not reliable (IMO it should really be checking the Windows version, not expecting 0 at the new offset).
I think the patch is partially correct (EnabledFeatures should be 3), but the rest of the XState structure needs to be populated. Those tests don't run on the old structure layout but if you run a newer Windows version I suspect they will fail (like the results I posted).
This is getting complicated, but I think the right path is to install a newer Windows version, fix the tests so they correctly handle the non-AVX case, then have Wine populate XState correctly for that case as well.
On Fri Aug 8 20:55:07 2025 +0000, Brendan Shanks wrote:
The offset (and I think format) of `XState` in `USER_SHARED_DATA` is different between Windows 7 SP1 and Win 8+ (see [Geoff Chappell](https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi_x/...)), the "old structure layout" is the Win7SP1 offset. I'm not sure how to explain your SP1 pre-update results, maybe the check in the tests is not reliable (IMO it should really be checking the Windows version, not expecting 0 at the new offset). I think the patch is partially correct (EnabledFeatures should be 3), but the rest of the XState structure needs to be populated. Those tests don't run on the old structure layout but if you run a newer Windows version I suspect they will fail (like the results I posted). This is getting complicated, but I think the right path is to install a newer Windows version, fix the tests so they correctly handle the non-AVX case, then have Wine populate XState correctly for that case as well.
I feared this would lead to installing another Windows ...
Following output is from this Intel T4500 equipped laptop running now "bare metal" `Windows 8.1 Version 6.3 (Build 9600)`: ``` C:\temp> ntdll_test.exe virtual virtual.c:3317: system page size 0x1000 virtual.c:313: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:722: Tests skipped: NtAllocateVirtualMemoryEx() is missing virtual.c:1692: Tests skipped: NtMapViewOfSectionEx() is not supported. virtual.c:2033: XState EnabledFeatures 0x3, EnabledSupervisorFeatures 0, EnabledVolatileFeatures 3. virtual.c:2043: Test failed: Got unexpected EnabledFeatures 3. virtual.c:2047: Test failed: Got unexpected Size 576. virtual.c:2062: Test failed: Got unexpected Features[2].Size 0, expected 256. virtual.c:2064: Test failed: Got unexpected Features[2].Offset 0, expected 576. virtual.c:2165: Tests skipped: RtlFindExportedRoutineByName not supported virtual.c:2748: Tests skipped: MemoryImageInformation not supported 0aa4:virtual: 1 tests executed (0 marked as todo, 0 as flaky, 0 failures), 0 skipped. 0804:virtual: 2433 tests executed (0 marked as todo, 0 as flaky, 4 failures), 5 skipped. ```