Title: [245251] trunk/Source/_javascript_Core
Revision
245251
Author
[email protected]
Date
2019-05-13 14:34:43 -0700 (Mon, 13 May 2019)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (245250 => 245251)


--- trunk/Source/_javascript_Core/ChangeLog	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/ChangeLog	2019-05-13 21:34:43 UTC (rev 245251)
@@ -1,3 +1,33 @@
+2019-05-13  Saam Barati  <[email protected]>
+
+        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):
+
 2019-05-13  Tadeu Zagallo  <[email protected]>
 
         JSObject::getOwnPropertyDescriptor is missing an exception check

Modified: trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h (245250 => 245251)


--- trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h	2019-05-13 21:34:43 UTC (rev 245251)
@@ -977,9 +977,9 @@
     ALWAYS_INLINE void tagReturnAddress() { }
     ALWAYS_INLINE void untagReturnAddress() { }
 
-    ALWAYS_INLINE void tagPtr(RegisterID, PtrTag) { }
+    ALWAYS_INLINE void tagPtr(PtrTag, RegisterID) { }
     ALWAYS_INLINE void tagPtr(RegisterID, RegisterID) { }
-    ALWAYS_INLINE void untagPtr(RegisterID, PtrTag) { }
+    ALWAYS_INLINE void untagPtr(PtrTag, RegisterID) { }
     ALWAYS_INLINE void untagPtr(RegisterID, RegisterID) { }
     ALWAYS_INLINE void removePtrTag(RegisterID) { }
 

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64E.h (245250 => 245251)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64E.h	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64E.h	2019-05-13 21:34:43 UTC (rev 245251)
@@ -41,15 +41,15 @@
 public:
     ALWAYS_INLINE void tagReturnAddress()
     {
-        tagPtr(ARM64Registers::lr, ARM64Registers::sp);
+        tagPtr(ARM64Registers::sp, ARM64Registers::lr);
     }
 
     ALWAYS_INLINE void untagReturnAddress()
     {
-        untagPtr(ARM64Registers::lr, ARM64Registers::sp);
+        untagPtr(ARM64Registers::sp, ARM64Registers::lr);
     }
 
-    ALWAYS_INLINE void tagPtr(RegisterID target, PtrTag tag)
+    ALWAYS_INLINE void tagPtr(PtrTag tag, RegisterID target)
     {
         auto tagGPR = getCachedDataTempRegisterIDAndInvalidate();
         move(TrustedImm64(tag), tagGPR);
@@ -56,7 +56,7 @@
         m_assembler.pacib(target, tagGPR);
     }
 
-    ALWAYS_INLINE void tagPtr(RegisterID target, RegisterID tag)
+    ALWAYS_INLINE void tagPtr(RegisterID tag, RegisterID target)
     {
         if (target == ARM64Registers::lr && tag == ARM64Registers::sp) {
             m_assembler.pacibsp();
@@ -65,7 +65,7 @@
         m_assembler.pacib(target, tag);
     }
 
-    ALWAYS_INLINE void untagPtr(RegisterID target, PtrTag tag)
+    ALWAYS_INLINE void untagPtr(PtrTag tag, RegisterID target)
     {
         auto tagGPR = getCachedDataTempRegisterIDAndInvalidate();
         move(TrustedImm64(tag), tagGPR);
@@ -72,7 +72,7 @@
         m_assembler.autib(target, tagGPR);
     }
 
-    ALWAYS_INLINE void untagPtr(RegisterID target, RegisterID tag)
+    ALWAYS_INLINE void untagPtr(RegisterID tag, RegisterID target)
     {
         m_assembler.autib(target, tag);
     }

Modified: trunk/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp (245250 => 245251)


--- trunk/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/dfg/DFGOSRExitCompilerCommon.cpp	2019-05-13 21:34:43 UTC (rev 245251)
@@ -157,9 +157,9 @@
             jit.loadPtr(AssemblyHelpers::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3);
 #if CPU(ARM64E)
             jit.addPtr(AssemblyHelpers::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, GPRInfo::regT2);
-            jit.untagPtr(GPRInfo::regT3, GPRInfo::regT2);
+            jit.untagPtr(GPRInfo::regT2, GPRInfo::regT3);
             jit.addPtr(AssemblyHelpers::TrustedImm32(inlineCallFrame->returnPCOffset() + sizeof(void*)), GPRInfo::callFrameRegister, GPRInfo::regT2);
-            jit.tagPtr(GPRInfo::regT3, GPRInfo::regT2);
+            jit.tagPtr(GPRInfo::regT2, GPRInfo::regT3);
 #endif
             jit.storePtr(GPRInfo::regT3, AssemblyHelpers::addressForByteOffset(inlineCallFrame->returnPCOffset()));
             jit.loadPtr(AssemblyHelpers::Address(GPRInfo::callFrameRegister, CallFrame::callerFrameOffset()), GPRInfo::regT3);
@@ -209,7 +209,7 @@
 #if CPU(ARM64E)
             jit.addPtr(AssemblyHelpers::TrustedImm32(inlineCallFrame->returnPCOffset() + sizeof(void*)), GPRInfo::callFrameRegister, GPRInfo::regT2);
             jit.move(AssemblyHelpers::TrustedImmPtr(jumpTarget), GPRInfo::nonArgGPR0);
-            jit.tagPtr(GPRInfo::nonArgGPR0, GPRInfo::regT2);
+            jit.tagPtr(GPRInfo::regT2, GPRInfo::nonArgGPR0);
             jit.storePtr(GPRInfo::nonArgGPR0, AssemblyHelpers::addressForByteOffset(inlineCallFrame->returnPCOffset()));
 #else
             jit.storePtr(AssemblyHelpers::TrustedImmPtr(jumpTarget), AssemblyHelpers::addressForByteOffset(inlineCallFrame->returnPCOffset()));

Modified: trunk/Source/_javascript_Core/ftl/FTLThunks.cpp (245250 => 245251)


--- trunk/Source/_javascript_Core/ftl/FTLThunks.cpp	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/ftl/FTLThunks.cpp	2019-05-13 21:34:43 UTC (rev 245251)
@@ -116,7 +116,7 @@
     restoreAllRegisters(jit, buffer);
 
 #if CPU(ARM64E)
-    jit.untagPtr(AssemblyHelpers::linkRegister, resultTag);
+    jit.untagPtr(resultTag, AssemblyHelpers::linkRegister);
     jit.tagReturnAddress();
 #else
     UNUSED_PARAM(resultTag);

Modified: trunk/Source/_javascript_Core/jit/CCallHelpers.h (245250 => 245251)


--- trunk/Source/_javascript_Core/jit/CCallHelpers.h	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/jit/CCallHelpers.h	2019-05-13 21:34:43 UTC (rev 245251)
@@ -807,7 +807,7 @@
         subPtr(TrustedImm32(2 * sizeof(void*)), newFrameSizeGPR);
 #if CPU(ARM64E)
         addPtr(TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister, tempGPR);
-        untagPtr(linkRegister, tempGPR);
+        untagPtr(tempGPR, linkRegister);
 #endif
 #elif CPU(MIPS)
         loadPtr(Address(framePointerRegister, sizeof(void*)), returnAddressRegister);

Modified: trunk/Source/_javascript_Core/jit/CallFrameShuffler.cpp (245250 => 245251)


--- trunk/Source/_javascript_Core/jit/CallFrameShuffler.cpp	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/jit/CallFrameShuffler.cpp	2019-05-13 21:34:43 UTC (rev 245251)
@@ -456,7 +456,7 @@
         MacroAssembler::linkRegister);
 #if CPU(ARM64E)
     m_jit.addPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister);
