$OpenBSD: patch-Source_JavaScriptCore_runtime_MachineContext_h,v 1.4 2018/09/04 07:12:47 ajacoutot Exp $

Index: Source/JavaScriptCore/runtime/MachineContext.h
--- Source/JavaScriptCore/runtime/MachineContext.h.orig
+++ Source/JavaScriptCore/runtime/MachineContext.h
@@ -188,6 +188,24 @@ static inline void*& stackPointerImpl(mcontext_t& mach
 #error Unknown Architecture
 #endif
 
+#elif OS(OPENBSD)
+
+#if CPU(X86)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_esp);
+#elif CPU(X86_64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_rsp);
+#elif CPU(ARM) 
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.__gregs[_REG_SP]);
+#elif CPU(ARM64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_sp);
+#elif CPU(MIPS)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[29]);
+#elif CPU(SPARC64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_rsp);
+#else
+#error Unknown Architecture
+#endif
+
 #elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
 
 #if CPU(X86)
@@ -335,6 +353,24 @@ static inline void*& framePointerImpl(mcontext_t& mach
 #error Unknown Architecture
 #endif
 
+#elif OS(OPENBSD)
+
+#if CPU(X86)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_ebp);
+#elif CPU(X86_64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_rbp);
+#elif CPU(ARM) 
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.__gregs[_REG_FP]);
+#elif CPU(ARM64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_x[29]);
+#elif CPU(MIPS)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[30]);
+#elif CPU(SPARC64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_rbp);
+#else
+#error Unknown Architecture
+#endif
+
 #elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
 
 // The following sequence depends on glibc's sys/ucontext.h.
@@ -482,6 +518,24 @@ static inline void*& instructionPointerImpl(mcontext_t
 #error Unknown Architecture
 #endif
 
+#elif OS(OPENBSD)
+
+#if CPU(X86)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_eip);
+#elif CPU(X86_64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_rip);
+#elif CPU(ARM) 
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.__gregs[_REG_PC]);
+#elif CPU(ARM64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_elr);
+#elif CPU(MIPS)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_pc);
+#elif CPU(SPARC64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_rip);
+#else
+#error Unknown Architecture
+#endif
+
 #elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
 
 // The following sequence depends on glibc's sys/ucontext.h.
@@ -639,6 +693,24 @@ inline void*& argumentPointer<1>(mcontext_t& machineCo
 #error Unknown Architecture
 #endif
 
+#elif OS(OPENBSD)
+
+#if CPU(X86)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_edx);
+#elif CPU(X86_64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_rsi);
+#elif CPU(ARM) 
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.__gregs[_REG_R1]);
+#elif CPU(ARM64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_x[1]);
+#elif CPU(MIPS)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[5]);
+#elif CPU(SPARC64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_rsi);
+#else
+#error Unknown Architecture
+#endif
+
 #elif OS(FUCHSIA) || defined(__GLIBC__) || defined(__BIONIC__)
 
 // The following sequence depends on glibc's sys/ucontext.h.
@@ -752,6 +824,24 @@ inline void*& llintInstructionPointer(mcontext_t& mach
     return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_gpregs.gp_x[4]);
 #elif CPU(MIPS)
     return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[12]);
+#else
+#error Unknown Architecture
+#endif
+
+#elif OS(OPENBSD)
+
+#if CPU(X86)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_esi);
+#elif CPU(X86_64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_r8);
+#elif CPU(ARM) 
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.__gregs[_REG_R8]);
+#elif CPU(ARM64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.sc_x[4]);
+#elif CPU(MIPS)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_regs[12]);
+#elif CPU(SPARC64)
+    return reinterpret_cast<void*&>((uintptr_t&) machineContext.mc_r8);
 #else
 #error Unknown Architecture
 #endif
