summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/lib/ReaderWriter/ELF/DefaultLayout.h7
-rw-r--r--lld/lib/ReaderWriter/ELF/HeaderChunks.h2
2 files changed, 6 insertions, 3 deletions
diff --git a/lld/lib/ReaderWriter/ELF/DefaultLayout.h b/lld/lib/ReaderWriter/ELF/DefaultLayout.h
index 93c23f3fbd8..0719b41b964 100644
--- a/lld/lib/ReaderWriter/ELF/DefaultLayout.h
+++ b/lld/lib/ReaderWriter/ELF/DefaultLayout.h
@@ -566,7 +566,10 @@ template <class ELFT> void DefaultLayout<ELFT>::assignSectionsToSegments() {
section->setSegmentType(segmentType);
StringRef segmentName = section->segmentKindToStr();
- int64_t sectionFlag = msi->flags();
+ int64_t lookupSectionFlag = msi->flags();
+ if (!(lookupSectionFlag & llvm::ELF::SHF_WRITE))
+ lookupSectionFlag &= ~llvm::ELF::SHF_EXECINSTR;
+ lookupSectionFlag &= ~(llvm::ELF::SHF_STRINGS | llvm::ELF::SHF_MERGE);
Segment<ELFT> *segment;
// We need a seperate segment for sections that dont have
@@ -589,7 +592,7 @@ template <class ELFT> void DefaultLayout<ELFT>::assignSectionsToSegments() {
}
// Use the flags of the merged Section for the segment
- const SegmentKey key("PT_LOAD", sectionFlag);
+ const SegmentKey key("PT_LOAD", lookupSectionFlag);
const std::pair<SegmentKey, Segment<ELFT> *> currentSegment(key,
nullptr);
std::pair<typename SegmentMapT::iterator, bool> segmentInsert(
diff --git a/lld/lib/ReaderWriter/ELF/HeaderChunks.h b/lld/lib/ReaderWriter/ELF/HeaderChunks.h
index 561d3f1bf59..4c81b12d681 100644
--- a/lld/lib/ReaderWriter/ELF/HeaderChunks.h
+++ b/lld/lib/ReaderWriter/ELF/HeaderChunks.h
@@ -72,7 +72,7 @@ Header<ELFT>::Header(const ELFTargetInfo &ti)
e_ident(llvm::ELF::EI_MAG2, 'L');
e_ident(llvm::ELF::EI_MAG3, 'F');
e_ehsize(sizeof(Elf_Ehdr));
- e_flags(2);
+ e_flags(0);
}
template <class ELFT>
OpenPOWER on IntegriCloud