LCOV - code coverage report
Current view: top level - arch/x86/include/asm - hw_breakpoint.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 2 2 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

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

Generated by: LCOV version 1.14