mcount.S 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright IBM Corp. 2008,2009
  3. *
  4. * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
  5. *
  6. */
  7. #include <linux/linkage.h>
  8. #include <asm/asm-offsets.h>
  9. .section .kprobes.text, "ax"
  10. ENTRY(ftrace_stub)
  11. br %r14
  12. ENTRY(_mcount)
  13. #ifdef CONFIG_DYNAMIC_FTRACE
  14. br %r14
  15. ENTRY(ftrace_caller)
  16. #endif
  17. stm %r2,%r5,16(%r15)
  18. bras %r1,2f
  19. 0: .long ftrace_trace_function
  20. 1: .long function_trace_stop
  21. 2: l %r2,1b-0b(%r1)
  22. icm %r2,0xf,0(%r2)
  23. jnz 3f
  24. st %r14,56(%r15)
  25. lr %r0,%r15
  26. ahi %r15,-96
  27. l %r3,100(%r15)
  28. la %r2,0(%r14)
  29. st %r0,__SF_BACKCHAIN(%r15)
  30. la %r3,0(%r3)
  31. l %r14,0b-0b(%r1)
  32. l %r14,0(%r14)
  33. basr %r14,%r14
  34. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  35. l %r2,100(%r15)
  36. l %r3,152(%r15)
  37. ENTRY(ftrace_graph_caller)
  38. # The bras instruction gets runtime patched to call prepare_ftrace_return.
  39. # See ftrace_enable_ftrace_graph_caller. The patched instruction is:
  40. # bras %r14,prepare_ftrace_return
  41. bras %r14,0f
  42. 0: st %r2,100(%r15)
  43. #endif
  44. ahi %r15,96
  45. l %r14,56(%r15)
  46. 3: lm %r2,%r5,16(%r15)
  47. br %r14
  48. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  49. ENTRY(return_to_handler)
  50. stm %r2,%r5,16(%r15)
  51. st %r14,56(%r15)
  52. lr %r0,%r15
  53. ahi %r15,-96
  54. st %r0,__SF_BACKCHAIN(%r15)
  55. bras %r1,0f
  56. .long ftrace_return_to_handler
  57. 0: l %r2,0b-0b(%r1)
  58. basr %r14,%r2
  59. lr %r14,%r2
  60. ahi %r15,96
  61. lm %r2,%r5,16(%r15)
  62. br %r14
  63. #endif