Dmitry V. Levin
a1e94e9c7a
After transition from long to kernel_ulong_t these fields are no longer needed. * defs.h (HAVE_STRUCT_TCB_EXT_ARG): Remove. (struct tcb) [HAVE_STRUCT_TCB_EXT_ARG]: Remove. [HAVE_STRUCT_TCB_EXT_ARG]: Remove. (RVAL_MASK): Update. * io.c (print_lld_from_low_high_val): Check [SIZEOF_KERNEL_LONG_T > SIZEOF_LONG] instead of [HAVE_STRUCT_TCB_EXT_ARG]. Use u_arg instead of ext_arg. * linux/mips/get_error.c (get_error) [LINUX_MIPSN32]: Remove. * linux/mips/get_syscall_args.c (get_syscall_args) [LINUX_MIPSN32]: Remove. [LINUX_MIPSN64]: Extend to [LINUX_MIPSN32]. * linux/x86_64/get_error.c (get_error) [X32]: Remove. * linux/x86_64/get_syscall_args.c (get_syscall_args) [X32]: Remove. * lseek.c: Check [SIZEOF_KERNEL_LONG_T > SIZEOF_LONG] instead of [HAVE_STRUCT_TCB_EXT_ARG]. [SIZEOF_KERNEL_LONG_T > SIZEOF_LONG] (SYS_FUNC(lseek)): Use u_arg instead of ext_arg. Use RVAL_UDECIMAL instead of RVAL_LUDECIMAL. * mem.c (SYS_FUNC(mmap)): Pass offset syscall argument directly to print_mmap. * syscall.c (trace_syscall_exiting) [HAVE_STRUCT_TCB_EXT_ARG]: Remove. * times.c (SYS_FUNC(times)): Use RVAL_UDECIMAL instead of RVAL_LUDECIMAL. * util.c (getllval): Check [SIZEOF_KERNEL_LONG_T > SIZEOF_LONG] instead of [HAVE_STRUCT_TCB_EXT_ARG]. Use u_arg instead of ext_arg.
24 lines
462 B
C
24 lines
462 B
C
static void
|
|
get_error(struct tcb *tcp, const bool check_errno)
|
|
{
|
|
/*
|
|
* In X32, return value is 64-bit (llseek uses one).
|
|
* Using merely "long rax" would not work.
|
|
*/
|
|
long long rax;
|
|
|
|
if (x86_io.iov_len == sizeof(i386_regs)) {
|
|
/* Sign extend from 32 bits */
|
|
rax = (int32_t) i386_regs.eax;
|
|
} else {
|
|
rax = x86_64_regs.rax;
|
|
}
|
|
|
|
if (check_errno && is_negated_errno(rax)) {
|
|
tcp->u_rval = -1;
|
|
tcp->u_error = -rax;
|
|
} else {
|
|
tcp->u_rval = rax;
|
|
}
|
|
}
|