mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-10 09:48:58 +02:00
[dynarmic] initial posix EH for rv64
Signed-off-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
parent
9a3af3a6a3
commit
8fac720516
3 changed files with 24 additions and 1 deletions
|
|
@ -43,6 +43,7 @@ struct FakeCall {
|
|||
};
|
||||
#elif defined(ARCHITECTURE_riscv64)
|
||||
struct FakeCall {
|
||||
u64 call_sepc;
|
||||
};
|
||||
#else
|
||||
# error "Invalid architecture"
|
||||
|
|
|
|||
|
|
@ -140,7 +140,15 @@ void SigHandler::SigAction(int sig, siginfo_t* info, void* raw_context) {
|
|||
}
|
||||
fmt::print(stderr, "Unhandled {} at pc {:#018x}\n", sig == SIGSEGV ? "SIGSEGV" : "SIGBUS", CTX_PC);
|
||||
#elif defined(ARCHITECTURE_riscv64)
|
||||
UNREACHABLE();
|
||||
{
|
||||
std::shared_lock guard(sig_handler->code_block_infos_mutex);
|
||||
if (const auto iter = sig_handler->FindCodeBlockInfo(CTX_SEPC); iter != sig_handler->code_block_infos.end()) {
|
||||
FakeCall fc = iter->second.cb(CTX_SEPC);
|
||||
CTX_SEPC = fc.call_sepc;
|
||||
return;
|
||||
}
|
||||
}
|
||||
fmt::print(stderr, "Unhandled {} at pc {:#018x}\n", sig == SIGSEGV ? "SIGSEGV" : "SIGBUS", CTX_SEPC);
|
||||
#else
|
||||
# error "Invalid architecture"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -118,6 +118,20 @@
|
|||
# else
|
||||
# error "Unknown platform"
|
||||
# endif
|
||||
#elif defined(ARCHITECTURE_riscv64)
|
||||
# if defined(__FreeBSD__)
|
||||
# define CTX_SEPC (mctx.mc_gpregs.gp_sepc)
|
||||
# define CTX_SP (mctx.mc_gpregs.gp_sp)
|
||||
# elif defined(__linux__)
|
||||
# define CTX_SEPC (mctx.__gregs[REG_PC])
|
||||
# define CTX_SP (mctx.__gregs[REG_SP])
|
||||
# elif defined(__NetBSD__)
|
||||
# define CTX_SEPC (mctx.__gregs[_REG_PC])
|
||||
# define CTX_SP (mctx.__gregs[_REG_SP])
|
||||
# elif defined(__OpenBSD__)
|
||||
# define CTX_SEPC (ucontext->sc_sepc)
|
||||
# define CTX_SP (ucontext->sc_sp)
|
||||
# endif
|
||||
#else
|
||||
# error "unimplemented"
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue