1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * arch/arm/include/asm/kprobes.h 4 * 5 * Copyright (C) 2006, 2007 Motorola Inc. 6 */ 7 8#ifndef _ARM_KPROBES_H 9#define _ARM_KPROBES_H 10 11#include <asm-generic/kprobes.h> 12 13#ifdef CONFIG_KPROBES 14#include <linux/types.h> 15#include <linux/ptrace.h> 16#include <linux/notifier.h> 17 18#define __ARCH_WANT_KPROBES_INSN_SLOT 19#define MAX_INSN_SIZE 2 20 21#define flush_insn_slot(p) do { } while (0) 22#define kretprobe_blacklist_size 0 23 24typedef u32 kprobe_opcode_t; 25struct kprobe; 26#include <asm/probes.h> 27 28#define arch_specific_insn arch_probes_insn 29 30struct prev_kprobe { 31 struct kprobe *kp; 32 unsigned int status; 33}; 34 35/* per-cpu kprobe control block */ 36struct kprobe_ctlblk { 37 unsigned int kprobe_status; 38 struct prev_kprobe prev_kprobe; 39}; 40 41void arch_remove_kprobe(struct kprobe *); 42int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr); 43int kprobe_exceptions_notify(struct notifier_block *self, 44 unsigned long val, void *data); 45 46/* optinsn template addresses */ 47extern __visible kprobe_opcode_t optprobe_template_entry; 48extern __visible kprobe_opcode_t optprobe_template_val; 49extern __visible kprobe_opcode_t optprobe_template_call; 50extern __visible kprobe_opcode_t optprobe_template_end; 51extern __visible kprobe_opcode_t optprobe_template_sub_sp; 52extern __visible kprobe_opcode_t optprobe_template_add_sp; 53extern __visible kprobe_opcode_t optprobe_template_restore_begin; 54extern __visible kprobe_opcode_t optprobe_template_restore_orig_insn; 55extern __visible kprobe_opcode_t optprobe_template_restore_end; 56 57#define MAX_OPTIMIZED_LENGTH 4 58#define MAX_OPTINSN_SIZE \ 59 ((unsigned long)&optprobe_template_end - \ 60 (unsigned long)&optprobe_template_entry) 61#define RELATIVEJUMP_SIZE 4 62 63struct arch_optimized_insn { 64 /* 65 * copy of the original instructions. 66 * Different from x86, ARM kprobe_opcode_t is u32. 67 */ 68#define MAX_COPIED_INSN DIV_ROUND_UP(RELATIVEJUMP_SIZE, sizeof(kprobe_opcode_t)) 69 kprobe_opcode_t copied_insn[MAX_COPIED_INSN]; 70 /* detour code buffer */ 71 kprobe_opcode_t *insn; 72 /* 73 * We always copy one instruction on ARM, 74 * so size will always be 4, and unlike x86, there is no 75 * need for a size field. 76 */ 77}; 78 79#endif /* CONFIG_KPROBES */ 80#endif /* _ARM_KPROBES_H */ 81