llvm_error_code PystonMemoryManager::applyMemoryGroupPermissions(MemoryGroup& MemGroup, unsigned Permissions) { for (sys::MemoryBlock& MB : MemGroup.PendingMem) { llvm_error_code ec; ec = sys::Memory::protectMappedMemory(MB, Permissions); if (ec) { return ec; } } MemGroup.PendingMem.clear(); // Now go through free blocks and trim any of them that don't span the entire // page because one of the pending blocks may have overlapped it. for (FreeMemBlock& FreeMB : MemGroup.FreeMem) { FreeMB.Free = trimBlockToPageSize(FreeMB.Free); // We cleared the PendingMem list, so all these pointers are now invalid FreeMB.PendingPrefixIndex = (unsigned)-1; } // Remove all blocks which are now empty MemGroup.FreeMem.erase(remove_if(MemGroup.FreeMem, [](FreeMemBlock& FreeMB) { return FreeMB.Free.size() == 0; }), MemGroup.FreeMem.end()); #if LLVMREV < 209952 return llvm_error_code::success(); #else return llvm_error_code(); #endif }
llvm_error_code PystonMemoryManager::applyMemoryGroupPermissions(MemoryGroup& MemGroup, unsigned Permissions) { for (int i = 0, e = MemGroup.AllocatedMem.size(); i != e; ++i) { llvm_error_code ec; ec = sys::Memory::protectMappedMemory(MemGroup.AllocatedMem[i], Permissions); if (ec) { return ec; } } #if LLVMREV < 209952 return llvm_error_code::success(); #else return llvm_error_code(); #endif }