Bug 148376 - New tests introduced in r188545 fail on 32 bit ARM
Summary: New tests introduced in r188545 fail on 32 bit ARM
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: Other
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks: 108645 144956
  Show dependency treegraph
 
Reported: 2015-08-24 03:52 PDT by Csaba Osztrogonác
Modified: 2016-02-11 13:53 PST (History)
10 users (show)

See Also:


Attachments
Patch (8.75 KB, patch)
2015-09-18 15:56 PDT, GSkachkov
no flags Details | Formatted Diff | Diff
Patch (8.75 KB, patch)
2015-09-18 16:06 PDT, GSkachkov
no flags Details | Formatted Diff | Diff
Patch (8.73 KB, patch)
2015-09-19 07:35 PDT, GSkachkov
no flags Details | Formatted Diff | Diff
arm_tests_speccell.log (2.75 MB, application/octet-stream)
2015-09-21 13:00 PDT, GSkachkov
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Csaba Osztrogonác 2015-08-24 03:52:36 PDT
12 different tests fail on ARM Linux (only 32 bit) which
introduced in https://trac.webkit.org/changeset/188545

Maybe they fail on iOS devices too, but there isn't any public iOS tester buildbot.

- EFL ARM Thumb2: https://build.webkit.org/builders/EFL%20Linux%20ARMv7%20Thumb2%20Release/builds/14915
- EFL ARM Traditional: https://build.webkit.org/builders/EFL%20Linux%20ARMv7%20Traditional%20Release/builds/14755
- GTK ARM (???): https://build.webkit.org/builders/GTK%20Linux%20ARM%20Release/builds/8297

I won't have time to investigate this bug in the near future,
feel free to pick it up if somebody is interested in it.
Comment 1 GSkachkov 2015-08-24 05:58:18 PDT
 Csaba Osztrogonác I'll try to reproduce on iOS.
