Commit 70558763 by John Paul Adrian Glaubitz Committed by GitHub

Fix uc_mcontext register access on 32-bit PowerPC (#898)

Fixes #894
parent b315753c
...@@ -56,7 +56,7 @@ void* GetProgramCounter(void* vuc) { ...@@ -56,7 +56,7 @@ void* GetProgramCounter(void* vuc) {
#elif defined(__powerpc64__) #elif defined(__powerpc64__)
return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]); return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]);
#elif defined(__powerpc__) #elif defined(__powerpc__)
return reinterpret_cast<void*>(context->uc_mcontext.regs->nip); return reinterpret_cast<void*>(context->uc_mcontext.uc_regs->gregs[32]);
#elif defined(__riscv) #elif defined(__riscv)
return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]); return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]);
#elif defined(__s390__) && !defined(__s390x__) #elif defined(__s390__) && !defined(__s390x__)
......
...@@ -131,7 +131,11 @@ static void **NextStackFrame(void **old_sp, const void *uc) { ...@@ -131,7 +131,11 @@ static void **NextStackFrame(void **old_sp, const void *uc) {
const ucontext_t* signal_context = const ucontext_t* signal_context =
reinterpret_cast<const ucontext_t*>(uc); reinterpret_cast<const ucontext_t*>(uc);
void **const sp_before_signal = void **const sp_before_signal =
#if defined(__PPC64__)
reinterpret_cast<void**>(signal_context->uc_mcontext.gp_regs[PT_R1]); reinterpret_cast<void**>(signal_context->uc_mcontext.gp_regs[PT_R1]);
#else
reinterpret_cast<void**>(signal_context->uc_mcontext.uc_regs->gregs[PT_R1]);
#endif
// Check that alleged sp before signal is nonnull and is reasonably // Check that alleged sp before signal is nonnull and is reasonably
// aligned. // aligned.
if (sp_before_signal != nullptr && if (sp_before_signal != nullptr &&
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment