diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2017-02-08 10:25:24 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-02-08 16:18:13 +0000 |
commit | 7cab0a31de5ab67bbe1add88ea6aa27e7bbc4ddc (patch) | |
tree | e587d8710e0a1fcd72951fb094012a87026c697f | |
parent | fd9871095c3766f341bdab58d4ddea518da36b9e (diff) |
Fix crash when generating cache files
Make sure that the allocator in bootstrap builds really just allocates
memory for the generated code and otherwise doesn't try to allocate
executable memory.
Change-Id: Ic40724903706ae98ef272a028e7d8299400e232b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r-- | src/3rdparty/masm/stubs/ExecutableAllocator.h | 7 | ||||
-rw-r--r-- | tools/qmlcachegen/qmlcachegen.cpp | 3 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/3rdparty/masm/stubs/ExecutableAllocator.h b/src/3rdparty/masm/stubs/ExecutableAllocator.h index 9a2a9773b5..3b84b5c986 100644 --- a/src/3rdparty/masm/stubs/ExecutableAllocator.h +++ b/src/3rdparty/masm/stubs/ExecutableAllocator.h @@ -107,7 +107,7 @@ struct ExecutableAllocator { size = size + (iaddr - roundAddr); addr = reinterpret_cast<void*>(roundAddr); -#if ENABLE(ASSEMBLER_WX_EXCLUSIVE) +#if ENABLE(ASSEMBLER_WX_EXCLUSIVE) && !defined(V4_BOOTSTRAP) # if OS(WINDOWS) DWORD oldProtect; # if !OS(WINRT) @@ -140,6 +140,7 @@ struct ExecutableAllocator { size = size + (iaddr - roundAddr); addr = reinterpret_cast<void*>(roundAddr); +#if !defined(V4_BOOTSTRAP) #if ENABLE(ASSEMBLER_WX_EXCLUSIVE) # if OS(WINDOWS) DWORD oldProtect; @@ -161,6 +162,10 @@ struct ExecutableAllocator { #else # error "Only W^X is supported" #endif +#else + (void)addr; // suppress unused parameter warning + (void)size; // suppress unused parameter warning +#endif } QV4::ExecutableAllocator *realAllocator; diff --git a/tools/qmlcachegen/qmlcachegen.cpp b/tools/qmlcachegen/qmlcachegen.cpp index 4b902eda0f..10d9829520 100644 --- a/tools/qmlcachegen/qmlcachegen.cpp +++ b/tools/qmlcachegen/qmlcachegen.cpp @@ -141,7 +141,8 @@ static bool compileQmlFile(const QString &inputFileName, QV4::EvalISelFactory *i // ### translation binding simplification - QScopedPointer<QV4::EvalInstructionSelection> isel(iselFactory->create(/*engine*/nullptr, /*executable allocator*/nullptr, &irDocument.jsModule, &irDocument.jsGenerator)); + QV4::ExecutableAllocator allocator; + QScopedPointer<QV4::EvalInstructionSelection> isel(iselFactory->create(/*engine*/nullptr, &allocator, &irDocument.jsModule, &irDocument.jsGenerator)); // Disable lookups in non-standalone (aka QML) mode isel->setUseFastLookups(false); irDocument.javaScriptCompilationUnit = isel->compile(/*generate unit*/false); |