[COFF] Optimize range extension thunk insertion memory usage
authorReid Kleckner <rnk@google.com>
Thu, 28 Mar 2019 18:30:03 +0000 (18:30 +0000)
committerReid Kleckner <rnk@google.com>
Thu, 28 Mar 2019 18:30:03 +0000 (18:30 +0000)
commit1600490af16e6be1f48fb3e52f3c9498cf87b15f
treec646b4a9b9ede970d856df87080b88676663474d
parentbd95a9f46d4f33de9e0eac273d21b11df9af4bf4
[COFF] Optimize range extension thunk insertion memory usage

Summary:
This avoids allocating O(#relocs) of intermediate data for each section
when range extension thunks aren't needed for that section. This also
removes a std::vector from SectionChunk, which further reduces its size.

Instead, this change adds the range extension thunk symbols to the
object files that contain sections that need extension thunks. By adding
them to the symbol table of the parent object, that means they now have
a symbol table index. Then we can then modify the original relocation,
after copying it to read-write memory, to use the new symbol table
index.

This makes linking browser_tests.exe with no PDB 10.46% faster, moving
it from 11.364s to 10.288s averaged over five runs.

Reviewers: mstorsjo, ruiu

Subscribers: aganea, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D59902

llvm-svn: 357200
lld/COFF/Chunks.cpp
lld/COFF/Chunks.h
lld/COFF/InputFiles.h
lld/COFF/PDB.cpp
lld/COFF/Writer.cpp