linux/arch/x86/include/asm/hw_breakpoint.h
<<
>>
Prefs
   1#ifndef _I386_HW_BREAKPOINT_H
   2#define _I386_HW_BREAKPOINT_H
   3
   4#ifdef  __KERNEL__
   5#define __ARCH_HW_BREAKPOINT_H
   6
   7/*
   8 * The name should probably be something dealt in
   9 * a higher level. While dealing with the user
  10 * (display/resolving)
  11 */
  12struct arch_hw_breakpoint {
  13        unsigned long   address;
  14        u8              len;
  15        u8              type;
  16};
  17
  18#include <linux/kdebug.h>
  19#include <linux/percpu.h>
  20#include <linux/list.h>
  21
  22/* Available HW breakpoint length encodings */
  23#define X86_BREAKPOINT_LEN_X            0x40
  24#define X86_BREAKPOINT_LEN_1            0x40
  25#define X86_BREAKPOINT_LEN_2            0x44
  26#define X86_BREAKPOINT_LEN_4            0x4c
  27
  28#ifdef CONFIG_X86_64
  29#define X86_BREAKPOINT_LEN_8            0x48
  30#endif
  31
  32/* Available HW breakpoint type encodings */
  33
  34/* trigger on instruction execute */
  35#define X86_BREAKPOINT_EXECUTE  0x80
  36/* trigger on memory write */
  37#define X86_BREAKPOINT_WRITE    0x81
  38/* trigger on memory read or write */
  39#define X86_BREAKPOINT_RW       0x83
  40
  41/* Total number of available HW breakpoint registers */
  42#define HBP_NUM 4
  43
  44static inline int hw_breakpoint_slots(int type)
  45{
  46        return HBP_NUM;
  47}
  48
  49struct perf_event;
  50struct pmu;
  51
  52extern int arch_check_bp_in_kernelspace(struct perf_event *bp);
  53extern int arch_validate_hwbkpt_settings(struct perf_event *bp);
  54extern int hw_breakpoint_exceptions_notify(struct notifier_block *unused,
  55                                           unsigned long val, void *data);
  56
  57
  58int arch_install_hw_breakpoint(struct perf_event *bp);
  59void arch_uninstall_hw_breakpoint(struct perf_event *bp);
  60void hw_breakpoint_pmu_read(struct perf_event *bp);
  61void hw_breakpoint_pmu_unthrottle(struct perf_event *bp);
  62
  63extern void
  64arch_fill_perf_breakpoint(struct perf_event *bp);
  65
  66unsigned long encode_dr7(int drnum, unsigned int len, unsigned int type);
  67int decode_dr7(unsigned long dr7, int bpnum, unsigned *len, unsigned *type);
  68
  69extern int arch_bp_generic_fields(int x86_len, int x86_type,
  70                                  int *gen_len, int *gen_type);
  71
  72extern struct pmu perf_ops_bp;
  73
  74#endif  /* __KERNEL__ */
  75#endif  /* _I386_HW_BREAKPOINT_H */
  76
  77