probe.h 955 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #ifndef PROBE_H_
  2. #define PROBE_H_
  3. #include "util.h"
  4. typedef void * (*probefunc_t)(void);
  5. struct probe {
  6. const char *name;
  7. probefunc_t func;
  8. const char *func_name;
  9. int __end[0] ALIGN_MAX;
  10. };
  11. #define DECLARE_PROBES(_type) \
  12. extern const struct probe __start_probe_##_type; \
  13. extern const struct probe __stop_probe_##_type
  14. #define DEFINE_PROBE(_type, _name, _func) \
  15. static const struct probe probe_##_type##_##_name \
  16. __attribute__((__used__)) \
  17. __attribute__((__section__("probe_" stringify(_type)))) \
  18. = { \
  19. .name = stringify(_type) "/" stringify(_name), \
  20. .func = (probefunc_t)(_func), \
  21. .func_name = stringify(_func), \
  22. }
  23. #define for_each_probe(_ptr, _type) \
  24. for (_ptr = &__start_probe_##_type; \
  25. _ptr < &__stop_probe_##_type && \
  26. ({ print_probe_message(_ptr); 1; }); \
  27. _ptr++)
  28. void print_probe_message(const struct probe *probe);
  29. #endif /* PROBE_H_ */