diff options
-rw-r--r-- | lld/lib/ReaderWriter/ELF/DefaultLayout.h | 7 | ||||
-rw-r--r-- | lld/lib/ReaderWriter/ELF/HeaderChunks.h | 2 |
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> |