openbsd-ports/emulators/citra/patches/patch-externals_dynarmic_sr...

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