Changeset 196368 in webkit


Ignore:
Timestamp:
Feb 10, 2016 9:50:07 AM (8 years ago)
Author:
Csaba Osztrogonác
Message:

REGRESSION(r196331): It made ~180 JSC tests crash on ARMv7 Linux
https://bugs.webkit.org/show_bug.cgi?id=154064

Reviewed by Mark Lam.

  • bytecode/PolymorphicAccess.cpp:

(JSC::AccessCase::generate): Added EABI_32BIT_DUMMY_ARG where it is necessary.

  • dfg/DFGSpeculativeJIT.h: Fixed the comment.
  • jit/CCallHelpers.h:

(JSC::CCallHelpers::setupArgumentsWithExecState): Added.

  • wasm/WASMFunctionCompiler.h: Fixed the comment.
Location:
trunk/Source/JavaScriptCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r196361 r196368  
     12016-02-10  Csaba Osztrogonác  <ossy@webkit.org>
     2
     3        REGRESSION(r196331): It made ~180 JSC tests crash on ARMv7 Linux
     4        https://bugs.webkit.org/show_bug.cgi?id=154064
     5
     6        Reviewed by Mark Lam.
     7
     8        * bytecode/PolymorphicAccess.cpp:
     9        (JSC::AccessCase::generate): Added EABI_32BIT_DUMMY_ARG where it is necessary.
     10        * dfg/DFGSpeculativeJIT.h: Fixed the comment.
     11        * jit/CCallHelpers.h:
     12        (JSC::CCallHelpers::setupArgumentsWithExecState): Added.
     13        * wasm/WASMFunctionCompiler.h: Fixed the comment.
     14
    1152016-02-09  Keith Miller  <keith_miller@apple.com>
    216
  • trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp

    r196331 r196368  
    462462}
    463463
     464// EncodedJSValue in JSVALUE32_64 is a 64-bit integer. When being compiled in ARM EABI, it must be aligned on an even-numbered register (r0, r2 or [sp]).
     465// To prevent the assembler from using wrong registers, let's occupy r1 or r3 with a dummy argument when necessary.
     466#if (COMPILER_SUPPORTS(EABI) && CPU(ARM)) || CPU(MIPS)
     467#define EABI_32BIT_DUMMY_ARG      CCallHelpers::TrustedImm32(0),
     468#else
     469#define EABI_32BIT_DUMMY_ARG
     470#endif
     471
    464472void AccessCase::generate(AccessGenerationState& state)
    465473{
     
    767775            if (m_type == CustomValueGetter || m_type == CustomAccessorGetter) {
    768776                jit.setupArgumentsWithExecState(
    769                     baseForCustomValue,
     777                    EABI_32BIT_DUMMY_ARG baseForCustomValue,
    770778                    CCallHelpers::TrustedImm32(JSValue::CellTag),
    771779                    CCallHelpers::TrustedImmPtr(ident.impl()));
    772780            } else {
    773781                jit.setupArgumentsWithExecState(
    774                     baseForCustomValue,
     782                    EABI_32BIT_DUMMY_ARG baseForCustomValue,
    775783                    CCallHelpers::TrustedImm32(JSValue::CellTag),
    776784                    valueRegs.payloadGPR(), valueRegs.tagGPR());
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h

    r195865 r196368  
    15501550#else // USE(JSVALUE32_64)
    15511551
    1552 // EncodedJSValue in JSVALUE32_64 is a 64-bit integer. When being compiled in ARM EABI, it must be aligned even-numbered register (r0, r2 or [sp]).
    1553 // To avoid assemblies from using wrong registers, let's occupy r1 or r3 with a dummy argument when necessary.
     1552// EncodedJSValue in JSVALUE32_64 is a 64-bit integer. When being compiled in ARM EABI, it must be aligned on an even-numbered register (r0, r2 or [sp]).
     1553// To prevent the assembler from using wrong registers, let's occupy r1 or r3 with a dummy argument when necessary.
    15541554#if (COMPILER_SUPPORTS(EABI) && CPU(ARM)) || CPU(MIPS)
    15551555#define EABI_32BIT_DUMMY_ARG      TrustedImm32(0),
  • trunk/Source/JavaScriptCore/jit/CCallHelpers.h

    r196331 r196368  
    17301730    }
    17311731
     1732    ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, TrustedImm32 arg3, GPRReg arg4, GPRReg arg5)
     1733    {
     1734        poke(arg5, POKE_ARGUMENT_OFFSET + 1);
     1735        poke(arg4, POKE_ARGUMENT_OFFSET);
     1736        setupArgumentsWithExecState(arg1, arg2, arg3);
     1737    }
     1738
    17321739    ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, TrustedImmPtr arg2, GPRReg arg3, GPRReg arg4)
    17331740    {
  • trunk/Source/JavaScriptCore/wasm/WASMFunctionCompiler.h

    r192295 r196368  
    12881288    }
    12891289#else
    1290     // EncodedJSValue in JSVALUE32_64 is a 64-bit integer. When being compiled in ARM EABI, it must be aligned even-numbered register (r0, r2 or [sp]).
    1291     // To avoid assemblies from using wrong registers, let's occupy r1 or r3 with a dummy argument when necessary.
     1290// EncodedJSValue in JSVALUE32_64 is a 64-bit integer. When being compiled in ARM EABI, it must be aligned on an even-numbered register (r0, r2 or [sp]).
     1291// To prevent the assembler from using wrong registers, let's occupy r1 or r3 with a dummy argument when necessary.
    12921292#if (COMPILER_SUPPORTS(EABI) && CPU(ARM)) || CPU(MIPS)
    12931293#define EABI_32BIT_DUMMY_ARG      TrustedImm32(0),
Note: See TracChangeset for help on using the changeset viewer.