llvm-project/lld/ELF
Rui Ueyama c9c34bdc1a Do not use a hash table to uniquify mergeable strings.
Previously, we have a hash table containing strings and their offsets
to manage mergeable strings. Technically we can live without that, because
we can do binary search on a vector of mergeable strings to find a mergeable
strings.

We did have both the hash table and the binary search because we thought
that that is faster.

We recently observed that lld tend to consume more memory than gold when
building an output with debug info. A few percent of memory is consumed by
the hash table. So, we needed to reevaluate whether or not having the extra
hash table is a good CPU/memory tradeoff. I run a few benchmarks with and
without the hash table.

I got a mixed result for the benchmark. We observed a regression for some
programs by removing the hash table (that's what we expected), but we also
observed that performance imrpovements for some programs. This is perhaps
due to reduced memory usage.

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

llvm-svn: 348401
2018-12-05 19:13:31 +00:00
..
Arch Remove unreachable code. 2018-12-04 19:00:56 +00:00
AArch64ErrataFix.cpp [AArch64] Cortex-a53-843419 erratum should not apply to relaxed TLS. 2018-11-27 10:17:35 +00:00
AArch64ErrataFix.h Consistent (non) use of empty lines in include blocks 2018-02-20 21:53:18 +00:00
Bits.h Move bit operations to a new file, ELF/Bits.h. 2017-10-26 21:37:17 +00:00
CMakeLists.txt Rename GdbIndex.{cpp,h} -> DWARF.{cpp,h}. 2018-09-14 23:51:05 +00:00
CallGraphSort.cpp Simplify. NFC. 2018-10-12 22:44:06 +00:00
CallGraphSort.h [ELF] Add profile guided section layout 2018-04-17 23:30:05 +00:00
Config.h [ELF] - Implement -z nodefaultlib 2018-11-27 09:48:17 +00:00
DWARF.cpp [LLD][ELF] - Improve the DWARF v5 suport for building .gdb_index. 2018-12-03 10:48:57 +00:00
DWARF.h [LLD][ELF] - Improve the DWARF v5 suport for building .gdb_index. 2018-12-03 10:48:57 +00:00
Driver.cpp [ELF] - Implement -z nodefaultlib 2018-11-27 09:48:17 +00:00
Driver.h Add TARGET(foo) linker script directive. 2018-08-06 21:29:41 +00:00
DriverUtils.cpp Eliminate dependency to formatv(). NFC. 2018-10-10 20:29:29 +00:00
EhFrame.cpp Avoid unnecessary buffer allocation and memcpy for compressed sections. 2018-10-08 16:58:59 +00:00
EhFrame.h De-template EhReader. NFC. 2017-10-27 03:14:09 +00:00
Filesystem.cpp s/LLVM_ON_WIN32/_WIN32/, lld 2018-04-10 13:15:21 +00:00
Filesystem.h Add a missing #include. 2017-11-17 08:17:21 +00:00
ICF.cpp Make a member function non-member. NFC. 2018-11-27 17:47:24 +00:00
ICF.h Consistent use of header file for ICF and MarkLive 2018-02-20 22:09:59 +00:00
InputFiles.cpp [ELF] - Do not crash when -r output uses linker script with `/DISCARD/` 2018-11-01 09:20:06 +00:00
InputFiles.h [ELF] Read the call graph profile from object files. 2018-10-02 00:17:15 +00:00
InputSection.cpp Do not use a hash table to uniquify mergeable strings. 2018-12-05 19:13:31 +00:00
InputSection.h Do not use a hash table to uniquify mergeable strings. 2018-12-05 19:13:31 +00:00
LTO.cpp Set MAttrs in LTO mode 2018-11-01 20:02:49 +00:00
LTO.h Simplify. 2018-09-11 14:37:27 +00:00
LinkerScript.cpp [ELF] Allow discarding of .rela.plt 2018-12-04 12:37:56 +00:00
LinkerScript.h Move forward declarations to the top of the file and sort. 2018-10-23 22:37:14 +00:00
MapFile.cpp Reset input section pointers to null on each linker invocation. 2018-09-25 19:26:58 +00:00
MapFile.h Implement --cref. 2018-03-14 20:29:45 +00:00
MarkLive.cpp Avoid unnecessary buffer allocation and memcpy for compressed sections. 2018-10-08 16:58:59 +00:00
MarkLive.h Consistent use of header file for ICF and MarkLive 2018-02-20 22:09:59 +00:00
Options.td [ELF] Add --{,no-}call-graph-profile-sort (enabled by default) 2018-10-25 23:15:23 +00:00
OutputSections.cpp ELF: allow non allocated sections to go into allocated sections 2018-12-04 18:47:44 +00:00
OutputSections.h [ELF] Make TrapInstr and Filler byte arrays. NFC. 2018-11-14 21:05:20 +00:00
README.md Update the documents of the new LLD. 2016-03-12 06:06:40 +00:00
Relocations.cpp Simplify Symbol::getPltVA. 2018-11-28 17:42:59 +00:00
Relocations.h [ELF] - Fix R_AARCH64_ADR_GOT_PAGE, R_AARCH64_LD64_GOT_LO12 handling against IFUNC symbols. 2018-11-27 10:30:46 +00:00
ScriptLexer.cpp [LLD][ELD] - Do not reject INFO output section type when used with a start address. 2018-08-28 08:39:21 +00:00
ScriptLexer.h [LLD][ELD] - Do not reject INFO output section type when used with a start address. 2018-08-28 08:39:21 +00:00
ScriptParser.cpp Fix a typo. 2018-11-28 13:20:39 +00:00
ScriptParser.h [ELF] Support expressions with -defsym option 2017-11-04 02:03:58 +00:00
SymbolTable.cpp [ELF] - Make SymbolTable::addDefined return Defined. 2018-11-22 11:40:08 +00:00
SymbolTable.h [ELF] - Make SymbolTable::addDefined return Defined. 2018-11-22 11:40:08 +00:00
Symbols.cpp Simplify Symbol::getPltVA. 2018-11-28 17:42:59 +00:00
Symbols.h Simplify Symbol::getPltVA. 2018-11-28 17:42:59 +00:00
SyntheticSections.cpp [ELF] --gdb-index: use lower_bound to compute relative CU index in the object file 2018-11-29 00:17:00 +00:00
SyntheticSections.h Simplify Symbol::getPltVA. 2018-11-28 17:42:59 +00:00
Target.cpp Use llvm_unreachable for unreachable code. 2018-11-01 20:08:29 +00:00
Target.h Simplify Symbol::getPltVA. 2018-11-28 17:42:59 +00:00
Thunks.cpp [PPC64] Long branch thunks. 2018-11-14 17:56:43 +00:00
Thunks.h ELF: Allow thunks to change size. NFCI. 2018-03-29 22:32:13 +00:00
Writer.cpp Show a proper error message if output file is too large. 2018-12-03 17:42:57 +00:00
Writer.h ELF: Do not ICF two sections with different output sections. 2018-05-23 01:58:43 +00:00

README.md

See docs/NewLLD.rst