linux/arch/tile/include/asm/kprobes.h
<<
>>
Prefs
   1/*
   2 * arch/tile/include/asm/kprobes.h
   3 *
   4 * Copyright 2012 Tilera Corporation. All Rights Reserved.
   5 *
   6 *   This program is free software; you can redistribute it and/or
   7 *   modify it under the terms of the GNU General Public License
   8 *   as published by the Free Software Foundation, version 2.
   9 *
  10 *   This program is distributed in the hope that it will be useful, but
  11 *   WITHOUT ANY WARRANTY; without even the implied warranty of
  12 *   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  13 *   NON INFRINGEMENT.  See the GNU General Public License for
  14 *   more details.
  15 */
  16
  17#ifndef _ASM_TILE_KPROBES_H
  18#define _ASM_TILE_KPROBES_H
  19
  20#include <asm-generic/kprobes.h>
  21
  22#ifdef CONFIG_KPROBES
  23
  24#include <linux/types.h>
  25#include <linux/ptrace.h>
  26#include <linux/percpu.h>
  27#include <arch/opcode.h>
  28
  29#define __ARCH_WANT_KPROBES_INSN_SLOT
  30#define MAX_INSN_SIZE                   2
  31
  32#define kretprobe_blacklist_size 0
  33
  34typedef tile_bundle_bits kprobe_opcode_t;
  35
  36#define flush_insn_slot(p)                                              \
  37        flush_icache_range((unsigned long)p->addr,                      \
  38                           (unsigned long)p->addr +                     \
  39                           (MAX_INSN_SIZE * sizeof(kprobe_opcode_t)))
  40
  41struct kprobe;
  42
  43/* Architecture specific copy of original instruction. */
  44struct arch_specific_insn {
  45        kprobe_opcode_t *insn;
  46};
  47
  48struct prev_kprobe {
  49        struct kprobe *kp;
  50        unsigned long status;
  51        unsigned long saved_pc;
  52};
  53
  54#define MAX_JPROBES_STACK_SIZE 128
  55#define MAX_JPROBES_STACK_ADDR \
  56        (((unsigned long)current_thread_info()) + THREAD_SIZE - 32 \
  57                - sizeof(struct pt_regs))
  58
  59#define MIN_JPROBES_STACK_SIZE(ADDR)                                    \
  60        ((((ADDR) + MAX_JPROBES_STACK_SIZE) > MAX_JPROBES_STACK_ADDR)   \
  61                ? MAX_JPROBES_STACK_ADDR - (ADDR)                       \
  62                : MAX_JPROBES_STACK_SIZE)
  63
  64/* per-cpu kprobe control block. */
  65struct kprobe_ctlblk {
  66        unsigned long kprobe_status;
  67        unsigned long kprobe_saved_pc;
  68        unsigned long jprobe_saved_sp;
  69        struct prev_kprobe prev_kprobe;
  70        struct pt_regs jprobe_saved_regs;
  71        char jprobes_stack[MAX_JPROBES_STACK_SIZE];
  72};
  73
  74extern tile_bundle_bits breakpoint2_insn;
  75extern tile_bundle_bits breakpoint_insn;
  76
  77void arch_remove_kprobe(struct kprobe *);
  78
  79extern int kprobe_exceptions_notify(struct notifier_block *self,
  80                             unsigned long val, void *data);
  81
  82#endif /* CONFIG_KPROBES */
  83#endif /* _ASM_TILE_KPROBES_H */
  84