diff options
Diffstat (limited to 'src/3rdparty/masm/assembler/LinkBuffer.h')
-rw-r--r-- | src/3rdparty/masm/assembler/LinkBuffer.h | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/3rdparty/masm/assembler/LinkBuffer.h b/src/3rdparty/masm/assembler/LinkBuffer.h index fa669deaf9..f1a6639b73 100644 --- a/src/3rdparty/masm/assembler/LinkBuffer.h +++ b/src/3rdparty/masm/assembler/LinkBuffer.h @@ -228,7 +228,7 @@ public: return m_size; } - inline void makeExecutable(); + inline bool makeExecutable(); private: template <typename T> T applyOffset(T src) @@ -353,10 +353,10 @@ void LinkBufferBase<MacroAssembler, ExecutableOffsetCalculator>::performFinaliza } template <typename MacroAssembler, template <typename T> class ExecutableOffsetCalculator> -inline void LinkBufferBase<MacroAssembler, ExecutableOffsetCalculator>::makeExecutable() +inline bool LinkBufferBase<MacroAssembler, ExecutableOffsetCalculator>::makeExecutable() { - ExecutableAllocator::makeExecutable(m_executableMemory->memoryStart(), - m_executableMemory->memorySize()); + return ExecutableAllocator::makeExecutable(m_executableMemory->memoryStart(), + m_executableMemory->memorySize()); } template <typename MacroAssembler> @@ -392,7 +392,7 @@ public: } virtual void performFinalization() override final; - inline void makeExecutable(); + inline bool makeExecutable(); inline void linkCode(void* ownerUID, JITCompilationEffort); @@ -428,9 +428,9 @@ void BranchCompactingLinkBuffer<MacroAssembler>::performFinalization() } template <typename MacroAssembler> -inline void BranchCompactingLinkBuffer<MacroAssembler>::makeExecutable() +inline bool BranchCompactingLinkBuffer<MacroAssembler>::makeExecutable() { - ExecutableAllocator::makeExecutable(code(), m_initialSize); + return ExecutableAllocator::makeExecutable(code(), m_initialSize); } template <typename MacroAssembler> @@ -443,9 +443,12 @@ inline void BranchCompactingLinkBuffer<MacroAssembler>::linkCode(void* ownerUID, m_executableMemory = m_globalData->executableAllocator.allocate(*m_globalData, m_initialSize, ownerUID, effort); if (!m_executableMemory) return; + if (Q_UNLIKELY(!ExecutableAllocator::makeWritable(m_executableMemory->memoryStart(), m_executableMemory->memorySize()))) { + m_executableMemory = {}; + return; + } m_code = (uint8_t*)m_executableMemory->codeStart(); ASSERT(m_code); - ExecutableAllocator::makeWritable(m_executableMemory->memoryStart(), m_executableMemory->memorySize()); uint8_t* inData = (uint8_t*)m_assembler->unlinkedCode(); uint8_t* outData = reinterpret_cast<uint8_t*>(m_code); int readPtr = 0; |