mcount.S 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * Copyright IBM Corp. 2008,2009
  3. *
  4. * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>,
  5. *
  6. */
  7. #include <asm/asm-offsets.h>
  8. .globl ftrace_stub
  9. ftrace_stub:
  10. br %r14
  11. .globl _mcount
  12. _mcount:
  13. #ifdef CONFIG_DYNAMIC_FTRACE
  14. br %r14
  15. .data
  16. .globl ftrace_dyn_func
  17. ftrace_dyn_func:
  18. .long ftrace_stub
  19. .previous
  20. .globl ftrace_caller
  21. ftrace_caller:
  22. #endif
  23. stm %r2,%r5,16(%r15)
  24. bras %r1,2f
  25. #ifdef CONFIG_DYNAMIC_FTRACE
  26. 0: .long ftrace_dyn_func
  27. #else
  28. 0: .long ftrace_trace_function
  29. #endif
  30. 1: .long function_trace_stop
  31. 2: l %r2,1b-0b(%r1)
  32. icm %r2,0xf,0(%r2)
  33. jnz 3f
  34. st %r14,56(%r15)
  35. lr %r0,%r15
  36. ahi %r15,-96
  37. l %r3,100(%r15)
  38. la %r2,0(%r14)
  39. st %r0,__SF_BACKCHAIN(%r15)
  40. la %r3,0(%r3)
  41. l %r14,0b-0b(%r1)
  42. l %r14,0(%r14)
  43. basr %r14,%r14
  44. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  45. #ifdef CONFIG_DYNAMIC_FTRACE
  46. .globl ftrace_graph_caller
  47. ftrace_graph_caller:
  48. # This unconditional branch gets runtime patched. Change only if
  49. # you know what you are doing. See ftrace_enable_graph_caller().
  50. j 1f
  51. #endif
  52. bras %r1,0f
  53. .long prepare_ftrace_return
  54. 0: l %r2,152(%r15)
  55. l %r4,0(%r1)
  56. l %r3,100(%r15)
  57. basr %r14,%r4
  58. st %r2,100(%r15)
  59. 1:
  60. #endif
  61. ahi %r15,96
  62. l %r14,56(%r15)
  63. 3: lm %r2,%r5,16(%r15)
  64. br %r14
  65. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  66. .globl return_to_handler
  67. return_to_handler:
  68. stm %r2,%r5,16(%r15)
  69. st %r14,56(%r15)
  70. lr %r0,%r15
  71. ahi %r15,-96
  72. st %r0,__SF_BACKCHAIN(%r15)
  73. bras %r1,0f
  74. .long ftrace_return_to_handler
  75. 0: l %r2,0b-0b(%r1)
  76. basr %r14,%r2
  77. lr %r14,%r2
  78. ahi %r15,96
  79. lm %r2,%r5,16(%r15)
  80. br %r14
  81. #endif