diff --git a/src/common/signal_context.cpp b/src/common/signal_context.cpp index 6624cb2d2..112160bc8 100644 --- a/src/common/signal_context.cpp +++ b/src/common/signal_context.cpp @@ -54,20 +54,22 @@ void* GetXmmPointer(void* ctx, u8 index) { void* GetRip(void* ctx) { #if defined(_WIN32) - return &((EXCEPTION_POINTERS*)ctx)->ContextRecord->Rip; + return (void*)((EXCEPTION_POINTERS*)ctx)->ContextRecord->Rip; #elif defined(__APPLE__) - return &((ucontext_t*)ctx)->uc_mcontext->__ss.__rip; + return (void*)((ucontext_t*)ctx)->uc_mcontext->__ss.__rip; #else - return &((ucontext_t*)ctx)->uc_mcontext.gregs[REG_RIP]; + return (void*)((ucontext_t*)ctx)->uc_mcontext.gregs[REG_RIP]; #endif } void IncrementRip(void* ctx, u64 length) { - void* rip = GetRip(ctx); - u64 new_rip; - memcpy(&new_rip, rip, sizeof(u64)); - new_rip += length; - memcpy(rip, &new_rip, sizeof(u64)); +#if defined(_WIN32) + ((EXCEPTION_POINTERS*)ctx)->ContextRecord->Rip += length; +#elif defined(__APPLE__) + ((ucontext_t*)ctx)->uc_mcontext->__ss.__rip += length; +#else + ((ucontext_t*)ctx)->uc_mcontext.gregs[REG_RIP] += length; +#endif } bool IsWriteError(void* ctx) { diff --git a/src/video_core/page_manager.cpp b/src/video_core/page_manager.cpp index 4282709ae..fb09e70f2 100644 --- a/src/video_core/page_manager.cpp +++ b/src/video_core/page_manager.cpp @@ -153,9 +153,9 @@ struct PageManager::Impl { #endif } - static bool GuestFaultSignalHandler(void* code_address, void* fault_address) { + static bool GuestFaultSignalHandler(void* context, void* fault_address) { const auto addr = reinterpret_cast(fault_address); - const bool is_write = Common::IsWriteError(code_address); + const bool is_write = Common::IsWriteError(context); if (is_write && owned_ranges.find(addr) != owned_ranges.end()) { const VAddr addr_aligned = Common::AlignDown(addr, PAGESIZE); rasterizer->InvalidateMemory(addr_aligned, PAGESIZE);