This release brings lots of features and bug fixes!
- x86_64 stack overflow checks now support the large code model.
- tcsetwinsize now works in musl.
- fix a memory ordering issue in the weak load barrier on ARM64, which would lead to weak pointers occasionally returning NULL when their target was still live.
- fix a memory ordering issue on ARM64 that would lead to threads sometimes seeing a not-fully-initialized object.
- fix a deadlock involving fork(2) and global initialization.
- fix a deadlock involving fork(2) and threads exiting.
- implement
__builtin_arm_yield(). - make
zgc_requestand similar APIs fork(2)-safe. - fix a GC roots issue with always-live stack slots.
- remove benign assertion in clang that was firing for real code.
- allow NULL
fs_timein mount(2). - support
PR_GET_PDEATHSIG. - make
setjmpwork even with-fno-builtin. - support common linkage (by lowering it to weak linkage).
- fix an issue with structs containing unions containing pointers being used as arguments or return values.
- make the Fil-C runtime preserve floating point flags and support more
fenvfunctions. - fix bugs in PI mutex support.
- support
pthread_spin_init. - mlock(2) on memory that isn't mmapped now returns ENOMEM instead of panicking.
- initial support of C++ coroutines and limited
musttailcalls (NOTE: this feature may cause stack overflows, caught as Fil-C panics, in cases where there would be no overflow in normal C++). - no longer recognize
zunsafe_calland friends unless-yolo-assembleris in use.
This release also includes fixes in sarcasm (SAfe Runtime Capability-enforcing Assembler), including issues with using instructions that require large alignment to access stack slots. Sarcasm error messages now include line numbers.
The /opt/fil distribution includes the following updates:
- less 710
- xxhash 0.8.4
- gzip 1.15
- rsync 3.5.1
- libuv 1.53.0
- Linux-PAM 1.7.3
- pcre2 10.49
- OpenSSL 3.6.5
Thank you @mbrock for many contributions to this release!
Guide to the available files:
filc-0.686-linux-x86_64.tar.xzandfilc-0.686-linux-aarch64.tar.xzare the traditional, self-contained "pizfix" distributions for X86_64 and ARM64, respectively. These only include the compiler, doesn't require root, and are based on the musl libc. These distributions are recommended for quickly trying out Fil-C.optfil-0.686-linux-x86_64.tar.xzandoptfil-0.686-linux-aarch64.tar.xzare the /opt/fil distributions. The X86_64 one is very well tested across many distributions, while the ARM64 one is new and still experimental. This distribution includes many useful programs like OpenSSH, sudo, tmux, and git. It's based on glibc 2.44, and requires root permissions. This is recommended for giving Fil-C deeper scrutiny.