arch_set_error(struct tcb *tcp)
{
#ifdef HAVE_GETREGS_OLD
- x86_64_regs.rax = -(long long) tcp->u_error;
- return upoke(tcp, 8 * RAX, x86_64_regs.rax);
+ kernel_ulong_t rval = -(kernel_long_t) tcp->u_error;
+
+ if (x86_io.iov_len == sizeof(i386_regs))
+ i386_regs.eax = rval;
+ else
+ x86_64_regs.rax = rval;
+
+ return upoke(tcp, 8 * RAX, rval);
#else
if (x86_io.iov_len == sizeof(i386_regs))
return i386_set_error(tcp);
- x86_64_regs.rax = -(long long) tcp->u_error;
+ x86_64_regs.rax = -(kernel_long_t) tcp->u_error;
return set_regs(tcp->pid);
#endif
}
arch_set_success(struct tcb *tcp)
{
#ifdef HAVE_GETREGS_OLD
- x86_64_regs.rax = (long long) tcp->u_rval;
- return upoke(tcp, 8 * RAX, x86_64_regs.rax);
+ kernel_ulong_t rval = (kernel_ulong_t) tcp->u_rval;
+
+ if (x86_io.iov_len == sizeof(i386_regs))
+ i386_regs.eax = rval;
+ else
+ x86_64_regs.rax = rval;
+
+ return upoke(tcp, 8 * RAX, rval);
#else
if (x86_io.iov_len == sizeof(i386_regs))
return i386_set_success(tcp);
- x86_64_regs.rax = (long long) tcp->u_rval;
+ x86_64_regs.rax = (kernel_ulong_t) tcp->u_rval;
return set_regs(tcp->pid);
#endif
}