strace/linux/aarch64/set_scno.c

30 lines
678 B
C
Raw Permalink Normal View History

/*
* Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
Implement arch specific methods of changing syscall number and error code This introduces arch_set_error and arch_set_scno functions for each supported architecture, needed to implement syscall fault injection. * linux/aarch64/set_error.c: New file. * linux/aarch64/set_scno.c: Likewise. * linux/alpha/set_error.c: Likewise. * linux/alpha/set_scno.c: Likewise. * linux/arc/set_error.c: Likewise. * linux/arc/set_scno.c: Likewise. * linux/arm/set_error.c: Likewise. * linux/arm/set_scno.c: Likewise. * linux/avr32/set_error.c: Likewise. * linux/avr32/set_scno.c: Likewise. * linux/bfin/set_error.c: Likewise. * linux/bfin/set_scno.c: Likewise. * linux/crisv10/set_error.c: Likewise. * linux/crisv10/set_scno.c: Likewise. * linux/crisv32/set_error.c: Likewise. * linux/crisv32/set_scno.c: Likewise. * linux/hppa/set_error.c: Likewise. * linux/hppa/set_scno.c: Likewise. * linux/i386/set_error.c: Likewise. * linux/i386/set_scno.c: Likewise. * linux/ia64/set_error.c: Likewise. * linux/ia64/set_scno.c: Likewise. * linux/m68k/set_error.c: Likewise. * linux/m68k/set_scno.c: Likewise. * linux/metag/set_error.c: Likewise. * linux/metag/set_scno.c: Likewise. * linux/microblaze/set_error.c: Likewise. * linux/microblaze/set_scno.c: Likewise. * linux/mips/set_error.c: Likewise. * linux/mips/set_scno.c: Likewise. * linux/nios2/set_error.c: Likewise. * linux/nios2/set_scno.c: Likewise. * linux/or1k/set_error.c: Likewise. * linux/or1k/set_scno.c: Likewise. * linux/powerpc/set_error.c: Likewise. * linux/powerpc/set_scno.c: Likewise. * linux/powerpc64/set_error.c: Likewise. * linux/powerpc64/set_scno.c: Likewise. * linux/riscv/set_error.c: Likewise. * linux/riscv/set_scno.c: Likewise. * linux/s390/set_error.c: Likewise. * linux/s390/set_scno.c: Likewise. * linux/s390x/set_error.c: Likewise. * linux/s390x/set_scno.c: Likewise. * linux/sh/set_error.c: Likewise. * linux/sh/set_scno.c: Likewise. * linux/sh64/set_error.c: Likewise. * linux/sh64/set_scno.c: Likewise. * linux/sparc/set_error.c: Likewise. * linux/sparc/set_scno.c: Likewise. * linux/sparc64/set_error.c: Likewise. * linux/sparc64/set_scno.c: Likewise. * linux/tile/set_error.c: Likewise. * linux/tile/set_scno.c: Likewise. * linux/x32/set_error.c: Likewise. * linux/x32/set_scno.c: Likewise. * linux/x86_64/set_error.c: Likewise. * linux/x86_64/set_scno.c: Likewise. * linux/xtensa/set_error.c: Likewise. * linux/xtensa/set_scno.c: Likewise. * Makefile.am (EXTRA_DIST): Add them.
2016-11-15 17:38:21 +00:00
#ifndef NT_ARM_SYSTEM_CALL
# define NT_ARM_SYSTEM_CALL 0x404
#endif
/*
* NT_ARM_SYSTEM_CALL regset is supported by linux kernel
* starting with commit v3.19-rc1~59^2~16.
*/
Implement arch specific methods of changing syscall number and error code This introduces arch_set_error and arch_set_scno functions for each supported architecture, needed to implement syscall fault injection. * linux/aarch64/set_error.c: New file. * linux/aarch64/set_scno.c: Likewise. * linux/alpha/set_error.c: Likewise. * linux/alpha/set_scno.c: Likewise. * linux/arc/set_error.c: Likewise. * linux/arc/set_scno.c: Likewise. * linux/arm/set_error.c: Likewise. * linux/arm/set_scno.c: Likewise. * linux/avr32/set_error.c: Likewise. * linux/avr32/set_scno.c: Likewise. * linux/bfin/set_error.c: Likewise. * linux/bfin/set_scno.c: Likewise. * linux/crisv10/set_error.c: Likewise. * linux/crisv10/set_scno.c: Likewise. * linux/crisv32/set_error.c: Likewise. * linux/crisv32/set_scno.c: Likewise. * linux/hppa/set_error.c: Likewise. * linux/hppa/set_scno.c: Likewise. * linux/i386/set_error.c: Likewise. * linux/i386/set_scno.c: Likewise. * linux/ia64/set_error.c: Likewise. * linux/ia64/set_scno.c: Likewise. * linux/m68k/set_error.c: Likewise. * linux/m68k/set_scno.c: Likewise. * linux/metag/set_error.c: Likewise. * linux/metag/set_scno.c: Likewise. * linux/microblaze/set_error.c: Likewise. * linux/microblaze/set_scno.c: Likewise. * linux/mips/set_error.c: Likewise. * linux/mips/set_scno.c: Likewise. * linux/nios2/set_error.c: Likewise. * linux/nios2/set_scno.c: Likewise. * linux/or1k/set_error.c: Likewise. * linux/or1k/set_scno.c: Likewise. * linux/powerpc/set_error.c: Likewise. * linux/powerpc/set_scno.c: Likewise. * linux/powerpc64/set_error.c: Likewise. * linux/powerpc64/set_scno.c: Likewise. * linux/riscv/set_error.c: Likewise. * linux/riscv/set_scno.c: Likewise. * linux/s390/set_error.c: Likewise. * linux/s390/set_scno.c: Likewise. * linux/s390x/set_error.c: Likewise. * linux/s390x/set_scno.c: Likewise. * linux/sh/set_error.c: Likewise. * linux/sh/set_scno.c: Likewise. * linux/sh64/set_error.c: Likewise. * linux/sh64/set_scno.c: Likewise. * linux/sparc/set_error.c: Likewise. * linux/sparc/set_scno.c: Likewise. * linux/sparc64/set_error.c: Likewise. * linux/sparc64/set_scno.c: Likewise. * linux/tile/set_error.c: Likewise. * linux/tile/set_scno.c: Likewise. * linux/x32/set_error.c: Likewise. * linux/x32/set_scno.c: Likewise. * linux/x86_64/set_error.c: Likewise. * linux/x86_64/set_scno.c: Likewise. * linux/xtensa/set_error.c: Likewise. * linux/xtensa/set_scno.c: Likewise. * Makefile.am (EXTRA_DIST): Add them.
2016-11-15 17:38:21 +00:00
static int
arch_set_scno(struct tcb *tcp, kernel_ulong_t scno)
Implement arch specific methods of changing syscall number and error code This introduces arch_set_error and arch_set_scno functions for each supported architecture, needed to implement syscall fault injection. * linux/aarch64/set_error.c: New file. * linux/aarch64/set_scno.c: Likewise. * linux/alpha/set_error.c: Likewise. * linux/alpha/set_scno.c: Likewise. * linux/arc/set_error.c: Likewise. * linux/arc/set_scno.c: Likewise. * linux/arm/set_error.c: Likewise. * linux/arm/set_scno.c: Likewise. * linux/avr32/set_error.c: Likewise. * linux/avr32/set_scno.c: Likewise. * linux/bfin/set_error.c: Likewise. * linux/bfin/set_scno.c: Likewise. * linux/crisv10/set_error.c: Likewise. * linux/crisv10/set_scno.c: Likewise. * linux/crisv32/set_error.c: Likewise. * linux/crisv32/set_scno.c: Likewise. * linux/hppa/set_error.c: Likewise. * linux/hppa/set_scno.c: Likewise. * linux/i386/set_error.c: Likewise. * linux/i386/set_scno.c: Likewise. * linux/ia64/set_error.c: Likewise. * linux/ia64/set_scno.c: Likewise. * linux/m68k/set_error.c: Likewise. * linux/m68k/set_scno.c: Likewise. * linux/metag/set_error.c: Likewise. * linux/metag/set_scno.c: Likewise. * linux/microblaze/set_error.c: Likewise. * linux/microblaze/set_scno.c: Likewise. * linux/mips/set_error.c: Likewise. * linux/mips/set_scno.c: Likewise. * linux/nios2/set_error.c: Likewise. * linux/nios2/set_scno.c: Likewise. * linux/or1k/set_error.c: Likewise. * linux/or1k/set_scno.c: Likewise. * linux/powerpc/set_error.c: Likewise. * linux/powerpc/set_scno.c: Likewise. * linux/powerpc64/set_error.c: Likewise. * linux/powerpc64/set_scno.c: Likewise. * linux/riscv/set_error.c: Likewise. * linux/riscv/set_scno.c: Likewise. * linux/s390/set_error.c: Likewise. * linux/s390/set_scno.c: Likewise. * linux/s390x/set_error.c: Likewise. * linux/s390x/set_scno.c: Likewise. * linux/sh/set_error.c: Likewise. * linux/sh/set_scno.c: Likewise. * linux/sh64/set_error.c: Likewise. * linux/sh64/set_scno.c: Likewise. * linux/sparc/set_error.c: Likewise. * linux/sparc/set_scno.c: Likewise. * linux/sparc64/set_error.c: Likewise. * linux/sparc64/set_scno.c: Likewise. * linux/tile/set_error.c: Likewise. * linux/tile/set_scno.c: Likewise. * linux/x32/set_error.c: Likewise. * linux/x32/set_scno.c: Likewise. * linux/x86_64/set_error.c: Likewise. * linux/x86_64/set_scno.c: Likewise. * linux/xtensa/set_error.c: Likewise. * linux/xtensa/set_scno.c: Likewise. * Makefile.am (EXTRA_DIST): Add them.
2016-11-15 17:38:21 +00:00
{
unsigned int n = (uint16_t) scno;
const struct iovec io = {
.iov_base = &n,
.iov_len = sizeof(n)
};
int rc = ptrace(PTRACE_SETREGSET, tcp->pid, NT_ARM_SYSTEM_CALL, &io);
if (rc && errno != ESRCH)
perror_msg("arch_set_scno: NT_ARM_SYSTEM_CALL pid:%d scno:%#x",
tcp->pid, n);
return rc;
}