Index: externals/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp
--- externals/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp.orig
+++ externals/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp
@@ -10,8 +10,10 @@
 #    include <sys/ucontext.h>
 #else
 #    include <signal.h>
+#if !defined(__OpenBSD__)
 #    include <ucontext.h>
 #endif
+#endif
 
 #include <cstring>
 #include <functional>
@@ -130,7 +132,11 @@ void SigHandler::RemoveCodeBlock(u64 host_pc) {
 void SigHandler::SigAction(int sig, siginfo_t* info, void* raw_context) {
     ASSERT(sig == SIGSEGV || sig == SIGBUS);
 
+#if defined(__OpenBSD__)
+    sigcontext* mctx = ((sigcontext*)raw_context);
+#else
     auto& mctx = ((ucontext_t*)raw_context)->uc_mcontext;
+#endif
 
 #if defined(MCL_ARCHITECTURE_X86_64)
 
@@ -143,6 +149,9 @@ void SigHandler::SigAction(int sig, siginfo_t* info, v
 #    elif defined(__FreeBSD__)
 #        define CTX_RIP (mctx.mc_rip)
 #        define CTX_RSP (mctx.mc_rsp)
+#    elif defined(__OpenBSD__)
+#        define CTX_RIP (mctx->sc_rip)
+#        define CTX_RSP (mctx->sc_rsp)
 #    else
 #        error "Unknown platform"
 #    endif
@@ -192,6 +201,12 @@ void SigHandler::SigAction(int sig, siginfo_t* info, v
 #        define CTX_LR (mctx.mc_gpregs.gp_lr)
 #        define CTX_X(i) (mctx.mc_gpregs.gp_x[i])
 #        define CTX_Q(i) (mctx.mc_fpregs.fp_q[i])
+#    elif defined(__OpenBSD__)
+#        define CTX_PC (mctx->sc_elr)
+#        define CTX_SP (mctx->sc_sp)
+#        define CTX_LR (mctx->sc_x [ARMREG_R0)
+#        define CTX_X(i) (mctx->sc_x)
+#        define CTX_Q(i) (mctx->sc_y)
 #    else
 #        error "Unknown platform"
 #    endif
