Upstream Contributions
This page lists the upstream contributions, for some distro who want to use these features but use a stable version of the software, you can cherry-pick these commits to your own stable branch.
Bug fixes
GLIBC
-
✅(Since 2.41)Fix IFUNC resolver cannot access gp pointer
This is important for non-PIE binaries when IFUNC based function multi-version dispatching is used, such as in GCC with
target_clonesortarget_version. Without this fix, FMV dispatching will crash when the function is called.
New features
GCC
-
❓Add -ftarget-clones-table option support
This patch adds support for the
-ftarget-clones-tableoption in GCC, allowing specifying a table of target clones in a JSON file for every target. Thus we don't need to usetarget_clonesattribute in the source code, which makes the source code cleaner and easier to maintain. -
❓Redirect to specific target based on TARGET_VERSION_COMPATIBLE
To prevent the overhead from indirect function call which loads the pointer from GOT, this patch allows GCC to generate a direct call to the target version function if the target version is compatible with the current multi-versioning function. This is useful for performance-critical code that uses function multi-versioning and works well with LTO optimizations.
-
✅(Since 15.0)RISC-V: Add Function Multi-Versioning support
This allows GCC to use
target_clonesandtarget_versionto generate function multi-version dispatching code.
LLVM
-
✅(Since 20.1)[RISCV][FMV] Support target_version (#99040)
This allows LLVM to use
target_versionto generate function multi-version dispatching code.