Cleaning up and splitting subheap creation helpers and free block merge logic.
Should be the last refactoring needed before LFH specific changes, as implemented in https://gitlab.winehq.org/wine/wine/-/merge_requests/1628.
--
v2: ntdll: Keep subheap parent heap pointer and check for mismatches.
ntdll: Move the insertion of the first block out of create_subheap.
ntdll: Split create_free_block into block_init_free / insert_free_block.
ntdll: Merge prev and next free heap blocks in heap_free_block.
ntdll: Split heap blocks before creating or resizing used block.
ntdll: Clear BLOCK_FLAG_PREV_FREE flag out of shrink_used_block.
ntdll: Move heap allocation and initialization into RtlCreateHeap.
ntdll: Split heap region memory allocation to allocate_region helper.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1629
The test for ISmbiosInformationStatics_get_SerialNumber is broken on Window 10 testbot VMs, presumably because they don't have a serial number? It results in an HRESULT of E_UNEXPECTED. I added a broken test case for it. I'm assuming that normal installations of Windows return a valid serial number or at least something like "Not Specified" and not NULL. Also, on my Linux OS running cat /sys/class/dmi/id/product_serial returns "To be filled by O.E.M". So I added a fallback to return 0 as the number. Or is it fine to just return whatever string is found?
On the Windows 8 VMs, the test crashes at line 75, hr = ISmbiosInformationStatics_get_SerialNumber( smbios_statics, &serial ). Not sure what I should do in this case. I was hoping for a flag that checks if the VM is Windows 8, but there doesn't seem to be one. Should I wrap the test in if (0) or is there an alternative way?
Another weird thing is the test fails prematurely on only the 32-bit version of debian11b, saying that the runtimeclass is not registered. I'm assuming it's an issue with the testbot. Debian11 32 bit runs fine.
--
v4: windows.system.profile.systemmanufacturers: Implement ISmbiosInformationStatics_get_SerialNumber.
windows.system.profile.systemmanufacturers/tests: Add ISmbiosInformationStatics_get_SerialNumber tests.
wbemprox: Provide accurate SMBIOS serial number.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1588
--
v3: winegstreamer: Implement media_object_SetInputType for WMV decoder.
winegstreamer: Add WMV support to wg_format.
mf/tests: Test IMediaObject_SetInputType for WMV decoder.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1529
--
v5: ntdll: Inline __wine_unix_call(_fast) dispatch in the syscall dispatcher.
ntdll: Restore frame in return path of the x86 syscall dispatchers.
winecrt0: Inline PE __wine_unix_call(_fast) function calls.
ntdll: Only save non-volatile FPU registers for -nofpu syscalls.
opengl32: Use __wine_unix_call_fast instead of __wine_unix_call.
ntdll: Introduce a new __wine_unix_call_fast syscall.
ntdll: Use -nofpu for NtQueryPerformanceCounter and NtYieldExecution.
winebuild: Introduce a new -nofpu syscall spec flag.
ntdll: Add support for syscall flags in the service CounterTable.
ntdll: Avoid double indirection to get x86_64 syscall_frame pointer.
ntdll: Check SYSCALL_HAVE_WRFSGSBASE syscall flag only for wrfsbase.
ntdll: Swap %eax and %edx registers in the i386 syscall dispatcher.
ntdll: Check syscall table and syscall number before saving FPU.
ntdll: Use named labels for jumps in the syscall dispatcher.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1324
In preparation for https://gitlab.winehq.org/wine/wine/-/merge_requests/1324.
This also begins preparation for a slightly different route than what the MR currently takes, with syscall flags eventually stored in the CounterTable rather than overusing syscall number unused bits.
To do that we're checking the syscall number and loading the syscall table (keeping it in %rbx/%ebx) earlier. This assumes that %rbx isn't modified in between, for instance by the eventual `SYS_arch_prctl` syscall, but I believe it is the case?
--
v2: ntdll: Check SYSCALL_HAVE_WRFSGSBASE syscall flag only for wrfsbase.
ntdll: Swap %eax and %edx registers in the i386 syscall dispatcher.
ntdll: Check syscall table and syscall number before saving FPU.
ntdll: Use named labels for jumps in the syscall dispatcher.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1437
> I'm more optimistic about 8.0. Anyway, I wouldn't mind committing it if we need to. At the same time, since there is an active work on the final solution, we may as well wait a few days and see how it goes. Let me defer that to Alexandre (I think he took over that optimization work).
I've committed some fixes inspired by Rémi's work. Hopefully that will be good enough to avoid the direct calls, can you please give it a try?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1552#note_18342