Move is_negated_errno() to a separate new header file negated_errno.h and include it just for architectures which require it. is_negated_errno() is not used on those architectures that have a dedicated register to signal a syscall error. The issue was raised when compiling with clang, which is more strict regarding semantics of unused static inline functions defined in C files and will issue a -Wunused-function warrning if they are not used anywhere. * syscall.c (is_negated_errno): Move to ... * negated_errno.h: ... new file. * Makefile.am (strace_SOURCES): Add it. * linux/aarch64/get_error.c: Include it. * linux/arc/get_error.c: Likewise. * linux/arm/get_error.c: Likewise. * linux/avr32/get_error.c: Likewise. * linux/bfin/get_error.c: Likewise. * linux/crisv10/get_error.c: Likewise. * linux/hppa/get_error.c: Likewise. * linux/i386/get_error.c: Likewise. * linux/ia64/get_error.c: Likewise. * linux/m68k/get_error.c: Likewise. * linux/metag/get_error.c: Likewise. * linux/microblaze/get_error.c: Likewise. * linux/or1k/get_error.c: Likewise. * linux/riscv/get_error.c: Likewise. * linux/s390/get_error.c: Likewise. * linux/sh/get_error.c: Likewise. * linux/sh64/get_error.c: Likewise. * linux/tile/get_error.c: Likewise. * linux/x86_64/get_error.c: Likewise. * linux/xtensa/get_error.c: Likewise.
19 lines
512 B
C
19 lines
512 B
C
#include "negated_errno.h"
|
|
|
|
static void
|
|
get_error(struct tcb *tcp, const bool check_errno)
|
|
{
|
|
/*
|
|
* The standard tile calling convention returns the value
|
|
* (or negative errno) in r0, and zero (or positive errno) in r1.
|
|
* Until at least kernel 3.8, however, the r1 value is not
|
|
* reflected in ptregs at this point, so we use r0 here.
|
|
*/
|
|
if (check_errno && is_negated_errno(tile_regs.regs[0])) {
|
|
tcp->u_rval = -1;
|
|
tcp->u_error = -tile_regs.regs[0];
|
|
} else {
|
|
tcp->u_rval = tile_regs.regs[0];
|
|
}
|
|
}
|