diff options
author | Ulf Hermann <[email protected]> | 2021-01-11 11:33:26 +0100 |
---|---|---|
committer | Ulf Hermann <[email protected]> | 2021-01-12 10:09:53 +0100 |
commit | 131e2c81d40e3d324c62e113749a08e7993d008f (patch) | |
tree | b8bb24c8a189cba4ef4a46d5eb5c810b7905f51c /src/qml/jsruntime/qv4vme_moth.cpp | |
parent | 8dbe5b2be4e65e96013651f1ffee1cc26dd1ead1 (diff) |
masm: Add error handling for failed mprotect()
If we cannot mprotect() we have to abort the JIT compilation. Delete
RepatchBuffer.h as it is unfixable in that regard. Luckily we don't use
it.
Task-number: QTBUG-89659
Pick-to: 5.15
Change-Id: Ic5ddbdf51b471db4ddeaa75aab48b24c1f7ced56
Reviewed-by: Lars Knoll <[email protected]>
Reviewed-by: Andrei Golubev <[email protected]>
Diffstat (limited to 'src/qml/jsruntime/qv4vme_moth.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4vme_moth.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp index bea301c6e3..03cb69490e 100644 --- a/src/qml/jsruntime/qv4vme_moth.cpp +++ b/src/qml/jsruntime/qv4vme_moth.cpp @@ -444,7 +444,10 @@ ReturnedValue VME::exec(CppStackFrame *frame, ExecutionEngine *engine) #if QT_CONFIG(qml_jit) if (debugger == nullptr) { - if (function->jittedCode == nullptr) { + // Check for codeRef here. In rare cases the JIT compilation may fail, which leaves us + // with a (useless) codeRef, but no jittedCode. In that case, don't try to JIT again every + // time we execute the function, but just interpret instead. + if (function->codeRef == nullptr) { if (engine->canJIT(function)) QV4::JIT::BaselineJIT(function).generate(); else |