⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 245251 in webkit


Ignore:
Timestamp:
May 13, 2019, 2:34:43 PM (7 years ago)
Author:
sbarati@apple.com
Message:

macro assembler code-pointer tagging has its arguments backwards
https://bugs.webkit.org/show_bug.cgi?id=197677

Reviewed by Michael Saboff.

We had the destination as the leftmost instead of the rightmost argument,
which goes against the convention of how we order arguments in macro assembler
methods.

  • assembler/MacroAssemblerARM64E.h:

(JSC::MacroAssemblerARM64E::tagReturnAddress):
(JSC::MacroAssemblerARM64E::untagReturnAddress):
(JSC::MacroAssemblerARM64E::tagPtr):
(JSC::MacroAssemblerARM64E::untagPtr):

  • dfg/DFGOSRExitCompilerCommon.cpp:

(JSC::DFG::reifyInlinedCallFrames):

  • ftl/FTLThunks.cpp:

(JSC::FTL::genericGenerationThunkGenerator):

  • jit/CCallHelpers.h:

(JSC::CCallHelpers::prepareForTailCallSlow):

  • jit/CallFrameShuffler.cpp:

(JSC::CallFrameShuffler::prepareForTailCall):

  • jit/ThunkGenerators.cpp:

(JSC::emitPointerValidation):
(JSC::arityFixupGenerator):

  • wasm/js/WebAssemblyFunction.cpp:

(JSC::WebAssemblyFunction::jsCallEntrypointSlow):

