diff options
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/TargetLayout.cpp')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/TargetLayout.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/ELF/TargetLayout.cpp b/lld/lib/ReaderWriter/ELF/TargetLayout.cpp index 87cbcd5cab5..c0dae207bd6 100644 --- a/lld/lib/ReaderWriter/ELF/TargetLayout.cpp +++ b/lld/lib/ReaderWriter/ELF/TargetLayout.cpp @@ -320,6 +320,7 @@ template <class ELFT> void TargetLayout<ELFT>::createOutputSections() { } else { outputSection = new (_allocator.Allocate<OutputSection<ELFT>>()) OutputSection<ELFT>(section->outputSectionName()); + checkOutputSectionSegment(outputSection); _outputSections.push_back(outputSection); outputSectionInsert.first->second = outputSection; } @@ -327,6 +328,17 @@ template <class ELFT> void TargetLayout<ELFT>::createOutputSections() { } } +// Check that output section has proper segment set +template <class ELFT> +void TargetLayout<ELFT>::checkOutputSectionSegment( + const OutputSection<ELFT> *sec) { + std::vector<const script::PHDR *> phdrs; + if (_linkerScriptSema.getPHDRsForOutputSection(sec->name(), phdrs)) { + llvm::report_fatal_error( + "Linker script has wrong segments set for output sections"); + } +} + template <class ELFT> uint64_t TargetLayout<ELFT>::getLookupSectionFlags(const OutputSection<ELFT> *os) const { |

