[webkit-dev] Running WinCairo without JIT

Vienneau, Christopher cvienneau at ea.com
Tue Aug 25 15:20:15 PDT 2015


I’ve got it sorted out, seems the steps needed to disable JIT for WinCairo are:

1 – Add the following near the top of wtf\Platform.h: #define ENABLE_JIT 0
2 – Make sure the following file is excluded from the build (in the non-JIT path, it’s not actual assembly so shouldn’t be sent to masm): JavaScriptCore\DerivedSources\LowLevelInterpreter.asm
3 – Modify Source\JavaScriptCore\JavaScriptCore.vcxproj\LLInt\LLIntAssembly\build-LLIntAssembly.pl line 65 as the comment indicates:
# If you want to enable the LLINT C loop, set OUTPUTFILENAME to "LLIntAssembly.h"
my $OUTPUTFILENAME = File::Spec->catfile($DERIVED_SOURCES_DIR, 'LLIntAssembly.h');

Cheers

Chris

From: Vienneau, Christopher
Sent: Tuesday, August 25, 2015 12:18 PM
To: 'Alex Christensen' <achristensen at apple.com>; WebKit Development <webkit-dev at lists.webkit.org>
Subject: RE: Running WinCairo without JIT

>> If you are trying to include LLIntAssembly.h on Windows, you’re doing something wrong
Ok, perhaps there is a bug here then.  As noted in my first mail the steps I take in an attempt to disable JIT is:
1)
C:\cygwin\home\cvienneau\WebKit-r188436\Source\WTF\wtf\Platform.h (line 698)
#define ENABLE_JIT 0

2)
Change type of LowLevelInterpreterWin.asm in VS project so that it isn’t built:
(Item Type) "Microsoft Macro Assembler" -> "Text"
I presume this needs to be done since the sln is not generated.  Is that the right approach?

3)
After I do this then the C_LOOP path will take over, so now in:
C:\cygwin\home\cvienneau\WebKit-r188436\Source\JavaScriptCore\llint\LowLevelInterpreter.cpp (line 425)
It does an:
#include "LLIntAssembly.h"

If you’re telling me it should never do this include on windows then perhaps its missing a #define here?  Let’s assume for a second that that’s all that is missing so I comment out the include for my next build, it does compile fine however I get a crash when I encounter any JavaScript.  The crash originate from:

C:\cygwin\home\cvienneau\WebKit-r188436\Source\JavaScriptCore\llint\LowLevelInterpreter.cpp  (line 482)
Where is it just returning a default JSValue();

…
    return JSValue(); // to suppress a compiler warning.
} // Interpreter::llintCLoopExecute()

} // namespace JSC
…

