Changeset 191625 in webkit


Ignore:
Timestamp:
Oct 27, 2015, 10:48:51 AM (10 years ago)
Author:
msaboff@apple.com
Message:

REGRESSION (r191360): Crash: com.apple.WebKit.WebContent at com.apple.JavaScriptCore: JSC::FTL:: + 386
https://bugs.webkit.org/show_bug.cgi?id=150580

Reviewed by Mark Lam.

Source/JavaScriptCore:

Changed code to box 32 bit integers and booleans arguments when generating the call instead of boxing
them in the shuffler.

The ASSERT in CallFrameShuffler::extendFrameIfNeeded is wrong when called from CallFrameShuffler::spill(),
as we could be making space to spill a register so that we have a spare that we can use for the new
frame's base pointer.

  • ftl/FTLJSTailCall.cpp:

(JSC::FTL::DFG::recoveryFor): Added RELEASE_ASSERT to check that we never see unboxed 32 bit
arguments stored in the stack.

  • ftl/FTLLowerDFGToLLVM.cpp:

(JSC::FTL::DFG::LowerDFGToLLVM::exitValueForTailCall):

  • jit/CallFrameShuffler.cpp:

(JSC::CallFrameShuffler::extendFrameIfNeeded): Removed unneeded ASSERT.

LayoutTests:

New regression test.

  • js/regress-150580-expected.txt: Added.
  • js/regress-150580.html: Added.
  • js/script-tests/regress-150580.js: Added.

(addEmUp):
(sumVector):
(test):

Location:
trunk
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r191623 r191625  
     12015-10-27  Michael Saboff  <msaboff@apple.com>
     2
     3        REGRESSION (r191360): Crash: com.apple.WebKit.WebContent at com.apple.JavaScriptCore: JSC::FTL:: + 386
     4        https://bugs.webkit.org/show_bug.cgi?id=150580
     5
     6        Reviewed by Mark Lam.
     7
     8        New regression test.
     9
     10        * js/regress-150580-expected.txt: Added.
     11        * js/regress-150580.html: Added.
     12        * js/script-tests/regress-150580.js: Added.
     13        (addEmUp):
     14        (sumVector):
     15        (test):
     16
    1172015-10-20  Zalan Bujtas  <zalan@apple.com>
    218
  • trunk/Source/JavaScriptCore/ChangeLog

    r191621 r191625  
     12015-10-27  Michael Saboff  <msaboff@apple.com>
     2
     3        REGRESSION (r191360): Crash: com.apple.WebKit.WebContent at com.apple.JavaScriptCore: JSC::FTL:: + 386
     4        https://bugs.webkit.org/show_bug.cgi?id=150580
     5
     6        Reviewed by Mark Lam.
     7
     8        Changed code to box 32 bit integers and booleans arguments when generating the call instead of boxing
     9        them in the shuffler.
     10
     11        The ASSERT in CallFrameShuffler::extendFrameIfNeeded is wrong when called from CallFrameShuffler::spill(),
     12        as we could be making space to spill a register so that we have a spare that we can use for the new
     13        frame's base pointer.
     14
     15        * ftl/FTLJSTailCall.cpp:
     16        (JSC::FTL::DFG::recoveryFor): Added RELEASE_ASSERT to check that we never see unboxed 32 bit
     17        arguments stored in the stack.
     18        * ftl/FTLLowerDFGToLLVM.cpp:
     19        (JSC::FTL::DFG::LowerDFGToLLVM::exitValueForTailCall):
     20        * jit/CallFrameShuffler.cpp:
     21        (JSC::CallFrameShuffler::extendFrameIfNeeded): Removed unneeded ASSERT.
     22
    1232015-10-26  Yusuke Suzuki  <utatane.tea@gmail.com>
    224
  • trunk/Source/JavaScriptCore/ftl/FTLJSTailCall.cpp

    r191394 r191625  
    7878            RELEASE_ASSERT(location.dwarfReg().reg() == Reg(MacroAssembler::framePointerRegister));
    7979            RELEASE_ASSERT(!(location.offset() % sizeof(void*)));
     80            // DataFormatInt32 and DataFormatBoolean should be already be boxed.
     81            RELEASE_ASSERT(format != DataFormatInt32 && format != DataFormatBoolean);
    8082            return ValueRecovery::displacedInJSStack(VirtualRegister { static_cast<int>(location.offset() / sizeof(void*)) }, format);
    8183
  • trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp

    r191621 r191625  
    90089008        value = m_int32Values.get(node);
    90099009        if (isValid(value))
    9010             return exitArgument(arguments, DataFormatInt32, value.value());
     9010            return exitArgument(arguments, DataFormatJS, boxInt32(value.value()));
    90119011
    90129012        value = m_booleanValues.get(node);
    9013         if (isValid(value)) {
    9014             LValue valueToPass = m_out.zeroExt(value.value(), m_out.int32);
    9015             return exitArgument(arguments, DataFormatBoolean, valueToPass);
    9016         }
     9013        if (isValid(value))
     9014            return exitArgument(arguments, DataFormatJS, boxBoolean(value.value()));
    90179015
    90189016        // Doubles and Int52 have been converted by ValueRep()
  • trunk/Source/JavaScriptCore/jit/CallFrameShuffler.cpp

    r190370 r191625  
    307307{
    308308    ASSERT(!m_didExtendFrame);
    309     ASSERT(!isUndecided());
    310309
    311310    VirtualRegister firstRead { firstOld() };
Note: See TracChangeset for help on using the changeset viewer.