ftrace.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef _LINUX_FTRACE_H
  2. #define _LINUX_FTRACE_H
  3. #ifdef CONFIG_FTRACE
  4. #include <linux/linkage.h>
  5. typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip);
  6. struct ftrace_ops {
  7. ftrace_func_t func;
  8. struct ftrace_ops *next;
  9. };
  10. /*
  11. * The ftrace_ops must be a static and should also
  12. * be read_mostly. These functions do modify read_mostly variables
  13. * so use them sparely. Never free an ftrace_op or modify the
  14. * next pointer after it has been registered. Even after unregistering
  15. * it, the next pointer may still be used internally.
  16. */
  17. int register_ftrace_function(struct ftrace_ops *ops);
  18. int unregister_ftrace_function(struct ftrace_ops *ops);
  19. void clear_ftrace_function(void);
  20. extern void ftrace_stub(unsigned long a0, unsigned long a1);
  21. extern void mcount(void);
  22. #else /* !CONFIG_FTRACE */
  23. # define register_ftrace_function(ops) do { } while (0)
  24. # define unregister_ftrace_function(ops) do { } while (0)
  25. # define clear_ftrace_function(ops) do { } while (0)
  26. #endif /* CONFIG_FTRACE */
  27. #ifdef CONFIG_FRAME_POINTER
  28. /* TODO: need to fix this for ARM */
  29. # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
  30. # define CALLER_ADDR1 ((unsigned long)__builtin_return_address(1))
  31. # define CALLER_ADDR2 ((unsigned long)__builtin_return_address(2))
  32. # define CALLER_ADDR3 ((unsigned long)__builtin_return_address(3))
  33. # define CALLER_ADDR4 ((unsigned long)__builtin_return_address(4))
  34. # define CALLER_ADDR5 ((unsigned long)__builtin_return_address(5))
  35. #else
  36. # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0))
  37. # define CALLER_ADDR1 0UL
  38. # define CALLER_ADDR2 0UL
  39. # define CALLER_ADDR3 0UL
  40. # define CALLER_ADDR4 0UL
  41. # define CALLER_ADDR5 0UL
  42. #endif
  43. #endif /* _LINUX_FTRACE_H */