diff options
| author | Fangrui Song <maskray@google.com> | 2020-02-10 15:58:29 -0800 |
|---|---|---|
| committer | Fangrui Song <maskray@google.com> | 2020-02-12 08:21:52 -0800 |
| commit | 7c426fb1a6d4b7db2517529ec5d863b380479249 (patch) | |
| tree | a2429abe1e6aa04bceaf56cc0d60dc29efc871b1 /lld/ELF/Driver.cpp | |
| parent | b498d99338f868bcab3384b4e58f8a4d764fa48b (diff) | |
| download | llvm-7c426fb1a6d4b7db2517529ec5d863b380479249.zip llvm-7c426fb1a6d4b7db2517529ec5d863b380479249.tar.gz llvm-7c426fb1a6d4b7db2517529ec5d863b380479249.tar.bz2 | |
[ELF] Support INSERT [AFTER|BEFORE] for orphan sections
D43468+D44380 added INSERT [AFTER|BEFORE] for non-orphan sections. This patch
makes INSERT work for orphan sections as well.
`SECTIONS {...} INSERT [AFTER|BEFORE] .foo` does not set `hasSectionCommands`, so the result
will be similar to a regular link without a linker script. The differences when `hasSectionCommands` is set include:
* image base is different
* -z noseparate-code/-z noseparate-loadable-segments are unavailable
* some special symbols such as `_end _etext _edata` are not defined
The behavior is similar to GNU ld:
INSERT is not considered an external linker script.
This feature makes the section layout more flexible. It can be used to:
* Place .nv_fatbin before other readonly SHT_PROGBITS sections to mitigate relocation overflows.
* Disturb the layout to expose address sensitive application bugs.
Reviewed By: grimar
Differential Revision: https://reviews.llvm.org/D74375
Diffstat (limited to 'lld/ELF/Driver.cpp')
| -rw-r--r-- | lld/ELF/Driver.cpp | 4 |
1 files changed, 0 insertions, 4 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 60f3e88..b31da37 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -1865,10 +1865,6 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &args) { if (errorCount()) return; - // Now when we read all script files, we want to finalize order of linker - // script commands, which can be not yet final because of INSERT commands. - script->processInsertCommands(); - // We want to declare linker script's symbols early, // so that we can version them. // They also might be exported if referenced by DSOs. |
