We have rebased a large part of the glibc dynamic loader and the x86 CPU detection infrastructure to the current upstream version. These changes are going to land in CentOS Stream soon.
These glibc changes mean that going forward, run-time selection of optimized shared object implementations is possible for all x86 processors (e.g., generic AVX2-optimized code that gets loaded on EPYC and Xeon Scalable processors). This is primarily being done to allow user application code to leverage this functionality. At this time, we are not adjusting or optimizing CentOS Stream packages themselves.
Convenient developer support depends on GCC Toolset 11 and LLVM Toolset 12, which are yet to be released (even in their upstream versions). I’m working on some form of documentation on how to produce builds that are compatible with this feature for earlier toolchain versions.
Other changes in the new glibc version include:
* Backwards-compatible ld.so cache format changes to support glibc-hwcaps
* --argv0 support in ld.so
* DT_AUDIT support: The --audit option in binutils ld finally works as expected.
* Enhanced --help output in ld.so: “/lib64/ld-linux-x86-64.so.2 --help” shows library search path information.
* TLS allocation improvements: dlopen is able to load shared objects that use initial-exec TLS in more cases. There is a new glibc.rtld.optional_static_tls tunable to support exceptionally large initial-exec TLS usage after dlopen.
* The CPU tunable namespace has been renamed from “glibc.tune” to “glibc.cpu”.
If you have any questions, please feel free to ask on-list.
Thanks, Florian