Location:
trunk/Source/JavaScriptCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r245249 r245251  
     12019-05-13  Saam Barati  <sbarati@apple.com>
     2
     3        macro assembler code-pointer tagging has its arguments backwards
     4        https://bugs.webkit.org/show_bug.cgi?id=197677
     5
     6        Reviewed by Michael Saboff.
     7
     8        We had the destination as the leftmost instead of the rightmost argument,
     9        which goes against the convention of how we order arguments in macro assembler
     10        methods.
     11
     12        * assembler/MacroAssemblerARM64E.h:
     13        (JSC::MacroAssemblerARM64E::tagReturnAddress):
     14        (JSC::MacroAssemblerARM64E::untagReturnAddress):
     15        (JSC::MacroAssemblerARM64E::tagPtr):
     16        (JSC::MacroAssemblerARM64E::untagPtr):
     17        * dfg/DFGOSRExitCompilerCommon.cpp:
     18        (JSC::DFG::reifyInlinedCallFrames):
     19        * ftl/FTLThunks.cpp:
     20        (JSC::FTL::genericGenerationThunkGenerator):
     21        * jit/CCallHelpers.h:
     22        (JSC::CCallHelpers::prepareForTailCallSlow):
     23        * jit/CallFrameShuffler.cpp:
     24        (JSC::CallFrameShuffler::prepareForTailCall):
     25        * jit/ThunkGenerators.cpp:
     26        (JSC::emitPointerValidation):
     27        (JSC::arityFixupGenerator):
     28        * wasm/js/WebAssemblyFunction.cpp:
     29        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
     30
    1312019-05-13  Tadeu Zagallo  <tzagallo@apple.com>
    232
  • trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h

    r239867 r245251  
    978978    ALWAYS_INLINE void untagReturnAddress() { }
    979979
    980     ALWAYS_INLINE void tagPtr(RegisterID, PtrTag) { }
     980    ALWAYS_INLINE void tagPtr(PtrTag, RegisterID) { }
    981981    ALWAYS_INLINE void tagPtr(RegisterID, RegisterID) { }
    982     ALWAYS_INLINE void untagPtr(RegisterID, PtrTag) { }
     982    ALWAYS_INLINE void untagPtr(PtrTag, RegisterID) { }
    983983    ALWAYS_INLINE void untagPtr(RegisterID, RegisterID) { }
    984984    ALWAYS_INLINE void removePtrTag(RegisterID) { }
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h

    r245064 r245251  
    4242    ALWAYS_INLINE void tagReturnAddress()
    4343    {
    44         tagPtr(ARM64Registers::lr, ARM64Registers::sp);
     44        tagPtr(ARM64Registers::sp, ARM64Registers::lr);
    4545    }
    4646
    4747    ALWAYS_INLINE void untagReturnAddress()
    4848    {
    49         untagPtr(ARM64Registers::lr, ARM64Registers::sp);
    50     }
    51 
    52     ALWAYS_INLINE void tagPtr(RegisterID target, PtrTag tag)
     49        untagPtr(ARM64Registers::sp, ARM64Registers::lr);
     50    }
     51
     52    ALWAYS_INLINE void tagPtr(PtrTag tag, RegisterID target)
    5353    {
    5454        auto tagGPR = getCachedDataTempRegisterIDAndInvalidate();
     
    5757    }
    5858
    59     ALWAYS_INLINE void tagPtr(RegisterID target, RegisterID tag)
     59    ALWAYS_INLINE void tagPtr(RegisterID tag, RegisterID target)
    6060    {
    6161        if (target == ARM64Registers::lr && tag == ARM64Registers::sp) {
     
    6666    }
    6767
    68     ALWAYS_INLINE void untagPtr(RegisterID target, PtrTag tag)
     68    ALWAYS_INLINE void untagPtr(PtrTag tag, RegisterID target)
    6969    {
    7070        auto tagGPR = getCachedDataTempRegisterIDAndInvalidate();
     
    7373    }
    7474
    75     ALWAYS_INLINE void untagPtr(RegisterID target, RegisterID tag)
     75    ALWAYS_INLINE void untagPtr(RegisterID tag, RegisterID target)
    7676    {
    7777        m_assembler.autib(target, tag);
  • trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp

    r244764 r245251  
    158158#if CPU(ARM64E)
    159159            jit.addPtr(AssemblyHelpers::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, GPRInfo::regT2);
    160             jit.untagPtr(GPRInfo::regT3, GPRInfo::regT2);
     160            jit.untagPtr(GPRInfo::regT2, GPRInfo::regT3);
    161161            jit.addPtr(AssemblyHelpers::TrustedImm32(inlineCallFrame->returnPCOffset() + sizeof(void*)), GPRInfo::callFrameRegister, GPRInfo::regT2);
    162             jit.tagPtr(GPRInfo::regT3, GPRInfo::regT2);
     162            jit.tagPtr(GPRInfo::regT2, GPRInfo::regT3);
    163163#endif
    164164            jit.storePtr(GPRInfo::regT3, AssemblyHelpers::addressForByteOffset(inlineCallFrame->returnPCOffset()));
     
    210210            jit.addPtr(AssemblyHelpers::TrustedImm32(inlineCallFrame->returnPCOffset() + sizeof(void*)), GPRInfo::callFrameRegister, GPRInfo::regT2);
    211211            jit.move(AssemblyHelpers::TrustedImmPtr(jumpTarget), GPRInfo::nonArgGPR0);
    212             jit.tagPtr(GPRInfo::nonArgGPR0, GPRInfo::regT2);
     212            jit.tagPtr(GPRInfo::regT2, GPRInfo::nonArgGPR0);
    213213            jit.storePtr(GPRInfo::nonArgGPR0, AssemblyHelpers::addressForByteOffset(inlineCallFrame->returnPCOffset()));
    214214#else
  • trunk/Source/JavaScriptCore/ftl/FTLThunks.cpp

    r244764 r245251  
    117117
    118118#if CPU(ARM64E)
    119     jit.untagPtr(AssemblyHelpers::linkRegister, resultTag);
     119    jit.untagPtr(resultTag, AssemblyHelpers::linkRegister);
    120120    jit.tagReturnAddress();
    121121#else
  • trunk/Source/JavaScriptCore/jit/CCallHelpers.h

    r243254 r245251  
    808808#if CPU(ARM64E)
    809809        addPtr(TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister, tempGPR);
    810         untagPtr(linkRegister, tempGPR);
     810        untagPtr(tempGPR, linkRegister);
    811811#endif
    812812#elif CPU(MIPS)
  • trunk/Source/JavaScriptCore/jit/CallFrameShuffler.cpp

    r243254 r245251  
    457457#if CPU(ARM64E)
    458458    m_jit.addPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister);
    459     m_jit.untagPtr(MacroAssembler::linkRegister, MacroAssembler::framePointerRegister);
     459    m_jit.untagPtr(MacroAssembler::framePointerRegister, MacroAssembler::linkRegister);
    460460    m_jit.subPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister);
    461461#endif
  • trunk/Source/JavaScriptCore/jit/ThunkGenerators.cpp

    r243254 r245251  
    5454    isNonZero.link(&jit);
    5555    jit.pushToSave(pointerGPR);
    56     jit.untagPtr(pointerGPR, tag);
     56    jit.untagPtr(tag, pointerGPR);
    5757    jit.load8(pointerGPR, pointerGPR);
    5858    jit.popToRestore(pointerGPR);
     
    460460    jit.loadPtr(JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3);
    461461    jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp);
    462     jit.untagPtr(GPRInfo::regT3, extraTemp);
     462    jit.untagPtr(extraTemp, GPRInfo::regT3);
    463463    PtrTag tempReturnPCTag = static_cast<PtrTag>(random());
    464464    jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp);
    465     jit.tagPtr(GPRInfo::regT3, extraTemp);
     465    jit.tagPtr(extraTemp, GPRInfo::regT3);
    466466    jit.storePtr(GPRInfo::regT3, JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()));
    467467#endif
     
    516516    jit.loadPtr(JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3);
    517517    jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp);
    518     jit.untagPtr(GPRInfo::regT3, extraTemp);
     518    jit.untagPtr(extraTemp, GPRInfo::regT3);
    519519    jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp);
    520     jit.tagPtr(GPRInfo::regT3, extraTemp);
     520    jit.tagPtr(extraTemp, GPRInfo::regT3);
    521521    jit.storePtr(GPRInfo::regT3, JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()));
    522522#endif
  • trunk/Source/JavaScriptCore/wasm/js/WebAssemblyFunction.cpp

    r245064 r245251  
    481481    jit.emitFunctionEpilogue();
    482482#if CPU(ARM64E)
    483     jit.untagPtr(MacroAssembler::linkRegister, MacroAssembler::stackPointerRegister);
     483    jit.untagReturnAddress();
    484484#endif
    485485    auto jumpToHostCallThunk = jit.jump();
Note: See TracChangeset for help on using the changeset viewer.