mcount64.S 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. larl %r1,function_trace_stop
  19. icm %r1,0xf,0(%r1)
  20. bnzr %r14
  21. stmg %r2,%r5,32(%r15)
  22. stg %r14,112(%r15)
  23. lgr %r1,%r15
  24. aghi %r15,-160
  25. stg %r1,__SF_BACKCHAIN(%r15)
  26. lgr %r2,%r14
  27. lg %r3,168(%r15)
  28. aghi %r2,-MCOUNT_INSN_SIZE
  29. larl %r14,ftrace_trace_function
  30. lg %r14,0(%r14)
  31. basr %r14,%r14
  32. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  33. lg %r2,168(%r15)
  34. lg %r3,272(%r15)
  35. ENTRY(ftrace_graph_caller)
  36. # The bras instruction gets runtime patched to call prepare_ftrace_return.
  37. # See ftrace_enable_ftrace_graph_caller. The patched instruction is:
  38. # bras %r14,prepare_ftrace_return
  39. bras %r14,0f
  40. 0: stg %r2,168(%r15)
  41. #endif
  42. aghi %r15,160
  43. lmg %r2,%r5,32(%r15)
  44. lg %r14,112(%r15)
  45. br %r14
  46. #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  47. ENTRY(return_to_handler)
  48. stmg %r2,%r5,32(%r15)
  49. lgr %r1,%r15
  50. aghi %r15,-160
  51. stg %r1,__SF_BACKCHAIN(%r15)
  52. brasl %r14,ftrace_return_to_handler
  53. aghi %r15,160
  54. lgr %r14,%r2
  55. lmg %r2,%r5,32(%r15)
  56. br %r14
  57. #endif