llvm-project/lld/ELF
Fangrui Song 72d070b4db [ELF] Support copy relocation on non-default version symbols
Copy relocation on a non-default version symbol is unsupported and can crash at
runtime. Fortunately there is a one-line fix which works for most cases:
ensure `getSymbolsAt` unconditionally returns `ss`.

If two non-default version symbols are defined at the same place and both
are copy relocated, our implementation will copy relocated them into different
addresses. The pointer inequality is very unlikely an issue. In GNU ld, copy
relocating version aliases seems to create more pointer inequality problems than
us.

(
In glibc, sys_errlist@GLIBC_2.2.5 sys_errlist@GLIBC_2.3 sys_errlist@GLIBC_2.4
are defined at the same place, but it is unlikely they are all copy relocated in
one executable. Even if so, the variables are read-only and pointer inequality
should not be a problem.
)

Reviewed By: peter.smith

Differential Revision: https://reviews.llvm.org/D107535
2021-08-05 10:32:14 -07:00
..
Arch [lld][AMDGPU] Handle R_AMDGPU_REL16 relocation. 2021-07-13 20:41:11 +01:00
AArch64ErrataFix.cpp [ELF] Move the outSecOff addend from relocAlloc/relocNonAlloc/... to InputSectionBase::relocate 2020-08-11 08:06:38 -07:00
AArch64ErrataFix.h [LLD][ELF] Optimize linker script filename glob pattern matching NFC 2020-09-16 10:26:11 +01:00
ARMErrataFix.cpp [LLD][ELF][ARM] Fix case of patched unrelocated BLX 2021-06-30 14:07:35 +01:00
ARMErrataFix.h [LLD][ELF] Optimize linker script filename glob pattern matching NFC 2020-09-16 10:26:11 +01:00
CMakeLists.txt [CMake] Make `intrinsics_gen` dependency unconditional. 2020-07-17 16:43:17 -07:00
CallGraphSort.cpp [COFF] Port CallGraphSort to COFF from ELF 2020-07-30 15:21:44 -07:00
CallGraphSort.h
Config.h [ELF] Apply version script patterns to non-default version symbols 2021-08-04 23:52:56 -07:00
DWARF.cpp [lib/Object] - Generalize the RelocationResolver API. 2020-11-20 10:32:49 +03:00
DWARF.h [ELF] --gdb-index: skip SHF_GROUP .debug_info 2020-08-13 09:11:01 -07:00
Driver.cpp [ELF] Apply version script patterns to non-default version symbols 2021-08-04 23:52:56 -07:00
Driver.h [LLD] Rename lld port driver entry function to a consistent name 2020-12-18 12:18:37 +05:30
DriverUtils.cpp [OptTable] Rename PrintHelp to printHelp 2021-06-24 14:47:03 -07:00
EhFrame.cpp ELF: Teach the linker about the 'B' augmentation string character. 2021-01-05 19:51:11 -08:00
EhFrame.h [ELF] --icf: don't fold text sections with LSDA 2020-08-05 09:16:28 -07:00
ICF.cpp [LLD][ELF] Improve ICF for relocations to ineligible sections via "aliases" 2020-10-15 12:43:14 +01:00
ICF.h
InputFiles.cpp [LTO] Add SelectionKind to IRSymtab and use it in ld.lld/LLVMgold 2021-07-20 13:22:00 -07:00
InputFiles.h [LLD] Adding support for RELA for CG Profile. 2021-07-13 13:56:30 -07:00
InputSection.cpp [ELF] Simplify getAArch64UndefinedRelativeWeakVA. NFC 2021-06-10 13:30:16 -07:00
InputSection.h [ELF] Don't consider SHF_ALLOC ".debug*" sections debug sections 2020-11-12 09:59:43 -08:00
LTO.cpp [WPD][ELF] Allow whole program devirtualization for version script localized symbols 2021-03-09 22:33:47 -08:00
LTO.h
LinkerScript.cpp [ELF] Make dot in .tbss correct 2021-08-04 08:58:50 -07:00
LinkerScript.h [ELF] Make dot in .tbss correct 2021-08-04 08:58:50 -07:00
MapFile.cpp [lld][ELF] Add additional time trace categories 2020-11-10 10:28:46 +00:00
MapFile.h [ELF] Add --print-archive-stats= 2020-04-29 18:04:37 -07:00
MarkLive.cpp Revert "[ELF] --gc-sections: allow GC on reserved sections in a group" 2021-07-27 16:34:32 -07:00
MarkLive.h
Options.td [ELF] Add --export-dynamic-symbol-list 2021-08-03 09:01:03 -07:00
OutputSections.cpp [ELF] Check the Elf_Rel addends for dynamic relocations 2021-07-09 10:41:40 +01:00
OutputSections.h [ELF] Check the Elf_Rel addends for dynamic relocations 2021-07-09 10:41:40 +01:00
README.md
Relocations.cpp [ELF] Support copy relocation on non-default version symbols 2021-08-05 10:32:14 -07:00
Relocations.h [ELF] Support .rela.eh_frame with unordered r_offset values 2021-04-29 08:51:09 -07:00
ScriptLexer.cpp [ELF] Optimize ScriptLexer::getLineNumber by caching the previous line number and offset 2021-06-22 15:35:24 -07:00
ScriptLexer.h [ELF] Optimize ScriptLexer::getLineNumber by caching the previous line number and offset 2021-06-22 15:35:24 -07:00
ScriptParser.cpp [ELF] Apply version script patterns to non-default version symbols 2021-08-04 23:52:56 -07:00
ScriptParser.h [ELF] Improve --export-dynamic-symbol performance by checking whether wildcard is really used 2020-06-17 17:12:10 -07:00
SymbolTable.cpp [ELF] Apply version script patterns to non-default version symbols 2021-08-04 23:52:56 -07:00
SymbolTable.h [ELF] Apply version script patterns to non-default version symbols 2021-08-04 23:52:56 -07:00
Symbols.cpp [ELF] Apply version script patterns to non-default version symbols 2021-08-04 23:52:56 -07:00
Symbols.h [LTO] Prevent devirtualization for symbols dynamically exported 2021-01-27 15:54:13 -08:00
SyntheticSections.cpp [ELF] Add -Bsymbolic-non-weak-functions 2021-07-29 14:46:53 -07:00
SyntheticSections.h [ELF][AArch64] Write addends for TLSDESC relocations with -z rel 2021-07-09 10:41:41 +01:00
Target.cpp [ELF] Check the Elf_Rel addends for dynamic relocations 2021-07-09 10:41:40 +01:00
Target.h [lld][X86] Restore gotEntrySize. 2021-05-17 00:13:00 +01:00
Thunks.cpp [ELF] Refactor DynamicReloc to fix incorrect relocation addends 2021-07-09 10:41:40 +01:00
Thunks.h [lld] Add missing includes (NFC) 2021-06-03 18:55:18 +02:00
Writer.cpp [ELF] Align the first section of a PT_TLS even if its type is SHT_NOBITS 2021-07-29 15:14:00 +01:00
Writer.h

README.md

See docs/NewLLD.rst