/* * Xtensa hardware breakpoints/watchpoints handling functions * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 2016 Cadence Design Systems Inc. */ #ifndef __ASM_XTENSA_HW_BREAKPOINT_H #define __ASM_XTENSA_HW_BREAKPOINT_H #ifdef CONFIG_HAVE_HW_BREAKPOINT #include <linux/kdebug.h> #include <linux/types.h> #include <uapi/linux/hw_breakpoint.h> /* Breakpoint */ #define XTENSA_BREAKPOINT_EXECUTE 0 /* Watchpoints */ #define XTENSA_BREAKPOINT_LOAD 1 #define XTENSA_BREAKPOINT_STORE 2 struct arch_hw_breakpoint { unsigned long address; u16 len; u16 type; }; struct perf_event_attr; struct perf_event; struct pt_regs; struct task_struct; int hw_breakpoint_slots(int type); int arch_check_bp_in_kernelspace(struct arch_hw_breakpoint *hw); int hw_breakpoint_arch_parse(struct perf_event *bp, const struct perf_event_attr *attr, struct arch_hw_breakpoint *hw); int hw_breakpoint_exceptions_notify(struct notifier_block *unused, unsigned long val, void *data); int arch_install_hw_breakpoint(struct perf_event *bp); void arch_uninstall_hw_breakpoint(struct perf_event *bp); void hw_breakpoint_pmu_read(struct perf_event *bp); int check_hw_breakpoint(struct pt_regs *regs); void clear_ptrace_hw_breakpoint(struct task_struct *tsk); void restore_dbreak(void); #else struct task_struct; static inline void clear_ptrace_hw_breakpoint(struct task_struct *tsk) { } #endif /* CONFIG_HAVE_HW_BREAKPOINT */ #endif /* __ASM_XTENSA_HW_BREAKPOINT_H */