Title: [255159] trunk/Source
Revision
255159
Author
[email protected]
Date
2020-01-27 12:07:23 -0800 (Mon, 27 Jan 2020)

Log Message

Fix OpenSource iphoneos arm64e build
https://bugs.webkit.org/show_bug.cgi?id=206703

Reviewed by Yusuke Suzuki.

Source/_javascript_Core:

* 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.

Source/WTF:

* wtf/PlatformUse.h: Add USE(DARWIN_REGISTER_MACROS) check.

Modified Paths

Diff

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
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to