Supersedes !741.
On macOS 10.14+ `thread_get_register_pointer_values` is called on every thread of the process.
On Linux 4.14+ `membarrier(MEMBARRIER_CMD_PRIVATE_EXPEDITED, ...)` is used.
On x86 Linux <= 4.13 and on other platforms it falls back to calling `NtGetContextThread()` on each thread.
The fast path patches from @tmatthies are slightly modified in the following ways:
1. On unsupported platforms, the `try_*()` functions return `FALSE` instead of `0`.
2. `try_exp_membarrier()` is called first, then `try_mach_tgrpvs()`.
---
Known applications fixed by this MR:
- osu! (rhythm game) song selection menu stuttering
- .NET CoreCLR GC
- HotSpot JVM (-XX:+UseSystemMemoryBarrier) safepoints
--
v3: kernel32/tests: Add a store buffering litmus test involving FlushProcessWriteBuffers.
ntdll: Add slow fallback implementation of NtFlushProcessWriteBuffers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7250
Supersedes !741.
On macOS 10.14+ `thread_get_register_pointer_values` is called on every thread of the process.
On Linux 4.14+ `membarrier(MEMBARRIER_CMD_GLOBAL_EXPEDITED, ...)` is used.
On x86 Linux <= 4.13 and on other platforms it falls back to calling `NtGetContextThread()` on each thread.
The fast path patches from @tmatthies are slightly modified in the following ways:
1. On unsupported platforms, the `try_*()` function returns `FALSE` instead of `0`.
2. `try_exp_membarrier()` is called first, then `try_mach_tgrpvs()`.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7250
Supersedes !741.
On macOS 10.14+ `thread_get_register_pointer_values` is called on every thread of the process.
On Linux 4.14+ `membarrier(MEMBARRIER_CMD_PRIVATE_EXPEDITED, ...)` is used.
On x86 Linux <= 4.13 and on other platforms it falls back to calling `NtGetContextThread()` on each thread.
The fast path patches from @tmatthies are slightly modified in the following ways:
1. On unsupported platforms, the `try_*()` functions return `FALSE` instead of `0`.
2. `try_exp_membarrier()` is called first, then `try_mach_tgrpvs()`.
---
Known applications fixed by this MR:
- osu! (rhythm game) song selection menu stuttering
- .NET CoreCLR GC
- HotSpot JVM (-XX:+UseSystemMemoryBarrier) safepoints
--
v2: kernel32/tests: Add a store buffering litmus test involving FlushProcessWriteBuffers.
ntdll: Add slow fallback implementation of NtFlushProcessWriteBuffers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7250
--
v2: wldap32/tests: Add some tests for LDAP authentication to a Kerberos DC.
wldap32: ldap_init() should resolve NULL hostname to default Kerberos DC.
wldap32: Use correct host when connecting to Kerberos DC.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7235
Modern Windows versions do not export these symbols.
The symbol `??0?$CDynamicArray@GPAG@QAE@I@Z` uses an unusual mangling scheme that no existing tool understands.
This causes issues on ARM64EC, which requires demangling when generating an import library.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7246