Modified: trunk/Source/_javascript_Core/ChangeLog (239054 => 239055)
--- trunk/Source/_javascript_Core/ChangeLog 2018-12-10 23:05:57 UTC (rev 239054)
+++ trunk/Source/_javascript_Core/ChangeLog 2018-12-10 23:14:31 UTC (rev 239055)
@@ -1,3 +1,14 @@
+2018-12-10 Mark Lam <[email protected]>
+
+ LinkBuffer::copyCompactAndLinkCode() needs to be aware of ENABLE(SEPARATED_WX_HEAP).
+ https://bugs.webkit.org/show_bug.cgi?id=192569
+ <rdar://problem/45615617>
+
+ Reviewed by Saam Barati.
+
+ * assembler/LinkBuffer.cpp:
+ (JSC::LinkBuffer::copyCompactAndLinkCode):
+
2018-12-10 Caio Lima <[email protected]>
[BigInt] Add ValueMul into DFG
Modified: trunk/Source/_javascript_Core/assembler/LinkBuffer.cpp (239054 => 239055)
--- trunk/Source/_javascript_Core/assembler/LinkBuffer.cpp 2018-12-10 23:05:57 UTC (rev 239054)
+++ trunk/Source/_javascript_Core/assembler/LinkBuffer.cpp 2018-12-10 23:14:31 UTC (rev 239055)
@@ -41,6 +41,10 @@
namespace JSC {
+#if ENABLE(SEPARATED_WX_HEAP)
+extern JS_EXPORT_PRIVATE bool useFastPermisionsJITCopy;
+#endif // ENABLE(SEPARATED_WX_HEAP)
+
bool shouldDumpDisassemblyFor(CodeBlock* codeBlock)
{
if (codeBlock && JITCode::isOptimizingJIT(codeBlock->jitType()) && Options::dumpDFGDisassembly())
@@ -116,6 +120,14 @@
template <typename InstructionType>
void LinkBuffer::copyCompactAndLinkCode(MacroAssembler& macroAssembler, void* ownerUID, JITCompilationEffort effort)
{
+#if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS)
+#if ENABLE(SEPARATED_WX_HEAP)
+ const bool isUsingFastPermissionsJITCopy = useFastPermisionsJITCopy;
+#else
+ const bool isUsingFastPermissionsJITCopy = true;
+#endif
+#endif
+
allocate(macroAssembler, ownerUID, effort);
const size_t initialSize = macroAssembler.m_assembler.codeSize();
if (didFailToAllocate())
@@ -130,6 +142,11 @@
const ARM64EHash assemblerBufferHash = macroAssembler.m_assembler.buffer().hash();
ARM64EHash verifyUncompactedHash(assemblerBufferHash.randomSeed());
uint8_t* outData = codeOutData;
+#if ENABLE(SEPARATED_WX_HEAP)
+ AssemblerData outBuffer(m_size);
+ if (!isUsingFastPermissionsJITCopy)
+ outData = reinterpret_cast<uint8_t*>(outBuffer.buffer());
+#endif // ENABLE(SEPARATED_WX_HEAP)
#else
AssemblerData outBuffer(m_size);
uint8_t* outData = reinterpret_cast<uint8_t*>(outBuffer.buffer());
@@ -144,7 +161,8 @@
unsigned jumpCount = jumpsToLink.size();
#if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS)
- os_thread_self_restrict_rwx_to_rw();
+ if (isUsingFastPermissionsJITCopy)
+ os_thread_self_restrict_rwx_to_rw();
#endif
if (m_shouldPerformBranchCompaction) {
@@ -240,6 +258,8 @@
for (unsigned i = 0; i < jumpCount; ++i) {
#if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS)
auto memcpyFunction = memcpy;
+ if (!isUsingFastPermissionsJITCopy)
+ memcpyFunction = performJITMemcpy;
#else
auto memcpyFunction = performJITMemcpy;
#endif
@@ -256,7 +276,8 @@
}
#if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS)
- os_thread_self_restrict_rwx_to_rx();
+ if (isUsingFastPermissionsJITCopy)
+ os_thread_self_restrict_rwx_to_rx();
#endif
if (m_executableMemory) {
@@ -268,7 +289,12 @@
ASSERT(codeOutData != outData);
performJITMemcpy(codeOutData, outData, m_size);
#else
- ASSERT(codeOutData == outData);
+ if (isUsingFastPermissionsJITCopy)
+ ASSERT(codeOutData == outData);
+ else {
+ ASSERT(codeOutData != outData);
+ performJITMemcpy(codeOutData, outData, m_size);
+ }
#endif
jumpsToLink.clear();
@@ -280,7 +306,7 @@
dumpCode(codeOutData, m_size);
#endif
}
-#endif
+#endif // ENABLE(BRANCH_COMPACTION)
void LinkBuffer::linkCode(MacroAssembler& macroAssembler, void* ownerUID, JITCompilationEffort effort)