Title: [234649] trunk/Source/_javascript_Core
Revision
234649
Author
mark....@apple.com
Date
2018-08-07 06:11:49 -0700 (Tue, 07 Aug 2018)

Log Message

Use a more specific PtrTag for PlatformRegisters PC and LR.
https://bugs.webkit.org/show_bug.cgi?id=188366
<rdar://problem/42984123>

Reviewed by Keith Miller.

Also fixed a bug in linkRegister(), which was previously returning the PC instead
of LR.  It now returns LR.

* runtime/JSCPtrTag.h:
* runtime/MachineContext.h:
(JSC::MachineContext::instructionPointer):
(JSC::MachineContext::linkRegister):
* runtime/VMTraps.cpp:
(JSC::SignalContext::SignalContext):
* tools/SigillCrashAnalyzer.cpp:
(JSC::SignalContext::SignalContext):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (234648 => 234649)


--- trunk/Source/_javascript_Core/ChangeLog	2018-08-07 12:50:23 UTC (rev 234648)
+++ trunk/Source/_javascript_Core/ChangeLog	2018-08-07 13:11:49 UTC (rev 234649)
@@ -1,3 +1,23 @@
+2018-08-07  Mark Lam  <mark....@apple.com>
+
+        Use a more specific PtrTag for PlatformRegisters PC and LR.
+        https://bugs.webkit.org/show_bug.cgi?id=188366
+        <rdar://problem/42984123>
+
+        Reviewed by Keith Miller.
+
+        Also fixed a bug in linkRegister(), which was previously returning the PC instead
+        of LR.  It now returns LR.
+
+        * runtime/JSCPtrTag.h:
+        * runtime/MachineContext.h:
+        (JSC::MachineContext::instructionPointer):
+        (JSC::MachineContext::linkRegister):
+        * runtime/VMTraps.cpp:
+        (JSC::SignalContext::SignalContext):
+        * tools/SigillCrashAnalyzer.cpp:
+        (JSC::SignalContext::SignalContext):
+
 2018-08-07  Karo Gyoker  <karogyoker2+web...@gmail.com>
 
         Hardcoded LFENCE instruction

Modified: trunk/Source/_javascript_Core/runtime/JSCPtrTag.h (234648 => 234649)


--- trunk/Source/_javascript_Core/runtime/JSCPtrTag.h	2018-08-07 12:50:23 UTC (rev 234648)
+++ trunk/Source/_javascript_Core/runtime/JSCPtrTag.h	2018-08-07 13:11:49 UTC (rev 234649)
@@ -46,6 +46,8 @@
     v(LinkBufferPtrTag) \
     v(OperationPtrTag) \
     v(OSRExitPtrTag) \
+    v(PlatformRegistersLRPtrTag) \
+    v(PlatformRegistersPCPtrTag) \
     v(SlowPathPtrTag) \
     v(WasmEntryPtrTag) \
     v(Yarr8BitPtrTag) \

Modified: trunk/Source/_javascript_Core/runtime/MachineContext.h (234648 => 234649)


--- trunk/Source/_javascript_Core/runtime/MachineContext.h	2018-08-07 12:50:23 UTC (rev 234648)
+++ trunk/Source/_javascript_Core/runtime/MachineContext.h	2018-08-07 13:11:49 UTC (rev 234649)
@@ -43,9 +43,9 @@
 template<typename T = void*> void setStackPointer(PlatformRegisters&, T);
 template<typename T = void*> T framePointer(const PlatformRegisters&);
 template<typename T = void*> void setFramePointer(PlatformRegisters&, T);
-inline MacroAssemblerCodePtr<CFunctionPtrTag> linkRegister(const PlatformRegisters&);
+inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters&);
 inline void setLinkRegister(PlatformRegisters&, MacroAssemblerCodePtr<CFunctionPtrTag>);
-inline std::optional<MacroAssemblerCodePtr<CFunctionPtrTag>> instructionPointer(const PlatformRegisters&);
+inline std::optional<MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>> instructionPointer(const PlatformRegisters&);
 inline void setInstructionPointer(PlatformRegisters&, MacroAssemblerCodePtr<CFunctionPtrTag>);
 
 template<size_t N> void*& argumentPointer(PlatformRegisters&);
@@ -67,7 +67,7 @@
 template<typename T = void*> void setStackPointer(mcontext_t&, T);
 template<typename T = void*> T framePointer(const mcontext_t&);
 template<typename T = void*> void setFramePointer(mcontext_t&, T);
-inline MacroAssemblerCodePtr<CFunctionPtrTag> instructionPointer(const mcontext_t&);
+inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t&);
 inline void setInstructionPointer(mcontext_t&, MacroAssemblerCodePtr<CFunctionPtrTag>);
 
 template<size_t N> void*& argumentPointer(mcontext_t&);
