50 lines
1.6 KiB
Plaintext
50 lines
1.6 KiB
Plaintext
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
|