Skip to content

Releases: lhmouse/mcfgthread

v2.3 General Availability 2 Released

22 Mar 12:46
3662be1

Choose a tag to compare

This minor release contains the following changes since v2.3-ga.1:

  1. A bug which could cause deadlocks in shared mutexes has been fixed.
  2. An issue which caused the result of _MCF_utc_now() to be off by one millisecond has been fixed.
  3. (ARM64 only) When the value of a semaphore is positive, _MCF_sem_wait() now issues an acquire fence before returning.
  4. The safety timeout value in __MCF_batch_release_common() was set to 100 microseconds by mistake. It is now set to 1 second.
  5. 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

21 Jan 03:12
3fb7e52

Choose a tag to compare

This minor release contains the following changes since v2.2-ga.2:

  1. When building with Meson 1.10+, DLLs are created in subdirectories so they no longer interfere with the working compiler in any way.
  2. 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.
  3. (ARM64 only) Initialization of synchronization objects has been relaxed to use non-atomic instructions.
  4. (ARM64 only) Support for the MOPS extension in ARMv8.8-A has been added, so memcpy(), memmove() and memset() 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.
  5. (x86-32 only) __MCF_gthr_call_once_seh() and __MCF_cxa_atexit() can now take callbacks with the __fastcall calling convention. Because there is only one parameter, it is exactly the same with __thiscall. MSVC doesn't allow __thiscall on non-member functions, but __fastcall works on all compilers.

Full Changelog: v2.2-ga.2...v2.3-ga.1

v2.3 Beta Released

06 Jan 04:05
a8368a7

Choose a tag to compare

v2.3 Beta Released Pre-release
Pre-release

This minor release contains the following changes since v2.2-ga.2:

  1. When building with Meson 1.10+, DLLs are created in subdirectories so they no longer interfere with the working compiler in any way.
  2. 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.
  3. (ARM64 only) Initialization of synchronization objects has been relaxed to use non-atomic instructions.
  4. (ARM64 only) Support for the MOPS extension in ARMv8.8-A has been added, so memcpy(), memmove() and memset() 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.
  5. (x86-32 only) __MCF_gthr_call_once_seh() and __MCF_cxa_atexit() can now take callbacks with the __fastcall calling convention. Because there is only one parameter, it is exactly the same with __thiscall. MSVC doesn't allow __thiscall on non-member functions, but __fastcall works on all compilers.

Full Changelog: v2.2-ga.2...v2.3-beta

v2.2 General Availability 2 Released

18 Oct 11:39
2ed7062

Choose a tag to compare

This minor release contains the following changes since v2.2-ga.1:

  1. Some build issues with Clang 21 have been fixed.
  2. 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

19 Sep 08:26
14a7b00

Choose a tag to compare

This minor release contains the following changes since v2.1-ga.1:

  1. More cross files for Meson have been provided in the cross directory, 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.
  2. 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

23 Aug 08:44
a37952e

Choose a tag to compare

Pre-release

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:

  1. More cross files for Meson have been provided in the cross directory, 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.
  2. 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

20 Aug 06:50
03958b5

Choose a tag to compare

v2.2 Beta Released Pre-release
Pre-release

This minor release contains the following changes since v2.1-ga.1:

  1. More cross files for Meson have been provided in the cross directory, 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.
  2. 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

21 Apr 03:59
cc3e589

Choose a tag to compare

This minor release contains the following changes since v2.0-ga.1:

  1. Fast path in _MCF_event_set() has been removed, because it's unlikely.
  2. In case of a runtime failure, RaiseFailFastException() is called to trigger Windows Error Reporting.
  3. 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.
  4. With Meson 1.7, tests are no longer built by default.
  5. In a cross environment, mcfgthread can now be built with only headers, before the mingw-w64 CRT.
  6. (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.
  7. (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


  1. https://github.com/bminor/binutils-gdb/commit/236214b1981b952d212e8bfd7b811210653771ae

  2. llvm/llvm-project#132411

v2.1 Beta Released

11 Apr 06:57
ed0e4d5

Choose a tag to compare

v2.1 Beta Released Pre-release
Pre-release

This minor release contains the following changes since v2.0-ga.1:

  1. Fast path in _MCF_event_set() has been removed, because it's unlikely.
  2. In case of a runtime failure, RaiseFailFastException() is called to trigger Windows Error Reporting.
  3. 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.
  4. With Meson 1.7, tests are no longer built by default.
  5. In a cross environment, mcfgthread can now be built with only headers, before the mingw-w64 CRT.
  6. (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.
  7. (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


  1. https://github.com/bminor/binutils-gdb/commit/236214b1981b952d212e8bfd7b811210653771ae

  2. llvm/llvm-project#132411

v2.0 General Availability Released

29 Jan 13:09
b8dcc99

Choose a tag to compare

This major release contains the following changes since v1.9-ga.2:

  1. There are some ABI-breaking changes (#270).
  2. New atomic functions about bool have been added. The width specifier for bool is b.
  3. 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.
  4. _MCF_thread_self() now calls TlsGetValue2() 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