diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-09-02 21:17:18 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-12-08 17:34:50 +0000 |
commit | 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e (patch) | |
tree | 62f873df87c7c675557a179e0c4c83fe9f3087bc /contrib/llvm-project/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp | |
parent | cf037972ea8863e2bab7461d77345367d2c1e054 (diff) | |
parent | 7fa27ce4a07f19b07799a767fc29416f3b625afb (diff) |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/contrib/llvm-project/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp b/contrib/llvm-project/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp index b23e33039c35..436888730bfb 100644 --- a/contrib/llvm-project/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp +++ b/contrib/llvm-project/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp @@ -101,7 +101,7 @@ uint8_t *SectionMemoryManager::allocateSection( // FIXME: Initialize the Near member for each memory group to avoid // interleaving. std::error_code ec; - sys::MemoryBlock MB = MMapper.allocateMappedMemory( + sys::MemoryBlock MB = MMapper->allocateMappedMemory( Purpose, RequiredSize, &MemGroup.Near, sys::Memory::MF_READ | sys::Memory::MF_WRITE, ec); if (ec) { @@ -204,7 +204,7 @@ std::error_code SectionMemoryManager::applyMemoryGroupPermissions(MemoryGroup &MemGroup, unsigned Permissions) { for (sys::MemoryBlock &MB : MemGroup.PendingMem) - if (std::error_code EC = MMapper.protectMappedMemory(MB, Permissions)) + if (std::error_code EC = MMapper->protectMappedMemory(MB, Permissions)) return EC; MemGroup.PendingMem.clear(); @@ -234,7 +234,7 @@ void SectionMemoryManager::invalidateInstructionCache() { SectionMemoryManager::~SectionMemoryManager() { for (MemoryGroup *Group : {&CodeMem, &RWDataMem, &RODataMem}) { for (sys::MemoryBlock &Block : Group->AllocatedMem) - MMapper.releaseMappedMemory(Block); + MMapper->releaseMappedMemory(Block); } } @@ -263,11 +263,14 @@ public: return sys::Memory::releaseMappedMemory(M); } }; - -DefaultMMapper DefaultMMapperInstance; } // namespace -SectionMemoryManager::SectionMemoryManager(MemoryMapper *MM) - : MMapper(MM ? *MM : DefaultMMapperInstance) {} +SectionMemoryManager::SectionMemoryManager(MemoryMapper *UnownedMM) + : MMapper(UnownedMM), OwnedMMapper(nullptr) { + if (!MMapper) { + OwnedMMapper = std::make_unique<DefaultMMapper>(); + MMapper = OwnedMMapper.get(); + } +} } // namespace llvm |