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 <linux/types.h>
  21#include <linux/ptrace.h>
  22#include <linux/percpu.h>
  23
  24#include <arch/opcode.h>
  25
  26#define __ARCH_WANT_KPROBES_INSN_SLOT
  27#define MAX_INSN_SIZE                   2
  28
  29#define kretprobe_blacklist_size 0
  30
  31typedef tile_bundle_bits kprobe_opcode_t;
  32
  33#define flush_insn_slot(p)                                              \
  34        flush_icache_range((unsigned long)p->addr,                      \
  35                           (unsigned long)p->addr +                     \
  36                           (MAX_INSN_SIZE * sizeof(kprobe_opcode_t)))
  37
  38struct kprobe;
  39
  40/* Architecture specific copy of original instruction. */
  41struct arch_specific_insn {
  42        kprobe_opcode_t *insn;
  43};
  44
  45struct prev_kprobe {
  46        struct kprobe *kp;
  47        unsigned long status;
  48        unsigned long saved_pc;
  49};
  50
  51#define MAX_JPROBES_STACK_SIZE 128
  52#define MAX_JPROBES_STACK_ADDR \
  53        (((unsigned long)current_thread_info()) + THREAD_SIZE - 32 \
  54                - sizeof(struct pt_regs))
  55
  56#define MIN_JPROBES_STACK_SIZE(ADDR)                                    \
  57        ((((ADDR) + MAX_JPROBES_STACK_SIZE) > MAX_JPROBES_STACK_ADDR)   \
  58                ? MAX_JPROBES_STACK_ADDR - (ADDR)                       \
  59                : MAX_JPROBES_STACK_SIZE)
  60
  61/* per-cpu kprobe control block. */
  62struct kprobe_ctlblk {
  63        unsigned long kprobe_status;
  64        unsigned long kprobe_saved_pc;
  65        unsigned long jprobe_saved_sp;
  66        struct prev_kprobe prev_kprobe;
  67        struct pt_regs jprobe_saved_regs;
  68        char jprobes_stack[MAX_JPROBES_STACK_SIZE];
  69};
  70
  71extern tile_bundle_bits breakpoint2_insn;
  72extern tile_bundle_bits breakpoint_insn;
  73
  74void arch_remove_kprobe(struct kprobe *);
  75
  76extern int kprobe_exceptions_notify(struct notifier_block *self,
  77                             unsigned long val, void *data);
  78
  79#endif /* _ASM_TILE_KPROBES_H */
  80