Comment 2 Csaba Osztrogonác 2015-08-27 03:26:02 PDT
(In reply to comment #1)
>  Csaba Osztrogonác I'll try to reproduce on iOS.

Have you managed to reproduce this bug on iOS too or is it a Linux only issue?
Comment 3 GSkachkov 2015-08-27 03:57:05 PDT
(In reply to comment #2)
> (In reply to comment #1)
> >  Csaba Osztrogonác I'll try to reproduce on iOS.
> 
> Have you managed to reproduce this bug on iOS too or is it a Linux only
> issue?

I've not managed to reproduce on my default ios simulator but it is 64 bit, I still can't run test for ios 32 bit. Is it possibe to build and run test for Linux ARM on MacOS for instance with using VM with Ubuntu?
Comment 4 Csaba Osztrogonác 2015-08-27 04:09:28 PDT
(In reply to comment #3)
> (In reply to comment #2)
> > (In reply to comment #1)
> > >  Csaba Osztrogonác I'll try to reproduce on iOS.
> > 
> > Have you managed to reproduce this bug on iOS too or is it a Linux only
> > issue?
> 
> I've not managed to reproduce on my default ios simulator but it is 64 bit,
> I still can't run test for ios 32 bit. Is it possibe to build and run test
> for Linux ARM on MacOS for instance with using VM with Ubuntu?

I don't think so if it is possible to run 
tests in VM, only on real ARM hardware.

I'll create a debug build and try to provide a detailed gdb 
backtrace about these crashes sometime in the next week.
Comment 5 Csaba Osztrogonác 2015-08-27 06:07:12 PDT
Here is a crash log in debug mode:

stress/arrowfunction-bound.js.default: ASSERTION FAILED: !from || from->JSCell::inherits(std::remove_pointer<To>::type::info())
stress/arrowfunction-bound.js.default: ../../Source/JavaScriptCore/runtime/JSCell.h(250) : To JSC::jsCast(From*) [with To = JSC::JSObject*; From = JSC::JSCell]
stress/arrowfunction-bound.js.default: 1   0xb65960e4 WTFCrashWithSecurityImplication
stress/arrowfunction-bound.js.default: 2   0x41134 JSC::JSObject* JSC::jsCast<JSC::JSObject*, JSC::JSCell>(JSC::JSCell*)
stress/arrowfunction-bound.js.default: 3   0x3bade JSC::asObject(JSC::JSCell*)
stress/arrowfunction-bound.js.default: 4   0x3de14 JSC::JSValue::getPropertySlot(JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&) const
stress/arrowfunction-bound.js.default: 5   0xb62ffbb2
stress/arrowfunction-bound.js.default: Segmentation fault
stress/arrowfunction-bound.js.default: ERROR: Unexpected exit code: 139
FAIL: stress/arrowfunction-bound.js.default
Comment 6 Csaba Osztrogonác 2015-08-27 06:09:30 PDT
Unfortunately I can't provide GDB backtrace, because GDB segfaults :(
Comment 7 Csaba Osztrogonác 2015-08-27 06:12:14 PDT
It should be a bug somewhere in the JIT engine, because 
this test passes with --useJIT=false command line option.
Comment 8 GSkachkov 2015-08-28 02:02:12 PDT
(In reply to comment #7)
> It should be a bug somewhere in the JIT engine, because 
> this test passes with --useJIT=false command line option.

I've run safari on ios-simulator with 32 bit and but didn't manage reproduce 
issue when I was runnig test manually.
I'll take a look closer to my fixes that related to the JIT this weekend, possible I'll provide list of suspicious changes. That sad I can't reproduce issue on my env. 

Is there any way to use env(building bot) where you found  this issue by me for checking my local changes there, for instance for 1 week period?
Comment 9 GSkachkov 2015-08-31 23:53:56 PDT
(In reply to comment #4)
> (In reply to comment #3)
> > (In reply to comment #2)
> > > (In reply to comment #1)
> > > >  Csaba Osztrogonác I'll try to reproduce on iOS.
> > > 
> > > Have you managed to reproduce this bug on iOS too or is it a Linux only
> > > issue?
> > 
> > I've not managed to reproduce on my default ios simulator but it is 64 bit,
> > I still can't run test for ios 32 bit. Is it possibe to build and run test
> > for Linux ARM on MacOS for instance with using VM with Ubuntu?
> 
> I don't think so if it is possible to run 
> tests in VM, only on real ARM hardware.
I've up & run Debian for ARM(A9) with using qEMU. Now I'm building Webkit GKT+ on Ubuntu VM. I hope that soon I'll manage to reproduce the issue.

> I'll create a debug build and try to provide a detailed gdb 
> backtrace about these crashes sometime in the next week.
Comment 10 GSkachkov 2015-09-15 00:56:25 PDT
(In reply to comment #9)
> (In reply to comment #4)
> > (In reply to comment #3)
> > > (In reply to comment #2)
> > > > (In reply to comment #1)
> > > > >  Csaba Osztrogonác I'll try to reproduce on iOS.
> > > > 
> > > > Have you managed to reproduce this bug on iOS too or is it a Linux only
> > > > issue?
> > > 
> > > I've not managed to reproduce on my default ios simulator but it is 64 bit,
> > > I still can't run test for ios 32 bit. Is it possibe to build and run test
> > > for Linux ARM on MacOS for instance with using VM with Ubuntu?
> > 
> > I don't think so if it is possible to run 
> > tests in VM, only on real ARM hardware.
> I've up & run Debian for ARM(A9) with using qEMU. Now I'm building Webkit
> GKT+ on Ubuntu VM. I hope that soon I'll manage to reproduce the issue.
> 
> > I'll create a debug build and try to provide a detailed gdb 
> > backtrace about these crashes sometime in the next week.

Ohh, you was right, qEMU unbearable slow, so I've bought used Samsung Chromebook with ARM. Now I'm in process of building jsc, hope soon will run the test and manage to reproduce the issue.
Comment 11 GSkachkov 2015-09-18 15:56:18 PDT
Created attachment 261535 [details]
Patch
Comment 12 GSkachkov 2015-09-18 15:59:49 PDT
I've managed to fix tests on my GTK ARM.
Comment 13 GSkachkov 2015-09-18 16:06:49 PDT
Created attachment 261538 [details]
Patch
Comment 14 Saam Barati 2015-09-18 17:52:26 PDT
Comment on attachment 261538 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=261538&action=review

r=me with some nits.

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4641
> +#if !USE(JSVALUE32_64)

nit: make this "USE(JSVALUE64)"

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4652
> +#if !USE(JSVALUE32_64)

nit: make this "USE(JSVALUE64)"

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4671
> +#if !USE(JSVALUE32_64)

ditto

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4705
> +#if !USE(JSVALUE32_64)

ditto

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4709
> +        m_jit.storePtr(thisValueTagGPR, MacroAssembler::Address(resultGPR, JSArrowFunction::offsetOfThisValue() + TagOffset));

nit: I would also make this store32.
Comment 15 GSkachkov 2015-09-19 07:35:06 PDT
Created attachment 261574 [details]
Patch

Fix review comments
Comment 16 Saam Barati 2015-09-20 21:07:01 PDT
Comment on attachment 261574 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=261574&action=review

> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4660
> +        DFG_TYPE_CHECK(thisValue.jsValueRegs(), node->child2(), SpecCell, m_jit.branchIfNotCell(thisValue.jsValueRegs()));

When would this ever not be a cell?
Comment 17 GSkachkov 2015-09-21 00:12:02 PDT
Comment on attachment 261574 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=261574&action=review

>> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4660
>> +        DFG_TYPE_CHECK(thisValue.jsValueRegs(), node->child2(), SpecCell, m_jit.branchIfNotCell(thisValue.jsValueRegs()));
> 
> When would this ever not be a cell?

At start child2 type is SpeculatedType SpecHeapTop  = 0x3bbfffff -> after this line it converts to SpeculatedType SpecCell = 0x000fffff
Without this line this code raise ASSERT error in following module https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h#L120
and it says that it expect Cell but there was Top. 
In JSVALUE64 branch this type check is done by following statement SpeculateCellOperand thisValue(this, node->child2()); (4653)
Comment 18 Saam Barati 2015-09-21 10:55:43 PDT
(In reply to comment #17)
> Comment on attachment 261574 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=261574&action=review
> 
> >> Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4660
> >> +        DFG_TYPE_CHECK(thisValue.jsValueRegs(), node->child2(), SpecCell, m_jit.branchIfNotCell(thisValue.jsValueRegs()));
> > 
> > When would this ever not be a cell?
> 
> At start child2 type is SpeculatedType SpecHeapTop  = 0x3bbfffff -> after
> this line it converts to SpeculatedType SpecCell = 0x000fffff
> Without this line this code raise ASSERT error in following module
> https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/dfg/
> DFGAbstractInterpreterInlines.h#L120
> and it says that it expect Cell but there was Top. 
> In JSVALUE64 branch this type check is done by following statement
> SpeculateCellOperand thisValue(this, node->child2()); (4653)

Oh, right. The "this" value could be the empty value.
Comment 19 WebKit Commit Bot 2015-09-21 11:59:53 PDT
Comment on attachment 261574 [details]
Patch

Clearing flags on attachment: 261574

Committed r190063: <http://trac.webkit.org/changeset/190063>
Comment 20 WebKit Commit Bot 2015-09-21 11:59:57 PDT
All reviewed patches have been landed.  Closing bug.
Comment 21 GSkachkov 2015-09-21 13:00:18 PDT
Created attachment 261678 [details]
arm_tests_speccell.log

Log of tests with failed assert
Comment 22 Csaba Osztrogonác 2016-02-11 03:00:05 PST
(In reply to comment #19)
> Comment on attachment 261574 [details]
> Patch
> 
> Clearing flags on attachment: 261574
> 
> Committed r190063: <http://trac.webkit.org/changeset/190063>

How and why could CQ set the svn:executable property of soource files?

trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
    Property svn:executable set to *

trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
    Property svn:executable set to *

trunk/Source/JavaScriptCore/jit/JIT.h
    Property svn:executable set to *

trunk/Source/JavaScriptCore/jit/JITInlines.h
    Property svn:executable set to *

trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp
    Property svn:executable set to *
Comment 23 Csaba Osztrogonác 2016-02-11 03:53:24 PST
Fixed in http://trac.webkit.org/changeset/196419
Comment 24 GSkachkov 2016-02-11 11:29:22 PST
It is weird, only one difference with another patches, I modified files on Laptop with ChromeOS to check on ARM.
Comment 25 Alexey Proskuryakov 2016-02-11 13:53:08 PST
> How and why could CQ set the svn:executable property of soource files?

The patch had that in:

+old mode 100644
+new mode 100755