runtime/kp_events.h - ktap

Data types defined

Macros defined

Source code

  1. #ifndef __KTAP_EVENTS_H__
  2. #define __KTAP_EVENTS_H__

  3. #include <linux/ftrace_event.h>
  4. #include <trace/syscall.h>
  5. #include <trace/events/syscalls.h>
  6. #include <linux/syscalls.h>
  7. #include <linux/kprobes.h>

  8. enum KTAP_EVENT_FIELD_TYPE {
  9.     KTAP_EVENT_FIELD_TYPE_INVALID = 0, /* arg type not support yet */

  10.     KTAP_EVENT_FIELD_TYPE_INT,
  11.     KTAP_EVENT_FIELD_TYPE_LONG,
  12.     KTAP_EVENT_FIELD_TYPE_STRING,

  13.     KTAP_EVENT_FIELD_TYPE_REGESTER,
  14.     KTAP_EVENT_FIELD_TYPE_CONST,
  15.     KTAP_EVENT_FIELD_TYPE_NIL /* arg not exist */
  16. };

  17. struct ktap_event_field {
  18.     enum KTAP_EVENT_FIELD_TYPE type;
  19.     int offset;
  20. };

  21. enum KTAP_EVENT_TYPE {
  22.     KTAP_EVENT_TYPE_PERF,
  23.     KTAP_EVENT_TYPE_TRACEPOINT,
  24.     KTAP_EVENT_TYPE_SYSCALL_ENTER,
  25.     KTAP_EVENT_TYPE_SYSCALL_EXIT,
  26.     KTAP_EVENT_TYPE_KPROBE,
  27. };

  28. struct ktap_event {
  29.     struct list_head list;
  30.     int type;
  31.     ktap_state_t *ks;
  32.     ktap_func_t *fn;
  33.     struct perf_event *perf;
  34.     int syscall_nr; /* for syscall event */
  35.     struct ktap_event_field fields[9]; /* arg1..arg9 */
  36.     ktap_str_t *name; /* intern probename string */

  37.     struct kprobe kp; /* kprobe event */
  38. };

  39. /* this structure allocate on stack */
  40. struct ktap_event_data {
  41.     struct ktap_event *event;
  42.     struct perf_sample_data *data;
  43.     struct pt_regs *regs;
  44.     ktap_str_t *argstr; /* for cache argstr intern string */
  45. };

  46. int kp_events_init(ktap_state_t *ks);
  47. void kp_events_exit(ktap_state_t *ks);

  48. int kp_event_create(ktap_state_t *ks, struct perf_event_attr *attr,
  49.             struct task_struct *task, const char *filter,
  50.             ktap_func_t *fn);
  51. int kp_event_create_tracepoint(ktap_state_t *ks, const char *event_name,
  52.                    ktap_func_t *fn);

  53. int kp_event_create_kprobe(ktap_state_t *ks, const char *event_name,
  54.                ktap_func_t *fn);
  55. void kp_event_getarg(ktap_state_t *ks, ktap_val_t *ra, int idx);
  56. const char *kp_event_tostr(ktap_state_t *ks);
  57. const ktap_str_t *kp_event_stringify(ktap_state_t *ks);

  58. #endif /* __KTAP_EVENTS_H__ */