[PATCH v2] x86: Cache the symbol table when packing relative relocations

H.J. Lu hjl.tools@gmail.com
Sun Jan 11 00:27:09 GMT 2026


On Sat, Jan 10, 2026 at 10:27 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Sat, Jan 10, 2026 at 7:53 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > When packing relative relocations, x86 linker may load the same symbol
> > table repeatedly, which can take a long time.  On Intel Core i7-1195G7
> > with 32GB RAM, it takes more than 45 minutes to create an output with
> > -pie -z pack-relative-relocs from an input with 208025 code sections.
> > Cache the symbol table to reduce the link time to less than 2 seconds.
> >
> > On the same machine, creating 3.1GB clang executable in LLVM 21.1.3 debug
> > build:
> >
> > user            55.39 seconds
> > system          6.71 seconds
> > total           65.80 seconds
> > maximum set(GB) 10.43
> > page faults     2406941
> >
> > PR ld/33765
> > * elfxx-x86.c (elf_x86_relative_reloc_record_add): Remove
> > keep_symbuf_p.
> > (_bfd_x86_elf_link_relax_section): Updated.  Cache the symbol
> > table to avoid loading it again.
> >
> > --
> > H.J.
>
> Here is the v2 patch to cache the symbol table before the loop.
>
> --
> H.J.

I am checking it in.

-- 
H.J.


More information about the Binutils mailing list