-if (upeek(tcp->pid, REG_A3, &alpha_a3) < 0)
- return -1;
-if (upeek(tcp->pid, REG_R0, &alpha_r0) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ return (upeek(tcp->pid, REG_A3, &alpha_a3) < 0 ||
+ upeek(tcp->pid, REG_R0, &alpha_r0) < 0) ? -1 : 0;
+}
-if (upeek(tcp->pid, PT_R0, &bfin_r0) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ return upeek(tcp->pid, PT_R0, &bfin_r0) < 0 ? -1 : 0;
+}
-if (upeek(tcp->pid, 4*PT_R10, &cris_r10) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ return upeek(tcp->pid, 4 * PT_R10, &cris_r10) < 0 ? -1 : 0;
+}
-if (upeek(tcp->pid, PT_GR28, &hppa_r28) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ return upeek(tcp->pid, PT_GR28, &hppa_r28) < 0 ? -1 : 0;
+}
-if (upeek(tcp->pid, 4*PT_D0, &m68k_d0) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ return upeek(tcp->pid, 4 * PT_D0, &m68k_d0) < 0 ? -1 : 0;
+}
-if (upeek(tcp->pid, 3 * 4, µblaze_r3) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ return upeek(tcp->pid, 3 * 4, µblaze_r3) < 0 ? -1 : 0;
+}
-/* new syscall ABI returns result in R0 */
-if (upeek(tcp->pid, 4*REG_REG0, (long *)&sh_r0) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ /* new syscall ABI returns result in R0 */
+ return upeek(tcp->pid, 4 * REG_REG0, (long *)&sh_r0) < 0 ? -1 : 0;
+}
-/* ABI defines result returned in r9 */
-if (upeek(tcp->pid, REG_GENERAL(9), (long *)&sh64_r9) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ /* ABI defines result returned in r9 */
+ return upeek(tcp->pid, REG_GENERAL(9), (long *)&sh64_r9) < 0 ? -1 : 0;
+}
-if (upeek(tcp->pid, REG_A_BASE + 2, &xtensa_a2) < 0)
- return -1;
+static int
+get_syscall_result_regs(struct tcb *tcp)
+{
+ return upeek(tcp->pid, REG_A_BASE + 2, &xtensa_a2) < 0 ? -1 : 0;
+}
void
get_regs(pid_t pid)
{
+#undef USE_GET_SYSCALL_RESULT_REGS
#ifdef ARCH_REGS_FOR_GETREGSET
# ifdef X86_64
/* Try PTRACE_GETREGSET first, fallback to PTRACE_GETREGS. */
# endif
#else /* !ARCH_REGS_FOR_GETREGSET && !ARCH_REGS_FOR_GETREGS */
-# warning get_regs is not implemented for this architecture yet
+# define USE_GET_SYSCALL_RESULT_REGS 1
+# warning get_regs is not implemented for this architecture yet
get_regs_error = 0;
#endif
}
return 1;
}
+#ifdef USE_GET_SYSCALL_RESULT_REGS
+# include "get_syscall_result.c"
+#endif
#include "get_error.c"
/* Returns:
static int
get_syscall_result(struct tcb *tcp)
{
-#if defined ARCH_REGS_FOR_GETREGSET || defined ARCH_REGS_FOR_GETREGS
- /* already done by get_regs */
-#else
-# include "get_syscall_result.c"
+#ifdef USE_GET_SYSCALL_RESULT_REGS
+ if (get_syscall_result_regs(tcp))
+ return -1;
#endif
tcp->u_error = 0;
get_error(tcp, !(tcp->s_ent->sys_flags & SYSCALL_NEVER_FAILS));