[Webkit-unassigned] [Bug 127777] [EFL][GTK][Windows] Fix the regression caused by the jsCStack branch merge

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Jan 29 15:02:29 PST 2014


https://bugs.webkit.org/show_bug.cgi?id=127777





--- Comment #13 from Zan Dobersek <zandobersek at gmail.com>  2014-01-29 14:59:53 PST ---
One of the problems is in operationCallEval.
http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/jit/JITOperations.cpp#L612

Here's the disassembled function for the current code:
Dump of assembler code for function operationCallEval:
=> 0x00007ffff7837840 <+0>:    mov    0x20(%rsi),%rax
   0x00007ffff7837844 <+4>:    mov    0x18(%rdi),%rdx
   0x00007ffff7837848 <+8>:    movabs $0xffff000000000002,%rcx
   0x00007ffff7837852 <+18>:    movq   $0x0,0x10(%rsi)
   0x00007ffff783785a <+26>:    test   %rcx,%rax
   0x00007ffff783785d <+29>:    mov    %rdx,0x18(%rsi)
   0x00007ffff7837861 <+33>:    jne    0x7ffff783786c <operationCallEval+44>
   0x00007ffff7837863 <+35>:    mov    (%rax),%rcx
   0x00007ffff7837866 <+38>:    cmpb   $0x13,0x5c(%rcx)
   0x00007ffff783786a <+42>:    je     0x7ffff7837870 <operationCallEval+48>
   0x00007ffff783786c <+44>:    xor    %eax,%eax
   0x00007ffff783786e <+46>:    retq   
   0x00007ffff783786f <+47>:    nop
   0x00007ffff7837870 <+48>:    mov    0x18(%rax),%rax
   0x00007ffff7837874 <+52>:    mov    0x8(%rax),%ecx
   0x00007ffff7837877 <+55>:    test   %ecx,%ecx
   0x00007ffff7837879 <+57>:    jne    0x7ffff783786c <operationCallEval+44>
   0x00007ffff783787b <+59>:    push   %rbx
   0x00007ffff783787c <+60>:    mov    0x34f6ed(%rip),%rbx        # 0x7ffff7b86f70
   0x00007ffff7837883 <+67>:    cmp    %rbx,0x50(%rax)
   0x00007ffff7837887 <+71>:    jne    0x7ffff78378a5 <operationCallEval+101>
   0x00007ffff7837889 <+73>:    xor    %dx,%dx
   0x00007ffff783788c <+76>:    mov    %rsi,%rdi
   0x00007ffff783788f <+79>:    mov    0x468(%rdx),%rbx
   0x00007ffff7837896 <+86>:    callq  0x7ffff760e790 <_ZN3JSC4evalEPNS_9ExecStateE at plt>
   0x00007ffff783789b <+91>:    cmpq   $0x0,0xbdb0(%rbx)
   0x00007ffff78378a3 <+99>:    je     0x7ffff78378b0 <operationCallEval+112>
   0x00007ffff78378a5 <+101>:    xor    %eax,%eax
   0x00007ffff78378a7 <+103>:    nopw   0x0(%rax,%rax,1)
   0x00007ffff78378b0 <+112>:    pop    %rbx
   0x00007ffff78378b1 <+113>:    retq   
End of assembler dump.

Throwing a simple fprintf() call into the mix, in this case before isHostFunction() call, seems to shift some registers around, and the number of JSC stress test failures drops to 50. Here's the resulting disassembled function:
Dump of assembler code for function operationCallEval:
=> 0x00007ffff78378a0 <+0>:    push   %rbp
   0x00007ffff78378a1 <+1>:    lea    0x26d0b6(%rip),%rdx        # 0x7ffff7aa495e
   0x00007ffff78378a8 <+8>:    push   %rbx
   0x00007ffff78378a9 <+9>:    mov    %rsi,%rbx
   0x00007ffff78378ac <+12>:    sub    $0x8,%rsp
   0x00007ffff78378b0 <+16>:    mov    0x18(%rdi),%rax
   0x00007ffff78378b4 <+20>:    movq   $0x0,0x10(%rsi)
   0x00007ffff78378bc <+28>:    mov    %rax,0x18(%rsi)
   0x00007ffff78378c0 <+32>:    mov    0x34f6a9(%rip),%rax        # 0x7ffff7b86f70
   0x00007ffff78378c7 <+39>:    mov    $0x1,%esi
   0x00007ffff78378cc <+44>:    mov    (%rax),%rdi
   0x00007ffff78378cf <+47>:    xor    %eax,%eax
   0x00007ffff78378d1 <+49>:    callq  0x7ffff760e790 <__fprintf_chk at plt>
   0x00007ffff78378d6 <+54>:    mov    0x20(%rbx),%rax
   0x00007ffff78378da <+58>:    movabs $0xffff000000000002,%rdx
   0x00007ffff78378e4 <+68>:    test   %rdx,%rax
   0x00007ffff78378e7 <+71>:    jne    0x7ffff78378f2 <operationCallEval+82>
   0x00007ffff78378e9 <+73>:    mov    (%rax),%rdx
   0x00007ffff78378ec <+76>:    cmpb   $0x13,0x5c(%rdx)
   0x00007ffff78378f0 <+80>:    je     0x7ffff7837900 <operationCallEval+96>
   0x00007ffff78378f2 <+82>:    add    $0x8,%rsp
   0x00007ffff78378f6 <+86>:    xor    %eax,%eax
   0x00007ffff78378f8 <+88>:    pop    %rbx
   0x00007ffff78378f9 <+89>:    pop    %rbp
   0x00007ffff78378fa <+90>:    retq   
   0x00007ffff78378fb <+91>:    nopl   0x0(%rax,%rax,1)
   0x00007ffff7837900 <+96>:    mov    0x18(%rax),%rax
   0x00007ffff7837904 <+100>:    mov    0x8(%rax),%edx
   0x00007ffff7837907 <+103>:    test   %edx,%edx
   0x00007ffff7837909 <+105>:    jne    0x7ffff78378f2 <operationCallEval+82>
   0x00007ffff783790b <+107>:    mov    0x34f666(%rip),%rcx        # 0x7ffff7b86f78
   0x00007ffff7837912 <+114>:    cmp    %rcx,0x50(%rax)
   0x00007ffff7837916 <+118>:    jne    0x7ffff78378f2 <operationCallEval+82>
   0x00007ffff7837918 <+120>:    mov    0x18(%rbx),%rax
   0x00007ffff783791c <+124>:    mov    %rbx,%rdi
   0x00007ffff783791f <+127>:    xor    %ax,%ax
   0x00007ffff7837922 <+130>:    mov    0x468(%rax),%rbp
   0x00007ffff7837929 <+137>:    callq  0x7ffff760e7a0 <_ZN3JSC4evalEPNS_9ExecStateE at plt>
   0x00007ffff783792e <+142>:    cmpq   $0x0,0xbdb0(%rbp)
   0x00007ffff7837936 <+150>:    jne    0x7ffff78378f2 <operationCallEval+82>
   0x00007ffff7837938 <+152>:    add    $0x8,%rsp
   0x00007ffff783793c <+156>:    pop    %rbx
   0x00007ffff783793d <+157>:    pop    %rbp
   0x00007ffff783793e <+158>:    retq   
End of assembler dump.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


More information about the webkit-unassigned mailing list