Releases: lhmouse/mcfgthread
v2.3 General Availability 2 Released
This minor release contains the following changes since v2.3-ga.1:
- A bug which could cause deadlocks in shared mutexes has been fixed.
- An issue which caused the result of
_MCF_utc_now()to be off by one millisecond has been fixed. - (ARM64 only) When the value of a semaphore is positive,
_MCF_sem_wait()now issues an acquire fence before returning. - The safety timeout value in
__MCF_batch_release_common()was set to 100 microseconds by mistake. It is now set to 1 second. - Many issues in testcases have been fixed.
Special thanks to GitHub Copilot for finding out 2-5!
Full Changelog: v2.3-ga.1...v2.3-ga.2
v2.3 General Availability Released
This minor release contains the following changes since v2.2-ga.2:
- When building with Meson 1.10+, DLLs are created in subdirectories so they no longer interfere with the working compiler in any way.
- When cross-compiling with LLVM, target triplets (identifiers) are now passed to LLVM-RC. Previously LLVM-RC produced resource object files of wrong architectures when cross-compiling between different CPUs, for example when from x86 to ARM64, or vice versa.
- (ARM64 only) Initialization of synchronization objects has been relaxed to use non-atomic instructions.
- (ARM64 only) Support for the MOPS extension in ARMv8.8-A has been added, so
memcpy(),memmove()andmemset()can be implemented in assembly to reduce code size, like on x86. There's probably no such hardware that runs Windows at the moment, but it is implemented anyway. When MOPS isn't supported, they are redirected to external functions from NTDLL. - (x86-32 only)
__MCF_gthr_call_once_seh()and__MCF_cxa_atexit()can now take callbacks with the__fastcallcalling convention. Because there is only one parameter, it is exactly the same with__thiscall. MSVC doesn't allow__thiscallon non-member functions, but__fastcallworks on all compilers.
Full Changelog: v2.2-ga.2...v2.3-ga.1
v2.3 Beta Released
This minor release contains the following changes since v2.2-ga.2:
- When building with Meson 1.10+, DLLs are created in subdirectories so they no longer interfere with the working compiler in any way.
- When cross-compiling with LLVM, target triplets (identifiers) are now passed to LLVM-RC. Previously LLVM-RC produced resource object files of wrong architectures when cross-compiling between different CPUs, for example when from x86 to ARM64, or vice versa.
- (ARM64 only) Initialization of synchronization objects has been relaxed to use non-atomic instructions.
- (ARM64 only) Support for the MOPS extension in ARMv8.8-A has been added, so
memcpy(),memmove()andmemset()can be implemented in assembly to reduce code size, like on x86. There's probably no such hardware that runs Windows at the moment, but it is implemented anyway. When MOPS isn't supported, they are redirected to external functions from NTDLL. - (x86-32 only)
__MCF_gthr_call_once_seh()and__MCF_cxa_atexit()can now take callbacks with the__fastcallcalling convention. Because there is only one parameter, it is exactly the same with__thiscall. MSVC doesn't allow__thiscallon non-member functions, but__fastcallworks on all compilers.
Full Changelog: v2.2-ga.2...v2.3-beta
v2.2 General Availability 2 Released
This minor release contains the following changes since v2.2-ga.1:
- Some build issues with Clang 21 have been fixed.
- An erroneous check for Microsoft linker, which caused errors when cross-compiling without mingw-w64 CRT, has been fixed. (#298)
Full Changelog: v2.2-ga.1...v2.2-ga.2
v2.2 General Availability Released
This minor release contains the following changes since v2.1-ga.1:
- More cross files for Meson have been provided in the
crossdirectory, to ease cross compilation with Clang. When doing a native build, or when the host system is capable of running result binaries (for example when cross-compiling for x86-32 on an x86-64 Windows, or when cross-compiling for x86-64 on an ARM64 Windows), the cross file should be passed as--native-file, like in this example. - ARM64EC builds are now supported. At the moment ARM64EC requires LLVM 20. The goal is that ARM64EC and x86-64 binaries may load each other and may be combined interchangeably. Due to an LLVM bug, linking an x86-64 DLL of mcfgthread may cause crashes, but loading an ARM64EC DLL of mcfgthread in an x86-64 program is fully supported, tested on a physical Windows 11 on ARM tablet.
Full Changelog: v2.1-ga.1...v2.2-ga.1
Second v2.2 Beta Released
This fixes an error in argument forwarding in the ARM64EC exit thunk (a37952e).
This minor release contains the following changes since v2.1-ga.1:
- More cross files for Meson have been provided in the
crossdirectory, to ease cross compilation with Clang. When doing a native build, or when the host system is capable of running result binaries (for example when cross-compiling for x86-32 on an x86-64 Windows, or when cross-compiling for x86-64 on an ARM64 Windows), the cross file should be passed as--native-file, like in this example. - ARM64EC builds are now supported. At the moment ARM64EC requires LLVM 20. The goal is that ARM64EC and x86-64 binaries may load each other and may be combined interchangeably. Due to an LLVM bug, linking an x86-64 DLL of mcfgthread may cause crashes, but loading an ARM64EC DLL of mcfgthread in an x86-64 program is fully supported, tested on a physical Windows 11 on ARM tablet.
Full Changelog: v2.1-ga.1...v2.2-beta.2
v2.2 Beta Released
This minor release contains the following changes since v2.1-ga.1:
- More cross files for Meson have been provided in the
crossdirectory, to ease cross compilation with Clang. When doing a native build, or when the host system is capable of running result binaries (for example when cross-compiling for x86-32 on an x86-64 Windows, or when cross-compiling for x86-64 on an ARM64 Windows), the cross file should be passed as--native-file, like in this example. - ARM64EC builds are now supported. At the moment ARM64EC requires LLVM 20. The goal is that ARM64EC and x86-64 binaries may load each other and may be combined interchangeably. Due to an LLVM bug, linking an x86-64 DLL of mcfgthread may cause crashes, but loading an ARM64EC DLL of mcfgthread in an x86-64 program is fully supported, tested on a physical Windows 11 on ARM tablet.
Full Changelog: v2.1-ga.1...v2.2-beta
v2.1 General Availability Released
This minor release contains the following changes since v2.0-ga.1:
- Fast path in
_MCF_event_set()has been removed, because it's unlikely. - In case of a runtime failure,
RaiseFailFastException()is called to trigger Windows Error Reporting. - When creating a thread, failure of
TlsSetValue()no longer leads to process termination. A new thread will not be created, and errors will be passed to the caller. - With Meson 1.7, tests are no longer built by default.
- In a cross environment, mcfgthread can now be built with only headers, before the mingw-w64 CRT.
- (x86-32 only) Prescient support for safe exception handlers has been implemented. Linker support is available when using LLD, and will be available since Binutils 2.45 1.
- (x86-32 only) An issue that prevented mcfgthread DLL from being loaded (due to a Clang bug 2) has been fixed.
Full Changelog: v2.0-ga.1...v2.1-ga.1
v2.1 Beta Released
This minor release contains the following changes since v2.0-ga.1:
- Fast path in
_MCF_event_set()has been removed, because it's unlikely. - In case of a runtime failure,
RaiseFailFastException()is called to trigger Windows Error Reporting. - When creating a thread, failure of
TlsSetValue()no longer leads to process termination. A new thread will not be created, and errors will be passed to the caller. - With Meson 1.7, tests are no longer built by default.
- In a cross environment, mcfgthread can now be built with only headers, before the mingw-w64 CRT.
- (x86-32 only) Prescient support for safe exception handlers has been implemented. Linker support is available when using LLD, and will be available since Binutils 2.45 1.
- (x86-32 only) An issue that prevented mcfgthread DLL from being loaded (due to a Clang bug 2) has been fixed.
Full Changelog: v2.0-ga.1...v2.1-beta
v2.0 General Availability Released
This major release contains the following changes since v1.9-ga.2:
- There are some ABI-breaking changes (#270).
- New atomic functions about
boolhave been added. The width specifier forboolisb. - The library can be built with Clang for MSVC targets, which is default for the Clang that is installed with Visual Studio Installer. SEH stack unwinding is now functional on x86, with either Clang or MSVC. For this setup, Meson 1.7 or newer is required.
_MCF_thread_self()now callsTlsGetValue2()on Windows 11 24H2, which does not destroy the thread-local last error number, and is more efficient.
Full Changelog: v1.9-ga.2...v2.0-ga.1