Bug 141771

Summary: REGRESSION(r180279): It broke 20 tests on ARM Linux
Product: WebKit Reporter: Csaba Osztrogonác <ossy>
Component: JavaScriptCoreAssignee: Csaba Osztrogonác <ossy>
Status: RESOLVED FIXED    
Severity: Normal CC: commit-queue, fpizlo, ggaren, gyuyoung.kim, hs85.jeong, mark.lam, msaboff, oliver, ossy, zherczeg
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 108645, 141332    
Attachments:
Description Flags
Patch none

Description Csaba Osztrogonác 2015-02-18 14:59:23 PST
20 different tests fail on ARM and Thumb2 instruction set too:
jsc-layout-tests.yaml/js/script-tests/apply-varargs.js
jsc-layout-tests.yaml/js/script-tests/comparison-operators.js
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-out-of-bounds.js
jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js
jsc-layout-tests.yaml/js/script-tests/function-apply-many-args.js
jsc-layout-tests.yaml/js/script-tests/regress-139548.js
jsc-layout-tests.yaml/js/slow-stress/script-tests/variadic-closure-call.js
regress/script-tests/call-spread-apply.js
regress/script-tests/call-spread-call.js
regress/script-tests/deltablue-varargs.js
stress/call-varargs-length-effects.js
stress/construct-varargs-inline-smaller-Foo.js
stress/construct-varargs-inline.js
stress/construct-varargs-no-inline.js
stress/get-argument-by-val-in-inlined-varargs-call-out-of-bounds.js
stress/get-argument-by-val-safe-in-inlined-varargs-call-out-of-bounds.js
stress/get-my-argument-by-val-creates-arguments.js
stress/load-varargs-then-inlined-call-exit-in-foo.js
stress/load-varargs-then-inlined-call-inlined.js
stress/load-varargs-then-inlined-call.js


detailed results:
- https://build.webkit.org/builders/EFL%20Linux%20ARMv7%20Thumb2%20Release/builds/11347
- https://build.webkit.org/builders/EFL%20Linux%20ARMv7%20Traditional%20Release/builds/11201

