FEX‑2603 Release: Steam Crash Fixes, Big.LITTLE Hiding, and a Leaner Memory Footprint
The latest FEX iteration finally delivers on the promises made last month. Users now get a stable build that no longer flounders with Steam’s steamwebhelper process, a clean CPUID string that bypasses anti‑tamper checks, and a noticeably smaller memory footprint thanks to a new allocator.
Steamwebhelper Crash – Known Bug
A recent Steam update altered the CEF library so that the steamwebhelper daemon throws an exception when FEX logs are active. The result is a constant flicker: Steam crashes, restarts, crashes again. This isn’t a regression in FEX itself; it’s a side effect of Steam’s new FD handling. While the fix remains incomplete, disabling logging dramatically reduces the frequency of these spurious restarts.
Hiding the Big.LITTLE Layout by Default
Several anti‑tamper games misinterpret the hybrid CPU layout exposed through CPUID. By masking the distinct core types and replicating the name of the first logical processor across all threads, FEX sidesteps dozens of compatibility issues that previously required manual workarounds. The change is trivial in code but yields a big win for gamers who hit “Game not recognized” on launch.
Zeroing Optimized with dc zva
CPU cores that support the dc zva instruction can clear cache lines faster than a series of stp ops. Switching vzeroupper and vzeroall to use this zero‑store technique lifted Death Stranding’s FPS from 55 to 70 on AmpereOne hardware during internal benchmarks. The tweak is invisible to users but noticeably smoother in games that rely heavily on AVX.
Builds on Clang/LLVM 22 and Mingw
Minor API changes in the latest LLVM release broke FEX’s build pipeline. After patching the clang bindings and updating libc++, the project compiles cleanly with both the new LLVM 22 toolchain and the newest mingw port. Package managers can now build Wine DLLs without resorting to older compilers, keeping dependencies fresh.
Switch to RPMalloc for Lower RAM Footprint
The JEMalloc replacement was chosen because it tracks less internal state. In a real‑world test of FEX running a 3D sandbox, memory usage fell from roughly 1.2 GB to under 800 MB after the change. The allocator is also smaller and easier to read, which makes debugging allocation bugs a breeze.
JIT Tweaks
A handful of improvements were made to the Just‑In‑Time compiler: VEX compare operations now handle all edge cases correctly, x87 conversion paths are streamlined, undocumented instruction aliases are fixed, an uncommon ARPL opcode is implemented, and the cache backing the JIT uses ankerl::unordered_dense for faster lookups. These micro‑optimizations collectively shave a few FPS from high‑load workloads.
Linux Frontend Enhancements
The new release also resolves several kernel‑level quirks: program_invocation_name is overridden so Mesa can see proper application profiles, execveat bugs with MFD_CLOEXEC are patched, seccomp and personality flags now inherit correctly, DRM LRU file descriptor caches are per‑thread, and the minimum altstack size requirement has been adjusted to match current standards. Together these changes make FEX more reliable under diverse Linux distributions.
The patch set is large but each change serves a clear purpose—whether it’s keeping Steam stable, avoiding anti‑tamper headaches, or shaving memory. The next step will be to monitor user feedback and continue refining the experience.
Release FEX Release FEX-2603
Read the blog post at FEX-Emu's Site! Welcome back, take off your shoes and relax, it's been a while since our last release.
