linux/arch/arm/include/asm/kprobes.h
<<
>>
Prefs
   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