39a67d49ba
Kprobes needs simulation of instructions that cannot be stepped from a different memory location, e.g.: those instructions that uses PC-relative addressing. In simulation, the behaviour of the instruction is implemented using a copy of pt_regs. The following instruction categories are simulated: - All branching instructions(conditional, register, and immediate) - Literal access instructions(load-literal, adr/adrp) Conditional execution is limited to branching instructions in ARM v8. If conditions at PSTATE do not match the condition fields of opcode, the instruction is effectively NOP. Thanks to Will Cohen for assorted suggested changes. Signed-off-by: Sandeepa Prabhu <sandeepa.s.prabhu@gmail.com> Signed-off-by: William Cohen <wcohen@redhat.com> Signed-off-by: David A. Long <dave.long@linaro.org> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> [catalin.marinas@arm.com: removed linux/module.h include] Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
36 lines
1.0 KiB
C
36 lines
1.0 KiB
C
/*
|
|
* arch/arm64/kernel/probes/decode-insn.h
|
|
*
|
|
* Copyright (C) 2013 Linaro Limited.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*/
|
|
|
|
#ifndef _ARM_KERNEL_KPROBES_ARM64_H
|
|
#define _ARM_KERNEL_KPROBES_ARM64_H
|
|
|
|
/*
|
|
* ARM strongly recommends a limit of 128 bytes between LoadExcl and
|
|
* StoreExcl instructions in a single thread of execution. So keep the
|
|
* max atomic context size as 32.
|
|
*/
|
|
#define MAX_ATOMIC_CONTEXT_SIZE (128 / sizeof(kprobe_opcode_t))
|
|
|
|
enum kprobe_insn {
|
|
INSN_REJECTED,
|
|
INSN_GOOD_NO_SLOT,
|
|
INSN_GOOD,
|
|
};
|
|
|
|
enum kprobe_insn __kprobes
|
|
arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi);
|
|
|
|
#endif /* _ARM_KERNEL_KPROBES_ARM64_H */
|