summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/TargetLayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/TargetLayout.cpp')
-rw-r--r--lld/lib/ReaderWriter/ELF/TargetLayout.cpp12
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 {
OpenPOWER on IntegriCloud