diff --git a/syscall.c b/syscall.c index fc7cd06d..a44ac0c4 100644 --- a/syscall.c +++ b/syscall.c @@ -1070,9 +1070,15 @@ get_regs(pid_t pid) # elif defined(SPARC) || defined(SPARC64) get_regs_error = ptrace(PTRACE_GETREGS, pid, (char *)&sparc_regs, 0); # elif defined(POWERPC) + static bool old_kernel = 0; + if (old_kernel) + goto old; get_regs_error = ptrace(PTRACE_GETREGS, pid, NULL, (long) &ppc_regs); - if (get_regs_error && errno == EIO) + if (get_regs_error && errno == EIO) { + old_kernel = 1; + old: get_regs_error = powerpc_getregs_old(pid); + } /* try PTRACE_GETREGSET first, fallback to PTRACE_GETREGS */ # else