summaryrefslogtreecommitdiff
path: root/linux/avr32
diff options
context:
space:
mode:
authorElvira Khabirova <lineprinter0@gmail.com>2017-01-25 02:59:16 +0300
committerDmitry V. Levin <ldv@altlinux.org>2017-01-28 09:47:00 +0000
commit41d647ce674bfe601600988f6dda295804db9c2f (patch)
treeb56d90861b1f18f11840b3a4e773ebfd59b6cdc9 /linux/avr32
parenta0795c594ad46de0b21ffe9b3bba33bd9c1d7cc1 (diff)
downloadstrace-41d647ce674bfe601600988f6dda295804db9c2f.tar.gz
Implement success injection
This extends fault injection syntax with :retval= option. When :retval=VALUE is specified, the syscall number is replaced by -1 and a bogus success VALUE is returned to the callee. * defs.h (fault_opts): Remove err field, add rval field. (MAX_ERRNO_VALUE, FAULT_OPTS_RVAL_DEFAULT, FAULT_OPTS_RVAL_DISABLE): New macros. * qualify.c (parse_fault_token): Handle retval= token. (qualify_fault): Update fault_opts initialization after the move from struct fault_opts.err to struct fault_opts.rval. * syscall.c (arch_set_success): New prototype. (inject_syscall_fault_entering): Check opts->rval instead of opts->err. (update_syscall_fault_exiting): Implement retval injection. * strace.1: Update the section on fault injection. * NEWS: Mention retval= option. * linux/aarch64/set_error.c (arch_set_success): New function. * linux/alpha/set_error.c: Likewise. * linux/arc/set_error.c: Likewise. * linux/arm/set_error.c: Likewise. * linux/avr32/set_error.c: Likewise. * linux/bfin/set_error.c: Likewise. * linux/crisv10/set_error.c: Likewise. * linux/hppa/set_error.c: Likewise. * linux/i386/set_error.c: Likewise. * linux/ia64/set_error.c: Likewise. * linux/m68k/set_error.c: Likewise. * linux/metag/set_error.c: Likewise. * linux/microblaze/set_error.c: Likewise. * linux/mips/set_error.c: Likewise. * linux/nios2/set_error.c: Likewise. * linux/or1k/set_error.c: Likewise. * linux/powerpc/set_error.c: Likewise. * linux/riscv/set_error.c: Likewise. * linux/s390/set_error.c: Likewise. * linux/sh/set_error.c: Likewise. * linux/sh64/set_error.c: Likewise. * linux/sparc/set_error.c: Likewise. * linux/sparc64/set_error.c: Likewise. * linux/tile/set_error.c: Likewise. * linux/x86_64/set_error.c: Likewise. * linux/xtensa/set_error.c: Likewise. Closes: https://github.com/strace/strace/issues/3
Diffstat (limited to 'linux/avr32')
-rw-r--r--linux/avr32/set_error.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/linux/avr32/set_error.c b/linux/avr32/set_error.c
index aeb474a1a..f4ef41d6b 100644
--- a/linux/avr32/set_error.c
+++ b/linux/avr32/set_error.c
@@ -4,3 +4,10 @@ arch_set_error(struct tcb *tcp)
avr32_regs.r12 = -tcp->u_error;
return set_regs(tcp->pid);
}
+
+static int
+arch_set_success(struct tcb *tcp)
+{
+ avr32_regs.r12 = tcp->u_rval;
+ return set_regs(tcp->pid);
+}