Modified: trunk/Source/_javascript_Core/ChangeLog (255158 => 255159)
--- trunk/Source/_javascript_Core/ChangeLog 2020-01-27 19:54:41 UTC (rev 255158)
+++ trunk/Source/_javascript_Core/ChangeLog 2020-01-27 20:07:23 UTC (rev 255159)
@@ -1,3 +1,23 @@
+2020-01-27 Jonathan Bedard <[email protected]>
+
+ Fix OpenSource iphoneos arm64e build
+ https://bugs.webkit.org/show_bug.cgi?id=206703
+
+ Reviewed by Yusuke Suzuki.
+
+ * runtime/MachineContext.h:
+ (JSC::MachineContext::stackPointerImpl): Conditionalize function existence on
+ USE(DARWIN_REGISTER_MACROS).
+ (JSC::MachineContext::stackPointer): Use Darwin's register macros if available.
+ (JSC::MachineContext::setStackPointer): Ditto.
+ (JSC::MachineContext::instructionPointerImpl): Conditionalize function existence
+ on USE(DARWIN_REGISTER_MACROS).
+ (JSC::MachineContext::instructionPointer): Use Darwin's register macros if available.
+ (JSC::MachineContext::setInstructionPointer): Ditto.
+ (JSC::MachineContext::linkRegister): Ditto.
+ (JSC::MachineContext::setLinkRegister): Ditto.
+ (JSC::MachineContext::linkRegisterImpl): Deleted.
+
2020-01-27 Paulo Matos <[email protected]>
Remove internal fields in promise assertion for 32bits
Modified: trunk/Source/_javascript_Core/runtime/MachineContext.h (255158 => 255159)
--- trunk/Source/_javascript_Core/runtime/MachineContext.h 2020-01-27 19:54:41 UTC (rev 255158)
+++ trunk/Source/_javascript_Core/runtime/MachineContext.h 2020-01-27 20:07:23 UTC (rev 255159)
@@ -58,9 +58,13 @@
#if HAVE(MACHINE_CONTEXT)
#if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
+
+#if !USE(DARWIN_REGISTER_MACROS)
static inline void*& stackPointerImpl(mcontext_t&);
+static inline void*& instructionPointerImpl(mcontext_t&);
+#endif // !USE(DARWIN_REGISTER_MACROS)
+
static inline void*& framePointerImpl(mcontext_t&);
-static inline void*& instructionPointerImpl(mcontext_t&);
#endif // !USE(PLATFORM_REGISTERS_WITH_PROFILE)
template<typename T = void*> T stackPointer(const mcontext_t&);
@@ -81,7 +85,7 @@
#if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
-#if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
+#if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS)
static inline void*& stackPointerImpl(PlatformRegisters& regs)
{
#if OS(DARWIN)
@@ -93,8 +97,6 @@
return reinterpret_cast<void*&>(regs.__rsp);
#elif CPU(PPC) || CPU(PPC64)
return reinterpret_cast<void*&>(regs.__r1);
-#elif CPU(ARM_THUMB2) || CPU(ARM) || CPU(ARM64)
- return reinterpret_cast<void*&>(regs.__sp);
#else
#error Unknown Architecture
#endif
@@ -140,6 +142,8 @@
void* value = WTF_READ_PLATFORM_REGISTERS_SP_WITH_PROFILE(regs);
assertIsNotTagged(value);
return bitwise_cast<T>(value);
+#elif USE(DARWIN_REGISTER_MACROS)
+ return bitwise_cast<T>(__darwin_arm_thread_state64_get_sp(regs));
#else
return bitwise_cast<T>(stackPointerImpl(const_cast<PlatformRegisters&>(regs)));
#endif
@@ -151,6 +155,8 @@
#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
assertIsNotTagged(bitwise_cast<void*>(value));
WTF_WRITE_PLATFORM_REGISTERS_SP_WITH_PROFILE(regs, bitwise_cast<void*>(value));
+#elif USE(DARWIN_REGISTER_MACROS)
+ __darwin_arm_thread_state64_set_sp(regs, value);
#else
stackPointerImpl(regs) = bitwise_cast<void*>(value);
#endif
@@ -167,7 +173,7 @@
#if HAVE(MACHINE_CONTEXT)
-#if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
+#if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS)
static inline void*& stackPointerImpl(mcontext_t& machineContext)
{
#if OS(DARWIN)
@@ -214,6 +220,8 @@
void* value = WTF_READ_MACHINE_CONTEXT_SP_WITH_PROFILE(machineContext);
assertIsNotTagged(value);
return bitwise_cast<T>(value);
+#elif USE(DARWIN_REGISTER_MACROS)
+ return stackPointer(machineContext->__ss);
#else
return bitwise_cast<T>(stackPointerImpl(const_cast<mcontext_t&>(machineContext)));
#endif
@@ -225,6 +233,8 @@
#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
assertIsNotTagged(bitwise_cast<void*>(value));
WTF_WRITE_MACHINE_CONTEXT_SP_WITH_PROFILE(machineContext, bitwise_cast<void*>(value));
+#elif USE(DARWIN_REGISTER_MACROS)
+ return setStackPointer(machineContext->__ss, value);
#else
stackPointerImpl(machineContext) = bitwise_cast<void*>(value);
#endif
@@ -385,7 +395,7 @@
#if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
-#if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
+#if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS)
static inline void*& instructionPointerImpl(PlatformRegisters& regs)
{
#if OS(DARWIN)
@@ -395,8 +405,6 @@
return reinterpret_cast<void*&>(regs.__eip);
#elif CPU(X86_64)
return reinterpret_cast<void*&>(regs.__rip);
-#elif CPU(ARM_THUMB2) || CPU(ARM) || CPU(ARM64)
- return reinterpret_cast<void*&>(regs.__pc);
#else
#error Unknown Architecture
#endif
@@ -436,6 +444,8 @@
{
#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
void* value = WTF_READ_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs);
+#elif USE(DARWIN_REGISTER_MACROS)
+ void* value = __darwin_arm_thread_state64_get_pc_fptr(regs);
#else
void* value = instructionPointerImpl(const_cast<PlatformRegisters&>(regs));
#endif
@@ -452,6 +462,8 @@
{
#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
WTF_WRITE_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs, value.executableAddress());
+#elif USE(DARWIN_REGISTER_MACROS)
+ __darwin_arm_thread_state64_set_pc_fptr(regs, value.executableAddress());
#else
instructionPointerImpl(regs) = value.executableAddress();
#endif
@@ -461,7 +473,7 @@
#if HAVE(MACHINE_CONTEXT)
-#if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
+#if !USE(PLATFORM_REGISTERS_WITH_PROFILE) && !USE(DARWIN_REGISTER_MACROS)
static inline void*& instructionPointerImpl(mcontext_t& machineContext)
{
#if OS(DARWIN)
@@ -507,12 +519,18 @@
inline MacroAssemblerCodePtr<PlatformRegistersPCPtrTag> instructionPointer(const mcontext_t& machineContext)
{
+#if USE(DARWIN_REGISTER_MACROS)
+ return *instructionPointer(machineContext->__ss);
+#else
+
#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
void* value = WTF_READ_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext);
#else
void* value = instructionPointerImpl(const_cast<mcontext_t&>(machineContext));
#endif
+
return MacroAssemblerCodePtr<PlatformRegistersPCPtrTag>(value);
+#endif
}
inline void setInstructionPointer(mcontext_t& machineContext, MacroAssemblerCodePtr<CFunctionPtrTag> value)
@@ -519,6 +537,8 @@
{
#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
WTF_WRITE_MACHINE_CONTEXT_PC_WITH_PROFILE(machineContext, value.executableAddress());
+#elif USE(DARWIN_REGISTER_MACROS)
+ setInstructionPointer(machineContext->__ss, value);
#else
instructionPointerImpl(machineContext) = value.executableAddress();
#endif
@@ -529,20 +549,13 @@
#if OS(WINDOWS) || HAVE(MACHINE_CONTEXT)
#if OS(DARWIN) && __DARWIN_UNIX03 && CPU(ARM64)
-#if !USE(PLATFORM_REGISTERS_WITH_PROFILE)
-inline void*& linkRegisterImpl(PlatformRegisters& regs)
-{
- return reinterpret_cast<void*&>(regs.__lr);
-}
-#endif // USE(PLATFORM_REGISTERS_WITH_PROFILE)
-
inline MacroAssemblerCodePtr<PlatformRegistersLRPtrTag> linkRegister(const PlatformRegisters& regs)
{
#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
void* value = WTF_READ_PLATFORM_REGISTERS_LR_WITH_PROFILE(regs);
#else
- void* value = linkRegisterImpl(const_cast<PlatformRegisters&>(regs));
+ void* value = __darwin_arm_thread_state64_get_lr_fptr(regs);
#endif
return MacroAssemblerCodePtr<PlatformRegistersLRPtrTag>(value);
}
@@ -552,7 +565,7 @@
#if USE(PLATFORM_REGISTERS_WITH_PROFILE)
WTF_WRITE_PLATFORM_REGISTERS_PC_WITH_PROFILE(regs, value.executableAddress());
#else
- linkRegisterImpl(regs) = value.executableAddress();
+ __darwin_arm_thread_state64_set_lr_fptr(regs, value.executableAddress());
#endif
}
#endif // OS(DARWIN) && __DARWIN_UNIX03 && CPU(ARM64)
Modified: trunk/Source/WTF/ChangeLog (255158 => 255159)
--- trunk/Source/WTF/ChangeLog 2020-01-27 19:54:41 UTC (rev 255158)
+++ trunk/Source/WTF/ChangeLog 2020-01-27 20:07:23 UTC (rev 255159)
@@ -1,3 +1,12 @@
+2020-01-27 Jonathan Bedard <[email protected]>
+
+ Fix OpenSource iphoneos arm64e build
+ https://bugs.webkit.org/show_bug.cgi?id=206703
+
+ Reviewed by Yusuke Suzuki.
+
+ * wtf/PlatformUse.h: Add USE(DARWIN_REGISTER_MACROS) check.
+
2020-01-27 Mark Lam <[email protected]>
Make getVTablePointer() an inline function to be compliant with WebKit style guidelines.
Modified: trunk/Source/WTF/wtf/PlatformUse.h (255158 => 255159)
--- trunk/Source/WTF/wtf/PlatformUse.h 2020-01-27 19:54:41 UTC (rev 255158)
+++ trunk/Source/WTF/wtf/PlatformUse.h 2020-01-27 20:07:23 UTC (rev 255159)
@@ -307,3 +307,7 @@
#if PLATFORM(IOS_FAMILY) || (!(defined(USE_SYSTEM_MALLOC) && USE_SYSTEM_MALLOC) && (OS(LINUX) && (PLATFORM(GTK) || PLATFORM(WPE))))
#define USE_BMALLOC_MEMORY_FOOTPRINT_API 1
#endif
+
+#if OS(DARWIN) && !USE(PLATFORM_REGISTERS_WITH_PROFILE) && (CPU(ARM_THUMB2) || CPU(ARM) || CPU(ARM64))
+#define USE_DARWIN_REGISTER_MACROS 1
+#endif