- 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;
};