kcov.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _LINUX_KCOV_H
  3. #define _LINUX_KCOV_H
  4. #include <uapi/linux/kcov.h>
  5. struct task_struct;
  6. #ifdef CONFIG_KCOV
  7. enum kcov_mode {
  8. /* Coverage collection is not enabled yet. */
  9. KCOV_MODE_DISABLED = 0,
  10. /* KCOV was initialized, but tracing mode hasn't been chosen yet. */
  11. KCOV_MODE_INIT = 1,
  12. /*
  13. * Tracing coverage collection mode.
  14. * Covered PCs are collected in a per-task buffer.
  15. */
  16. KCOV_MODE_TRACE_PC = 2,
  17. /* Collecting comparison operands mode. */
  18. KCOV_MODE_TRACE_CMP = 3,
  19. };
  20. #define KCOV_IN_CTXSW (1 << 30)
  21. void kcov_task_init(struct task_struct *t);
  22. void kcov_task_exit(struct task_struct *t);
  23. #define kcov_prepare_switch(t) \
  24. do { \
  25. (t)->kcov_mode |= KCOV_IN_CTXSW; \
  26. } while (0)
  27. #define kcov_finish_switch(t) \
  28. do { \
  29. (t)->kcov_mode &= ~KCOV_IN_CTXSW; \
  30. } while (0)
  31. #else
  32. static inline void kcov_task_init(struct task_struct *t) {}
  33. static inline void kcov_task_exit(struct task_struct *t) {}
  34. static inline void kcov_prepare_switch(struct task_struct *t) {}
  35. static inline void kcov_finish_switch(struct task_struct *t) {}
  36. #endif /* CONFIG_KCOV */
  37. #endif /* _LINUX_KCOV_H */