>             JavaScriptCore.dll!JSC::LLInt::CLoop::execute(JSC::OpcodeID entryOpcodeID, void * executableAddress, JSC::VM * vm, JSC::ProtoCallFrame * protoCallFrame, bool isInitializationPass) Line 482  C++
               JavaScriptCore.dll!vmEntryToJavaScript(void * executableAddress, JSC::VM * vm, JSC::ProtoCallFrame * protoCallFrame) Line 100              C++
               JavaScriptCore.dll!JSC::JITCode::execute(JSC::VM * vm, JSC::ProtoCallFrame * protoCallFrame) Line 82 C++
               JavaScriptCore.dll!JSC::Interpreter::execute(JSC::ProgramExecutable * program, JSC::ExecState * callFrame, JSC::JSObject * thisObj) Line 884               C++
               JavaScriptCore.dll!JSC::evaluate(JSC::ExecState * exec, const JSC::SourceCode & source, JSC::JSValue thisValue, WTF::NakedPtr<JSC::Exception> & returnedException) Line 101          C++
               WebKit.dll!WebCore::ScriptController::evaluateInWorld(const WebCore::ScriptSourceCode & sourceCode, WebCore::DOMWrapperWorld & world) Line 164             C++
               WebKit.dll!WebCore::ScriptController::evaluate(const WebCore::ScriptSourceCode & sourceCode) Line 181                C++
               WebKit.dll!WebCore::ScriptElement::executeScript(const WebCore::ScriptSourceCode & sourceCode) Line 309         C++
               WebKit.dll!WebCore::ScriptElement::prepareScript(const WTF::TextPosition & scriptStartPosition, WebCore::ScriptElement::LegacyTypeSupport supportLegacyTypes) Line 242     C++
               WebKit.dll!WebCore::HTMLScriptRunner::runScript(WebCore::Element * script, const WTF::TextPosition & scriptStartPosition) Line 310        C++
               WebKit.dll!WebCore::HTMLScriptRunner::execute(WTF::PassRefPtr<WebCore::Element> scriptElement, const WTF::TextPosition & scriptStartPosition) Line 179  C++
               WebKit.dll!WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder() Line 195            C++
                WebKit.dll!WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode mode) Line 259 C++
               WebKit.dll!WebCore::HTMLDocumentParser::append(WTF::PassRefPtr<WTF::StringImpl> inputSource) Line 393         C++
               WebKit.dll!WebCore::DecodedDataDocumentParser::appendBytes(WebCore::DocumentWriter & writer, const char * data, unsigned __int64 length) Line 50          C++
               WebKit.dll!WebCore::DocumentLoader::commitData(const char * bytes, unsigned __int64 length) Line 867                C++
               WebKit.dll!WebFrameLoaderClient::committedLoad(WebCore::DocumentLoader * loader, const char * data, int length) Line 700              C++
               WebKit.dll!WebCore::DocumentLoader::commitLoad(const char * data, int length) Line 784        C++
               WebKit.dll!WebCore::DocumentLoader::dataReceived(WebCore::CachedResource * resource, const char * data, int length) Line 890              C++
               WebKit.dll!WebCore::CachedRawResource::notifyClientsDataWasReceived(const char * data, unsigned int length) Line 118                C++
               WebKit.dll!WebCore::CachedRawResource::addDataBuffer(WebCore::SharedBuffer & data) Line 70      C++
               WebKit.dll!WebCore::SubresourceLoader::didReceiveDataOrBuffer(const char * data, int length, WTF::PassRefPtr<WebCore::SharedBuffer> prpBuffer, __int64 encodedDataLength, WebCore::DataPayloadType dataPayloadType) Line 295          C++
               WebKit.dll!WebCore::SubresourceLoader::didReceiveData(const char * data, unsigned int length, __int64 encodedDataLength, WebCore::DataPayloadType dataPayloadType) Line 271    C++
               WebKit.dll!WebCore::writeCallback(void * ptr, unsigned __int64 size, unsigned __int64 nmemb, void * data) Line 335                C++
               libcurl.dll!000007fedfa63510()    Unknown
               libcurl.dll!000007fedfa432af()     Unknown
               libcurl.dll!000007fedfa5601d()    Unknown
               libcurl.dll!000007fedfa713b4()    Unknown
               libcurl.dll!000007fedfa71ca5()     Unknown
               libcurl.dll!000007fedfa5d033()    Unknown
               libcurl.dll!000007fedfa5d5f0()     Unknown
               WebKit.dll!WebCore::ResourceHandleManager::downloadTimerCallback() Line 650        C++
               WebKit.dll!WebCore::ThreadTimers::sharedTimerFiredInternal() Line 135            C++
               WebKit.dll!WebCore::TimerWindowWndProc(HWND__ * hWnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 93              C++
               [External Code]
               WebKit.dll!WebKitMessageLoop::run(HACCEL__ * hAccelTable) Line 89                C++
               WinLauncher.dll!0000000180006f97()      Unknown
               WinLauncher.exe!00000001400016af()   Unknown
               WinLauncher.exe!0000000140003382()  Unknown
               [External Code]

Later causing this crash in the form of a RELEASE_ASSERT(result); C:\cygwin\home\cvienneau\WebKit-r188436\Source\JavaScriptCore\runtime\Completion.cpp (line 107)
                WTF.dll!WTFCrash() Line 321      C++
>             JavaScriptCore.dll!JSC::evaluate(JSC::ExecState * exec, const JSC::SourceCode & source, JSC::JSValue thisValue, WTF::NakedPtr<JSC::Exception> & returnedException) Line 107          C++
               WebKit.dll!WebCore::ScriptController::evaluateInWorld(const WebCore::ScriptSourceCode & sourceCode, WebCore::DOMWrapperWorld & world) Line 164             C++
               WebKit.dll!WebCore::ScriptController::evaluate(const WebCore::ScriptSourceCode & sourceCode) Line 181                C++
               WebKit.dll!WebCore::ScriptElement::executeScript(const WebCore::ScriptSourceCode & sourceCode) Line 309         C++
               WebKit.dll!WebCore::ScriptElement::prepareScript(const WTF::TextPosition & scriptStartPosition, WebCore::ScriptElement::LegacyTypeSupport supportLegacyTypes) Line 242     C++
               WebKit.dll!WebCore::HTMLScriptRunner::runScript(WebCore::Element * script, const WTF::TextPosition & scriptStartPosition) Line 310        C++
               WebKit.dll!WebCore::HTMLScriptRunner::execute(WTF::PassRefPtr<WebCore::Element> scriptElement, const WTF::TextPosition & scriptStartPosition) Line 179  C++
               WebKit.dll!WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder() Line 195            C++
                WebKit.dll!WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode mode) Line 259 C++
               WebKit.dll!WebCore::HTMLDocumentParser::append(WTF::PassRefPtr<WTF::StringImpl> inputSource) Line 393         C++
               WebKit.dll!WebCore::DecodedDataDocumentParser::appendBytes(WebCore::DocumentWriter & writer, const char * data, unsigned __int64 length) Line 50          C++
               WebKit.dll!WebCore::DocumentLoader::commitData(const char * bytes, unsigned __int64 length) Line 867                C++
               WebKit.dll!WebFrameLoaderClient::committedLoad(WebCore::DocumentLoader * loader, const char * data, int length) Line 700              C++
               WebKit.dll!WebCore::DocumentLoader::commitLoad(const char * data, int length) Line 784        C++
               WebKit.dll!WebCore::DocumentLoader::dataReceived(WebCore::CachedResource * resource, const char * data, int length) Line 890              C++
               WebKit.dll!WebCore::CachedRawResource::notifyClientsDataWasReceived(const char * data, unsigned int length) Line 118                C++
               WebKit.dll!WebCore::CachedRawResource::addDataBuffer(WebCore::SharedBuffer & data) Line 70      C++
               WebKit.dll!WebCore::SubresourceLoader::didReceiveDataOrBuffer(const char * data, int length, WTF::PassRefPtr<WebCore::SharedBuffer> prpBuffer, __int64 encodedDataLength, WebCore::DataPayloadType dataPayloadType) Line 295          C++
               WebKit.dll!WebCore::SubresourceLoader::didReceiveData(const char * data, unsigned int length, __int64 encodedDataLength, WebCore::DataPayloadType dataPayloadType) Line 271    C++
               WebKit.dll!WebCore::writeCallback(void * ptr, unsigned __int64 size, unsigned __int64 nmemb, void * data) Line 335                C++
               libcurl.dll!000007fedfa63510()    Unknown
               libcurl.dll!000007fedfa432af()     Unknown
               libcurl.dll!000007fedfa5601d()    Unknown
               libcurl.dll!000007fedfa713b4()    Unknown
               libcurl.dll!000007fedfa71ca5()     Unknown
               libcurl.dll!000007fedfa5d033()    Unknown
               libcurl.dll!000007fedfa5d5f0()     Unknown
               WebKit.dll!WebCore::ResourceHandleManager::downloadTimerCallback() Line 650        C++
               WebKit.dll!WebCore::ThreadTimers::sharedTimerFiredInternal() Line 135            C++
               WebKit.dll!WebCore::TimerWindowWndProc(HWND__ * hWnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 93              C++
               [External Code]
               WebKit.dll!WebKitMessageLoop::run(HACCEL__ * hAccelTable) Line 89                C++
               WinLauncher.dll!0000000180006f97()      Unknown
               WinLauncher.exe!00000001400016af()   Unknown
               WinLauncher.exe!0000000140003382()  Unknown
               [External Code]

Have I taken incorrect steps to disable JIT or is there a bug?

From: Alex Christensen [mailto:achristensen at apple.com]
Sent: Tuesday, August 25, 2015 10:42 AM
To: Vienneau, Christopher <cvienneau at ea.com<mailto:cvienneau at ea.com>>
Cc: webkit-dev-request at lists.webkit.org<mailto:webkit-dev-request at lists.webkit.org>
Subject: Re: Running WinCairo without JIT

LLIntAssembly.h should never be needed or used on Windows.  The reason we have LowLevelInterpreterWin.asm instead is that Visual Studio has a limit on the number of characters (65535 IIRC) in an inline assembly string and so we put that assembly in a different file.  If you are trying to include LLIntAssembly.h on Windows, you’re doing something wrong.

Alex


On Aug 24, 2015, at 6:08 PM, Vienneau, Christopher <cvienneau at ea.com<mailto:cvienneau at ea.com>> wrote:

LLIntAssembly.h

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-dev/attachments/20150825/6689db05/attachment-0001.html>


More information about the webkit-dev mailing list