Glibc 2.36 Dropping DT_HASH Has Been Breaking Easy Anti Cheat Games With Steam Play
Glibc 2.36 brought many changes with its release at the beginning of August. Unfortunately, its dropping of unconditionally setting "--hash-style=both" to ensure both DT_HASH and GNU_DT_HASH sections are present in the GNU C Library shared object ended up breaking Easy Anti Cheat and other select software. Once Arch Linux users and others began moving to Glibc 2.36, problems were quickly noticed by Linux gamers with Steam Play and the titles so far using this anti-cheat protection from Epic Games.
DT_GNU_HASH is better structured than DT_HASH although DT_HASH for ELF object hash tables for run-time symbol resolution. DT_GNU_HASH has been around for a decade and a half and can lead to much faster linking and loading times. Most Linux distributions and open-source software have been happily using DT_GNU_HASH for years.
A Proton issue since earlier this month has been tracking how Glibc 2.36 breaks EAC-required games on Linux.
With Glibc 2.36, DT_HASH no longer gets set since they dropped "--hash-style=both" since the DT_GNU_HASH is superior, most systems should just be using that, and eliminating the DT_HASH section saves about 1% or 16kB of space for the Glibc shared object. But it turns out that Epic Games still relies on DT_HASH and this anti-cheat module will fail to load protected games with Glibc 2.36.
This isn't exclusively an EAC problem but some other software such as libstrangle also now break on Glibc 2.36 due to this change. There is an upstream Glibc bug report over the issue but no firm action yet with upstream developers being hesitant on reverting the change.
The issue over the past week and a half has been discussed thoroughly within Valve's Proton issue tracker. For those on Arch Linux where the problem was first reported due to its rolling release updates, glibc 2.36-2 is currently in testing that with that distribution package reverts the earlier hash-style change in GNU Glibc so both styles are now built. Linux gamers have already tested that forthcoming Arch Linux package update and confirmed that EAC-enabled games are working correctly.
Now we'll see what happens with upstream GNU C Library developers around this or if they'll wait it out and punt the ball into Epic Games' court to switch from depending upon DT_HASH to the DT_GNU_HASH that has been widely used on Linux systems for over a decade.