diff options
author | Elvira Khabirova <lineprinter0@gmail.com> | 2017-01-25 02:59:16 +0300 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2017-01-28 09:47:00 +0000 |
commit | 41d647ce674bfe601600988f6dda295804db9c2f (patch) | |
tree | b56d90861b1f18f11840b3a4e773ebfd59b6cdc9 /linux/avr32 | |
parent | a0795c594ad46de0b21ffe9b3bba33bd9c1d7cc1 (diff) | |
download | strace-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.c | 7 |
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); +} |