-    m_jit.untagPtr(MacroAssembler::linkRegister, MacroAssembler::framePointerRegister);
+    m_jit.untagPtr(MacroAssembler::framePointerRegister, MacroAssembler::linkRegister);
     m_jit.subPtr(MacroAssembler::TrustedImm32(sizeof(CallerFrameAndPC)), MacroAssembler::framePointerRegister);
 #endif
 

Modified: trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp (245250 => 245251)


--- trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/jit/ThunkGenerators.cpp	2019-05-13 21:34:43 UTC (rev 245251)
@@ -53,7 +53,7 @@
     jit.abortWithReason(TGInvalidPointer);
     isNonZero.link(&jit);
     jit.pushToSave(pointerGPR);
-    jit.untagPtr(pointerGPR, tag);
+    jit.untagPtr(tag, pointerGPR);
     jit.load8(pointerGPR, pointerGPR);
     jit.popToRestore(pointerGPR);
 }
@@ -459,10 +459,10 @@
 #if CPU(ARM64E)
     jit.loadPtr(JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3);
     jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp);
-    jit.untagPtr(GPRInfo::regT3, extraTemp);
+    jit.untagPtr(extraTemp, GPRInfo::regT3);
     PtrTag tempReturnPCTag = static_cast<PtrTag>(random());
     jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp);
-    jit.tagPtr(GPRInfo::regT3, extraTemp);
+    jit.tagPtr(extraTemp, GPRInfo::regT3);
     jit.storePtr(GPRInfo::regT3, JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()));
 #endif
     jit.move(JSInterfaceJIT::callFrameRegister, JSInterfaceJIT::regT3);
@@ -515,9 +515,9 @@
 #if CPU(ARM64E)
     jit.loadPtr(JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()), GPRInfo::regT3);
     jit.move(JSInterfaceJIT::TrustedImmPtr(tempReturnPCTag), extraTemp);
-    jit.untagPtr(GPRInfo::regT3, extraTemp);
+    jit.untagPtr(extraTemp, GPRInfo::regT3);
     jit.addPtr(JSInterfaceJIT::TrustedImm32(sizeof(CallerFrameAndPC)), GPRInfo::callFrameRegister, extraTemp);
-    jit.tagPtr(GPRInfo::regT3, extraTemp);
+    jit.tagPtr(extraTemp, GPRInfo::regT3);
     jit.storePtr(GPRInfo::regT3, JSInterfaceJIT::Address(GPRInfo::callFrameRegister, CallFrame::returnPCOffset()));
 #endif
 

Modified: trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp (245250 => 245251)


--- trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp	2019-05-13 21:06:56 UTC (rev 245250)
+++ trunk/Source/_javascript_Core/wasm/js/WebAssemblyFunction.cpp	2019-05-13 21:34:43 UTC (rev 245251)
@@ -480,7 +480,7 @@
     jit.move(CCallHelpers::TrustedImmPtr(this), GPRInfo::regT0);
     jit.emitFunctionEpilogue();
 #if CPU(ARM64E)
-    jit.untagPtr(MacroAssembler::linkRegister, MacroAssembler::stackPointerRegister);
+    jit.untagReturnAddress();
 #endif
     auto jumpToHostCallThunk = jit.jump();
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to