^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * arch/arm64/include/asm/probes.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2013 Linaro Limited
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #ifndef _ARM_PROBES_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define _ARM_PROBES_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <asm/insn.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) typedef u32 probe_opcode_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) typedef void (probes_handler_t) (u32 opcode, long addr, struct pt_regs *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /* architecture specific copy of original instruction */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) struct arch_probe_insn {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) probe_opcode_t *insn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) pstate_check_t *pstate_cc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) probes_handler_t *handler;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /* restore address after step xol */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) unsigned long restore;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #ifdef CONFIG_KPROBES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) typedef u32 kprobe_opcode_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) struct arch_specific_insn {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct arch_probe_insn api;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #endif