Skip to content

lld: pack Relocation from 32 to 24 bytes#38

Open
julesjacobs wants to merge 1 commit into
ocaml-flambda:19.1.7from
julesjacobs:jj/lld-reloc-24b
Open

lld: pack Relocation from 32 to 24 bytes#38
julesjacobs wants to merge 1 commit into
ocaml-flambda:19.1.7from
julesjacobs:jj/lld-reloc-24b

Conversation

@julesjacobs

@julesjacobs julesjacobs commented Jul 15, 2026

Copy link
Copy Markdown

Shrinks struct lld::elf::Relocation from 32 to 24 bytes with no new input limits. expr and type are bit-packed into one 32-bit word (8 + 24 bits), and the Symbol * field becomes a 32-bit index (SymRef) into a single contiguous arena that now backs every SymbolUnion allocation; offset and addend keep their full 64-bit width. ELF's r_info already stores symbol references as 32-bit indices, so this caps nothing the format doesn't already cap.

The relocation vector is among the largest live allocations during a link, so an 8-byte-per-record shrink shows up directly in peak memory: 13-15% lower peak RSS on relocation-dense executables, less in percentage terms on multi-GB outputs whose image dominates the peak. Byte-identical output, no wall-time regression.

Upstream lld still uses the 32-byte layout as of 21.1.8, so this is also a candidate to propose upstream (64-bit hosts benefit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant