Arch Linux

Please read this before reporting a bug:

Do NOT report bugs when a package is just outdated, or it is in the AUR. Use the 'flag out of date' link on the package page, or the Mailing List.

REPEAT: Do NOT report bugs for outdated packages!

FS#72433 - [toolchain] Adopt SHT_RELR/DT_RELR to decrease PIE and shared object size

Attached to Project: Arch Linux
Opened by Ray Song (MaskRay) - Friday, 15 October 2021, 22:04 GMT
Last edited by Andreas Radke (AndyRTR) - Saturday, 16 October 2021, 05:36 GMT
Task Type Feature Request
Category Packages: Core
Status Assigned
Assigned To Giancarlo Razzolini (grazzolini)
freswa (frederik)
Architecture All
Severity Low
Priority Normal
Reported Version
Due in Version Undecided
Due Date Undecided
Percent Complete 0%
Votes 1
Private No


The SHT_RELR/DT_RELR format encodes relative relocations in a very efficient way (quite usually takes just 3% or smaller space).
The size optimization can greatly decrease the virtual memory size of PIE and shared objects with many R_*_RELATIVE relocations.

E.g. clang's virtual memory size is 8.2% smaller. The size varies across projects, but I anticipate at least 5% decrease for most projects.

% ~/projects/bloaty/Release/bloaty clang.pie.relr -- clang.pie
-------------- --------------
[NEW] +163Ki [NEW] +163Ki .relr.dyn
+4.9% +32 +5.4% +32 .dynamic
+2.5% +8 [ = ] 0 .shstrtab
-99.5% -13.8Mi -99.5% -13.8Mi .rela.dyn
-8.3% -13.6Mi -8.2% -13.6Mi TOTAL

The SHT_RELR/DT_RELR relocation format requires linker and loader support.

* On the linkder side, ld.lld has supported .relr.dyn/SHT_RELR/DT_RELR (`--pack-dyn-relocs=relr`) for a long time and the support has been stable since 2019-09 (after I fixed an address oscillating bug).
* On the loader (glibc side, a patch exists
but lack of GNU ld support may impede its adoption among Linux distributions.
User support is also important to push the patch forward. (ia64 according to folks isn't an issue. glibc doesn't implement ELFCLASS32 for ia64 AFAICT.)

(Worth noting that the Linux kernel's arm64 port supports this format since 2019.)

So I file this ticket seeking for support (comment on I hope that with sufficient attention from users,
someone (e.g. a GNU ld maintainer) will eventually stand up and implement `--pack-dyn-relocs=relr` for GNU ld (

See also Gentoo: Fedora:
This task depends upon