mcount64.S 1.2 KB

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