llvm-project/lld/ELF
Peter Smith 2539b4ae47 [LLD][ELF] Allow empty (.init|.preinit|.fini)_array to be RELRO
The default GNU linker script uses the following idiom for the array
sections. I'll use .init_array here, but this also applies to
.preinit_array and .fini_array sections.

  .init_array    :
  {
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(.init_array))
    PROVIDE_HIDDEN (__init_array_end = .);
  }

The C-library will take references to the _start and _end symbols to
process the array. This will make LLD keep the OutputSection even if there
are no .init_array sections. As the current check for RELRO uses the
section type for .init_array the above example with no .init_array
InputSections fails the checks as there are no .init_array sections to give
the OutputSection a type of SHT_INIT_ARRAY. This often leads to a
non-contiguous RELRO error message.

The simple fix is to a textual section match as well as a section type
match.

Differential Revision: https://reviews.llvm.org/D76915
2020-03-31 12:53:12 +01:00
..
Arch [LLD][ELF][Hexagon] Support GDPLT transforms 2020-03-13 11:02:11 -05:00
AArch64ErrataFix.cpp [ELF] Rename relocateOne() to relocate() and pass `Relocation` to it 2020-01-25 12:00:18 -08:00
AArch64ErrataFix.h [ELF] Fix variable names in comments after VariableName -> variableName change 2019-07-16 05:50:45 +00:00
ARMErrataFix.cpp [ELF] Rename relocateOne() to relocate() and pass `Relocation` to it 2020-01-25 12:00:18 -08:00
ARMErrataFix.h [ELF][ARM] Implement --fix-cortex-a8 to fix erratum 657417 2019-09-16 09:38:38 +00:00
CMakeLists.txt [ThinLTO] Pass CodeGenOpts like UnrollLoops/VectorizeLoop/VectorizeSLP 2020-01-09 21:13:11 -08:00
CallGraphSort.cpp Fix a few typos in lld/ELF to cycle bots 2019-10-28 21:41:47 -04:00
CallGraphSort.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Config.h [ThinLTO] Allow usage of all hardware threads in the system 2020-03-27 10:20:58 -04:00
DWARF.cpp [LLD][NFC] Remove getOffsetInFile() workaround. 2020-03-05 15:52:46 +03:00
DWARF.h gdb-index: Wire up str_offsets section to avoid incorrect error message about offsets_base 2019-08-07 22:49:14 +00:00
Driver.cpp [ThinLTO] Allow usage of all hardware threads in the system 2020-03-27 10:20:58 -04:00
Driver.h [Coding style change] Rename variables so that they start with a lowercase letter 2019-07-10 05:00:37 +00:00
DriverUtils.cpp Remove unused Endian.h includes, NFC 2020-03-11 15:45:34 -07:00
EhFrame.cpp [ELF] Wrap things in `namespace lld { namespace elf {`, NFC 2019-10-07 08:31:18 +00:00
EhFrame.h [Coding style change] Rename variables so that they start with a lowercase letter 2019-07-10 05:00:37 +00:00
ICF.cpp [LLD][ELF] Add time-trace to ELF LLD 2020-02-06 12:14:13 +00:00
ICF.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
InputFiles.cpp [RISCV] ELF attribute section for RISC-V. 2020-03-31 16:16:19 +08:00
InputFiles.h LLD already has a mechanism for caching creation of DWARCContext: 2020-03-06 21:17:07 +03:00
InputSection.cpp [ELF][PPC32] Don't report "relocation refers to a discarded section" for .got2 2020-03-01 19:54:40 -08:00
InputSection.h [ELF] Fix a null pointer dereference when --emit-relocs and --strip-debug are used together 2020-02-13 08:56:38 -08:00
LTO.cpp [ThinLTO] Allow usage of all hardware threads in the system 2020-03-27 10:20:58 -04:00
LTO.h [Coding style change] Rename variables so that they start with a lowercase letter 2019-07-10 05:00:37 +00:00
LinkerScript.cpp [lld][ELF] Fix error message 2020-03-26 15:30:24 +00:00
LinkerScript.h [ELF] Simplify sh_addr computation and warn if sh_addr is not a multiple of sh_addralign 2020-03-11 09:35:42 -07:00
MapFile.cpp Make it possible to redirect not only errs() but also outs() 2019-11-18 11:18:06 +09:00
MapFile.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
MarkLive.cpp [LLD][ELF] Add time-trace to ELF LLD 2020-02-06 12:14:13 +00:00
MarkLive.h Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
Options.td [LLD] Add support for --unique option 2020-03-10 12:20:21 +00:00
OutputSections.cpp [ELF] Allow SHF_LINK_ORDER and non-SHF_LINK_ORDER to be mixed 2020-03-30 10:03:55 -07:00
OutputSections.h [ELF] Refactor uses of getInputSections to improve efficiency NFC 2020-01-21 12:27:52 +00:00
README.md
Relocations.cpp lld: Reduce number of references to undefined printed from 10 to 3. 2020-03-30 14:31:32 -04:00
Relocations.h [LLD][ELF][Hexagon] Support GDPLT transforms 2020-03-13 11:02:11 -05:00
ScriptLexer.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
ScriptLexer.h [Coding style change] Rename variables so that they start with a lowercase letter 2019-07-10 05:00:37 +00:00
ScriptParser.cpp [lld][ELF] Mark empty NOLOAD output sections SHT_NOBITS instead of SHT_PROGBITS 2020-03-28 10:07:58 -07:00
ScriptParser.h [ELF] Fix variable names in comments after VariableName -> variableName change 2019-07-16 05:50:45 +00:00
SymbolTable.cpp [lld/ELF] PR44498: Support input filename in double quote 2020-01-22 12:03:10 +00:00
SymbolTable.h [ELF] Replace SymbolTable::forEachSymbol with iterator_range symbols() 2019-11-26 09:09:32 -08:00
Symbols.cpp [ELF] Delete two unneeded `referenced = true` after D65584 2020-02-28 21:59:08 -08:00
Symbols.h [ELF] --icf: do not fold preemptible symbols 2019-12-10 09:06:08 -08:00
SyntheticSections.cpp [LLD][ELF] Put back rounding which was lost in 8404aeb56a 2020-03-29 21:52:01 -04:00
SyntheticSections.h [ELF][PPC32] Fix canonical PLTs when the order does not match the PLT order 2020-02-28 22:23:14 -08:00
Target.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
Target.h [ELF] Mention symbol name in reportRangeError() 2020-01-29 09:38:25 -08:00
Thunks.cpp [ELF][PPC32] Support range extension thunks with addends 2020-01-25 22:32:42 -08:00
Thunks.h [ELF][PPC32] Implement IPLT code sequence for non-preemptible IFUNC 2019-12-29 22:42:53 -08:00
Writer.cpp [LLD][ELF] Allow empty (.init|.preinit|.fini)_array to be RELRO 2020-03-31 12:53:12 +01:00
Writer.h Revert "Revert r370635, it caused PR43241." 2019-09-06 15:57:24 +00:00

README.md

See docs/NewLLD.rst