@@ -432,7 +432,7 @@
 }
 #endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE)
 
-inline std::optional<MacroAssemblerCodePtr<CFunctionPtrTag>> instructionPointer(const PlatformRegisters& regs)
+inline std::optional<MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>> instructionPointer(const PlatformRegisters& regs)
 {
 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
     void* value = WTF_READ_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs);
@@ -440,11 +440,11 @@
     void* value = instructionPointerImpl(const_cast<PlatformRegisters&>(regs));
 #endif
     if (!value)
-        return MacroAssemblerCodePtr<CFunctionPtrTag>(nullptr);
+        return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(nullptr);
     if (!usesPointerTagging())
-        return MacroAssemblerCodePtr<CFunctionPtrTag>(value);
-    if (isTaggedWith(value, CFunctionPtrTag))
-        return MacroAssemblerCodePtr<CFunctionPtrTag>(value);
+        return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value);
+    if (isTaggedWith(value, PlatformRegistersPCPtrTag))
+        return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value);
     return std::nullopt;
 }
 
@@ -505,7 +505,7 @@
 }
 #endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE)
 
-inline MacroAssemblerCodePtr<CFunctionPtrTag> instructionPointer(const mcontext_t& machineContext)
+inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t& machineContext)
 {
 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
     void* value = WTF_READ_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext);
@@ -512,7 +512,7 @@
 #else
     void* value = instructionPointerImpl(const_cast<mcontext_t&>(machineContext));
 #endif
-    return MacroAssemblerCodePtr<CFunctionPtrTag>(value);
+    return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value);
 }
 
 inline void setInstructionPointer(mcontext_t& machineContext, MacroAssemblerCodePtr<CFunctionPtrTag> value)
@@ -537,14 +537,14 @@
 #endif // USE(PLATFORM_REGISTERS_WITH_PROFILE)
 
 
-inline MacroAssemblerCodePtr<CFunctionPtrTag> linkRegister(const PlatformRegisters& regs)
+inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters& regs)
 {
 #if USE(PLATFORM_REGISTERS_WITH_PROFILE)
-    void* value = WTF_READ_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs);
+    void* value = WTF_READ_PLATFORM_REGISTERS_LR_WITH_PROFILE(regs);
 #else
     void* value = linkRegisterImpl(const_cast<PlatformRegisters&>(regs));
 #endif
-    return MacroAssemblerCodePtr<CFunctionPtrTag>(value);
+    return MacroAssemblerCodePtr<PlatformRegistersLRPtrTag>(value);
 }
 
 inline void setLinkRegister(PlatformRegisters& regs, MacroAssemblerCodePtr<CFunctionPtrTag> value)

Modified: trunk/Source/_javascript_Core/runtime/VMTraps.cpp (234648 => 234649)


--- trunk/Source/_javascript_Core/runtime/VMTraps.cpp	2018-08-07 12:50:23 UTC (rev 234648)
+++ trunk/Source/_javascript_Core/runtime/VMTraps.cpp	2018-08-07 13:11:49 UTC (rev 234649)
@@ -56,7 +56,7 @@
 
 struct SignalContext {
 private:
-    SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<CFunctionPtrTag> trapPC)
+    SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> trapPC)
         : registers(registers)
         , trapPC(trapPC)
         , stackPointer(MachineContext::stackPointer(registers))
@@ -73,7 +73,7 @@
     }
 
     PlatformRegisters& registers;
-    MacroAssemblerCodePtr<CFunctionPtrTag> trapPC;
+    MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> trapPC;
     void* stackPointer;
     void* framePointer;
 };

Modified: trunk/Source/_javascript_Core/tools/SigillCrashAnalyzer.cpp (234648 => 234649)


--- trunk/Source/_javascript_Core/tools/SigillCrashAnalyzer.cpp	2018-08-07 12:50:23 UTC (rev 234648)
+++ trunk/Source/_javascript_Core/tools/SigillCrashAnalyzer.cpp	2018-08-07 13:11:49 UTC (rev 234649)
@@ -79,7 +79,7 @@
 
 struct SignalContext {
 private:
-    SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<CFunctionPtrTag> machinePC)
+    SignalContext(PlatformRegisters& registers, MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC)
         : registers(registers)
         , machinePC(machinePC)
         , stackPointer(MachineContext::stackPointer(registers))
@@ -148,7 +148,7 @@
     }
 
     PlatformRegisters& registers;
-    MacroAssemblerCodePtr<CFunctionPtrTag> machinePC;
+    MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC;
     void* stackPointer;
     void* framePointer;
 };
@@ -181,7 +181,7 @@
 
     void dump() { }
 
-    MacroAssemblerCodePtr<CFunctionPtrTag> machinePC;
+    MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> machinePC;
     void* stackPointer;
     void* framePointer;
 };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to