#include "negated_errno.h"
-#define get_error arm_get_error
+#define arch_get_error arm_get_error
#include "arm/get_error.c"
-#undef get_error
+#undef arch_get_error
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (tcp->currpers == 1) {
arm_get_error(tcp, check_errno);
-#define get_syscall_args arm_get_syscall_args
+#define arch_get_syscall_args arm_get_syscall_args
#include "arm/get_syscall_args.c"
-#undef get_syscall_args
+#undef arch_get_syscall_args
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
if (tcp->currpers == 1)
return arm_get_syscall_args(tcp);
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (alpha_a3) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
unsigned int i;
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(arc_regs.scratch.r0)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
unsigned long *arc_args = &arc_regs.scratch.r0;
unsigned int i;
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(arm_regs.ARM_r0)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = arm_regs.uregs[0];
tcp->u_arg[1] = arm_regs.uregs[1];
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(avr32_regs.r12)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = avr32_regs.r12;
tcp->u_arg[1] = avr32_regs.r11;
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(bfin_r0)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
static const int argreg[MAX_ARGS] = {
PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(hppa_r28)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
unsigned int i;
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(i386_regs.eax)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = i386_regs.ebx;
tcp->u_arg[1] = i386_regs.ecx;
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (ia64_regs.gr[10]) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
unsigned long *rbs_end =
(unsigned long *) ia64_regs.ar[PT_AUR_BSP];
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(m68k_regs.d0)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = m68k_regs.d1;
tcp->u_arg[1] = m68k_regs.d2;
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
/* result pointer in D0Re0 (D0.0) */
if (check_errno && is_negated_errno(metag_regs.dx[0][0])) {
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
unsigned int i;
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(microblaze_r3)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
unsigned int i;
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (mips_REG_A3) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
#if defined LINUX_MIPSN64 || defined LINUX_MIPSN32
tcp->u_arg[0] = mips_REG_A0;
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
/*
* The system call convention specifies that r2 contains the return
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = nios2_regs.regs[4];
tcp->u_arg[1] = nios2_regs.regs[5];
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(or1k_regs.gpr[11])) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = or1k_regs.gpr[3 + 0];
tcp->u_arg[1] = or1k_regs.gpr[3 + 1];
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (ppc_regs.ccr & 0x10000000) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
if (current_personality != 0) {
/*
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(riscv_regs.a0)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = riscv_regs.a0;
tcp->u_arg[1] = riscv_regs.a1;
#endif
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(ARCH_REGSET.gprs[2])) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = ARCH_REGSET.orig_gpr2;
tcp->u_arg[1] = ARCH_REGSET.gprs[3];
#include "negated_errno.h"
-#define get_error s390_get_error
+#define arch_get_error s390_get_error
#define ARCH_REGSET s390_regset
#include "../s390/get_error.c"
#undef ARCH_REGSET
-#undef get_error
+#undef arch_get_error
-#define get_error s390x_get_error
+#define arch_get_error s390x_get_error
#define ARCH_REGSET s390x_regset
#include "../s390/get_error.c"
#undef ARCH_REGSET
-#undef get_error
+#undef arch_get_error
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (tcp->currpers == 1)
s390_get_error(tcp, check_errno);
-#define get_syscall_args s390_get_syscall_args
+#define arch_get_syscall_args s390_get_syscall_args
#define ARCH_REGSET s390_regset
#include "../s390/get_syscall_args.c"
#undef ARCH_REGSET
-#undef get_syscall_args
+#undef arch_get_syscall_args
-#define get_syscall_args s390x_get_syscall_args
+#define arch_get_syscall_args s390x_get_syscall_args
#define ARCH_REGSET s390x_regset
#include "../s390/get_syscall_args.c"
#undef ARCH_REGSET
-#undef get_syscall_args
+#undef arch_get_syscall_args
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
if (tcp->currpers == 1)
return s390_get_syscall_args(tcp);
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(sh_r0)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
static const int syscall_regs[MAX_ARGS] = {
4 * (REG_REG0+4),
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(sh64_r9)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
/* Registers used by SH5 Linux system calls for parameters */
static const int syscall_regs[MAX_ARGS] = { 2, 3, 4, 5, 6, 7 };
#include <asm/psr.h>
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (sparc_regs.psr & PSR_C) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = sparc_regs.u_regs[U_REG_O0 + 0];
tcp->u_arg[1] = sparc_regs.u_regs[U_REG_O0 + 1];
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (sparc_regs.tstate & 0x1100000000UL) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
if (tcp->currpers == 1) {
/*
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
/*
* The standard tile calling convention returns the value
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
tcp->u_arg[0] = tile_regs.regs[0];
tcp->u_arg[1] = tile_regs.regs[1];
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
/*
* In X32, return value is 64-bit (llseek uses one).
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
if (x86_io.iov_len != sizeof(i386_regs)) {
/* x86-64 or x32 ABI */
#include "negated_errno.h"
static void
-get_error(struct tcb *tcp, const bool check_errno)
+arch_get_error(struct tcb *tcp, const bool check_errno)
{
if (check_errno && is_negated_errno(xtensa_a2)) {
tcp->u_rval = -1;
/* Return -1 on error or 1 on success (never 0!). */
static int
-get_syscall_args(struct tcb *tcp)
+arch_get_syscall_args(struct tcb *tcp)
{
/* arg0: a6, arg1: a3, arg2: a4, arg3: a5, arg4: a8, arg5: a9 */
static const int xtensaregs[MAX_ARGS] = {
static long get_regs(struct tcb *);
static int get_syscall_args(struct tcb *);
static int get_syscall_result(struct tcb *);
+static void get_error(struct tcb *, bool);
static int arch_get_scno(struct tcb *tcp);
static int arch_set_scno(struct tcb *, kernel_ulong_t);
-static void get_error(struct tcb *, const bool);
+static int arch_get_syscall_args(struct tcb *);
+static void arch_get_error(struct tcb *, bool);
static int arch_set_error(struct tcb *);
static int arch_set_success(struct tcb *);
}
}
- if (update_tcb) {
- tcp->u_error = 0;
+ if (update_tcb)
get_error(tcp, !(tcp->s_ent->sys_flags & SYSCALL_NEVER_FAILS));
- }
return 0;
}
return 1;
}
+static int
+get_syscall_args(struct tcb *tcp)
+{
+ return arch_get_syscall_args(tcp);
+}
+
#ifdef ptrace_getregset_or_getregs
# define get_syscall_result_regs get_regs
#else
{
if (get_syscall_result_regs(tcp) < 0)
return -1;
- tcp->u_error = 0;
get_error(tcp,
(!(tcp->s_ent->sys_flags & SYSCALL_NEVER_FAILS)
|| syscall_tampered(tcp))
return 1;
}
+static void
+get_error(struct tcb *tcp, const bool check_errno)
+{
+ tcp->u_error = 0;
+ arch_get_error(tcp, check_errno);
+}
+
#include "get_scno.c"
#include "set_scno.c"
#include "get_syscall_args.c"