** The following JSC stress test failures have been introduced:
	jsc-layout-tests.yaml/js/script-tests/apply-varargs.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/comparison-operators-greater.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/comparison-operators-less.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/comparison-operators.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/dfg-arguments-out-of-bounds.js.layout
	jsc-layout-tests.yaml/js/script-tests/dfg-arguments-out-of-bounds.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/dfg-arguments-out-of-bounds.js.layout-no-cjit
	jsc-layout-tests.yaml/js/script-tests/dfg-arguments-out-of-bounds.js.layout-no-llint
	jsc-layout-tests.yaml/js/script-tests/function-apply-aliased.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/function-apply-many-args.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/regress-139548.js.layout
	jsc-layout-tests.yaml/js/script-tests/regress-139548.js.layout-dfg-eager-no-cjit
	jsc-layout-tests.yaml/js/script-tests/regress-139548.js.layout-no-cjit
	jsc-layout-tests.yaml/js/script-tests/regress-139548.js.layout-no-llint
	jsc-layout-tests.yaml/js/slow-stress/script-tests/variadic-closure-call.js.default
	jsc-layout-tests.yaml/js/slow-stress/script-tests/variadic-closure-call.js.no-cjit
	regress/script-tests/call-spread-apply.js.always-trigger-copy-phase
	regress/script-tests/call-spread-apply.js.default
	regress/script-tests/call-spread-apply.js.dfg-eager
	regress/script-tests/call-spread-apply.js.dfg-eager-no-cjit-validate
	regress/script-tests/call-spread-apply.js.no-cjit-validate-phases
	regress/script-tests/call-spread-apply.js.no-llint
	regress/script-tests/call-spread-call.js.always-trigger-copy-phase
	regress/script-tests/call-spread-call.js.default
	regress/script-tests/call-spread-call.js.dfg-eager
	regress/script-tests/call-spread-call.js.dfg-eager-no-cjit-validate
	regress/script-tests/call-spread-call.js.no-cjit-validate-phases
	regress/script-tests/call-spread-call.js.no-llint
	regress/script-tests/deltablue-varargs.js.always-trigger-copy-phase
	regress/script-tests/deltablue-varargs.js.default
	regress/script-tests/deltablue-varargs.js.dfg-eager
	regress/script-tests/deltablue-varargs.js.dfg-eager-no-cjit-validate
	regress/script-tests/deltablue-varargs.js.no-cjit-validate-phases
	regress/script-tests/deltablue-varargs.js.no-llint
	stress/call-varargs-length-effects.js.always-trigger-copy-phase
	stress/call-varargs-length-effects.js.default
	stress/call-varargs-length-effects.js.dfg-eager
	stress/call-varargs-length-effects.js.dfg-eager-no-cjit-validate
	stress/call-varargs-length-effects.js.no-cjit-validate-phases
	stress/call-varargs-length-effects.js.no-llint
	stress/construct-varargs-inline-smaller-Foo.js.always-trigger-copy-phase
	stress/construct-varargs-inline-smaller-Foo.js.default
	stress/construct-varargs-inline-smaller-Foo.js.dfg-eager
	stress/construct-varargs-inline-smaller-Foo.js.dfg-eager-no-cjit-validate
	stress/construct-varargs-inline-smaller-Foo.js.no-cjit-validate-phases
	stress/construct-varargs-inline-smaller-Foo.js.no-llint
	stress/construct-varargs-inline.js.always-trigger-copy-phase
	stress/construct-varargs-inline.js.default
	stress/construct-varargs-inline.js.dfg-eager
	stress/construct-varargs-inline.js.dfg-eager-no-cjit-validate
	stress/construct-varargs-inline.js.no-cjit-validate-phases
	stress/construct-varargs-inline.js.no-llint
	stress/construct-varargs-no-inline.js.always-trigger-copy-phase
	stress/construct-varargs-no-inline.js.default
	stress/construct-varargs-no-inline.js.dfg-eager
	stress/construct-varargs-no-inline.js.dfg-eager-no-cjit-validate
	stress/construct-varargs-no-inline.js.no-cjit-validate-phases
	stress/construct-varargs-no-inline.js.no-llint
	stress/get-argument-by-val-in-inlined-varargs-call-out-of-bounds.js.always-trigger-copy-phase
	stress/get-argument-by-val-in-inlined-varargs-call-out-of-bounds.js.default
	stress/get-argument-by-val-in-inlined-varargs-call-out-of-bounds.js.dfg-eager
	stress/get-argument-by-val-in-inlined-varargs-call-out-of-bounds.js.dfg-eager-no-cjit-validate
	stress/get-argument-by-val-in-inlined-varargs-call-out-of-bounds.js.no-cjit-validate-phases
	stress/get-argument-by-val-in-inlined-varargs-call-out-of-bounds.js.no-llint
	stress/get-argument-by-val-safe-in-inlined-varargs-call-out-of-bounds.js.always-trigger-copy-phase
	stress/get-argument-by-val-safe-in-inlined-varargs-call-out-of-bounds.js.default
	stress/get-argument-by-val-safe-in-inlined-varargs-call-out-of-bounds.js.dfg-eager
	stress/get-argument-by-val-safe-in-inlined-varargs-call-out-of-bounds.js.dfg-eager-no-cjit-validate
	stress/get-argument-by-val-safe-in-inlined-varargs-call-out-of-bounds.js.no-cjit-validate-phases
	stress/get-argument-by-val-safe-in-inlined-varargs-call-out-of-bounds.js.no-llint
	stress/get-my-argument-by-val-creates-arguments.js.always-trigger-copy-phase
	stress/get-my-argument-by-val-creates-arguments.js.default
	stress/get-my-argument-by-val-creates-arguments.js.dfg-eager
	stress/get-my-argument-by-val-creates-arguments.js.dfg-eager-no-cjit-validate
	stress/get-my-argument-by-val-creates-arguments.js.no-cjit-validate-phases
	stress/get-my-argument-by-val-creates-arguments.js.no-llint
	stress/load-varargs-then-inlined-call-exit-in-foo.js.always-trigger-copy-phase
	stress/load-varargs-then-inlined-call-exit-in-foo.js.default
	stress/load-varargs-then-inlined-call-exit-in-foo.js.dfg-eager
	stress/load-varargs-then-inlined-call-exit-in-foo.js.dfg-eager-no-cjit-validate
	stress/load-varargs-then-inlined-call-exit-in-foo.js.no-cjit-validate-phases
	stress/load-varargs-then-inlined-call-exit-in-foo.js.no-llint
	stress/load-varargs-then-inlined-call-inlined.js.always-trigger-copy-phase
	stress/load-varargs-then-inlined-call-inlined.js.default
	stress/load-varargs-then-inlined-call-inlined.js.dfg-eager
	stress/load-varargs-then-inlined-call-inlined.js.dfg-eager-no-cjit-validate
	stress/load-varargs-then-inlined-call-inlined.js.no-cjit-validate-phases
	stress/load-varargs-then-inlined-call-inlined.js.no-llint
	stress/load-varargs-then-inlined-call.js.always-trigger-copy-phase
	stress/load-varargs-then-inlined-call.js.default
	stress/load-varargs-then-inlined-call.js.dfg-eager
	stress/load-varargs-then-inlined-call.js.dfg-eager-no-cjit-validate
	stress/load-varargs-then-inlined-call.js.no-cjit-validate-phases
	stress/load-varargs-then-inlined-call.js.no-llint

Results for JSC stress tests:
    94 failures found.
Comment 1 Filip Pizlo 2015-02-18 15:13:14 PST
I wonder if this is because of EABI.  Those new callOperation() overflows may need to be tweaked to respect EABI's treatment of 64-bit values.
Comment 2 Csaba Osztrogonác 2015-02-18 23:37:10 PST
(In reply to comment #1)
> I wonder if this is because of EABI.  Those new callOperation() overflows
> may need to be tweaked to respect EABI's treatment of 64-bit values.

Many thanks for the hint, I chekced the new call functions, it 
seems the problem is exactly this. I'll prepare the fix soon.
Comment 3 Csaba Osztrogonác 2015-02-19 00:51:50 PST
Created attachment 246885 [details]
Patch

fixed, tested, all tests pass now
Comment 4 Zoltan Herczeg 2015-02-19 01:45:32 PST
Lgtm.
Comment 5 WebKit Commit Bot 2015-02-19 07:46:22 PST
Comment on attachment 246885 [details]
Patch

Clearing flags on attachment: 246885

Committed r180345: <http://trac.webkit.org/changeset/180345>
Comment 6 WebKit Commit Bot 2015-02-19 07:46:25 PST
All reviewed patches have been landed.  Closing bug.
Comment 7 Csaba Osztrogonác 2015-02-25 01:03:09 PST
*** Bug 141954 has been marked as a duplicate of this bug. ***