mcount.S 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. #include <asm/ftrace.h>
  10. .section .kprobes.text, "ax"
  11. ENTRY(ftrace_stub)
  12. br %r14
  13. ENTRY(_mcount)
  14. #ifdef CONFIG_DYNAMIC_FTRACE
  15. br %r14
  16. ENTRY(ftrace_caller)
  17. #endif
  18. stm %r2,%r5,16(%r15)
  19. bras %r1,2f
  20. 0: .long ftrace_trace_function
  21. 1: .long function_trace_stop
  22. 2: l %r2,1b-0b(%r1)
  23. icm %r2,0xf,0(%r2)
  24. jnz 3f
  25. st %r14,56(%r15)
  26. lr %r0,%r15
  27. ahi %r15,-96
  28. l %r3,100(%r15)
  29. la %r2,0(%r14)
  30. st %r0,__SF_BACKCHAIN(%r15)
  31. la %r3,0(%r3)
  32. ahi %r2,-MCOUNT_INSN_SIZE
  33. l %r14,0b-0b(%r1)
  34. l %r14,0(%r14)
  35. basr %r14,%r14
  36. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  37. l %r2,100(%r15)
  38. l %r3,152(%r15)
  39. ENTRY(ftrace_graph_caller)
  40. # The bras instruction gets runtime patched to call prepare_ftrace_return.
  41. # See ftrace_enable_ftrace_graph_caller. The patched instruction is:
  42. # bras %r14,prepare_ftrace_return
  43. bras %r14,0f
  44. 0: st %r2,100(%r15)
  45. #endif
  46. ahi %r15,96
  47. l %r14,56(%r15)
  48. 3: lm %r2,%r5,16(%r15)
  49. br %r14
  50. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  51. ENTRY(return_to_handler)
  52. stm %r2,%r5,16(%r15)
  53. st %r14,56(%r15)
  54. lr %r0,%r15
  55. ahi %r15,-96
  56. st %r0,__SF_BACKCHAIN(%r15)
  57. bras %r1,0f
  58. .long ftrace_return_to_handler
  59. 0: l %r2,0b-0b(%r1)
  60. basr %r14,%r2
  61. lr %r14,%r2
  62. ahi %r15,96
  63. lm %r2,%r5,16(%r15)
  64. br %r14
  65. #endif