aboutsummaryrefslogtreecommitdiffstats
path: root/src/3rdparty/masm/assembler/LinkBuffer.h
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2018-11-08 18:09:21 +0100
committerUlf Hermann <ulf.hermann@qt.io>2018-12-03 08:28:36 +0000
commit74d23ca548b47c85c4b8cdde5fd5a9026e4eb08c (patch)
treecaf94cffe04b7c6235ccfd5f117b17187733752b /src/3rdparty/masm/assembler/LinkBuffer.h
parentfaf99c36d29bfad629fb6ec541ccc2f61ef93443 (diff)
V4: Generate function tables on 64bit windows
In order for global exception handlers to be called reliably, the runtime needs to unwind through JIT-generated code. This can be facilitated by installing a "function table" for each JITed function that specifies "use the frame pointer". Also make sure to generate a function table for JIT'ed regular expressions. Those were forgotten also in the linux case. Fixes: QTBUG-50061 Change-Id: Ib0b8ae9356ed80afe1cab017e36efa4ccbe73f90 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/3rdparty/masm/assembler/LinkBuffer.h')
-rw-r--r--src/3rdparty/masm/assembler/LinkBuffer.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/3rdparty/masm/assembler/LinkBuffer.h b/src/3rdparty/masm/assembler/LinkBuffer.h
index c79b0663c8..4dfd051797 100644
--- a/src/3rdparty/masm/assembler/LinkBuffer.h
+++ b/src/3rdparty/masm/assembler/LinkBuffer.h
@@ -228,6 +228,8 @@ public:
return m_size;
}
+ inline void makeExecutable();
+
private:
template <typename T> T applyOffset(T src)
{
@@ -353,6 +355,11 @@ inline void LinkBufferBase<MacroAssembler, ExecutableOffsetCalculator>::performF
ASSERT(m_size <= INT_MAX);
MacroAssembler::cacheFlush(code(), m_size);
+}
+
+template <typename MacroAssembler, template <typename T> class ExecutableOffsetCalculator>
+inline void LinkBufferBase<MacroAssembler, ExecutableOffsetCalculator>::makeExecutable()
+{
ExecutableAllocator::makeExecutable(code(), static_cast<int>(m_size));
}
@@ -389,6 +396,7 @@ public:
}
inline void performFinalization();
+ inline void makeExecutable();
inline void linkCode(void* ownerUID, JITCompilationEffort);
@@ -421,6 +429,11 @@ inline void BranchCompactingLinkBuffer<MacroAssembler>::performFinalization()
#endif
MacroAssembler::cacheFlush(code(), m_size);
+}
+
+template <typename MacroAssembler>
+inline void BranchCompactingLinkBuffer<MacroAssembler>::makeExecutable()
+{
ExecutableAllocator::makeExecutable(code(), m_initialSize);
}