root/arch/powerpc/kernel/trace/ftrace_64_pg.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  * Split from ftrace_64.S
   4  */
   5 
   6 #include <linux/magic.h>
   7 #include <asm/ppc_asm.h>
   8 #include <asm/asm-offsets.h>
   9 #include <asm/ftrace.h>
  10 #include <asm/ppc-opcode.h>
  11 #include <asm/export.h>
  12 
  13 _GLOBAL_TOC(ftrace_caller)
  14         lbz     r3, PACA_FTRACE_ENABLED(r13)
  15         cmpdi   r3, 0
  16         beqlr
  17 
  18         /* Taken from output of objdump from lib64/glibc */
  19         mflr    r3
  20         ld      r11, 0(r1)
  21         stdu    r1, -112(r1)
  22         std     r3, 128(r1)
  23         ld      r4, 16(r11)
  24         subi    r3, r3, MCOUNT_INSN_SIZE
  25 .globl ftrace_call
  26 ftrace_call:
  27         bl      ftrace_stub
  28         nop
  29 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  30 .globl ftrace_graph_call
  31 ftrace_graph_call:
  32         b       ftrace_graph_stub
  33 _GLOBAL(ftrace_graph_stub)
  34 #endif
  35         ld      r0, 128(r1)
  36         mtlr    r0
  37         addi    r1, r1, 112
  38 
  39 _GLOBAL(ftrace_stub)
  40         blr
  41 
  42 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  43 _GLOBAL(ftrace_graph_caller)
  44         addi    r5, r1, 112
  45         /* load r4 with local address */
  46         ld      r4, 128(r1)
  47         subi    r4, r4, MCOUNT_INSN_SIZE
  48 
  49         /* Grab the LR out of the caller stack frame */
  50         ld      r11, 112(r1)
  51         ld      r3, 16(r11)
  52 
  53         bl      prepare_ftrace_return
  54         nop
  55 
  56         /*
  57          * prepare_ftrace_return gives us the address we divert to.
  58          * Change the LR in the callers stack frame to this.
  59          */
  60         ld      r11, 112(r1)
  61         std     r3, 16(r11)
  62 
  63         ld      r0, 128(r1)
  64         mtlr    r0
  65         addi    r1, r1, 112
  66         blr
  67 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */

/* [<][>][^][v][top][bottom][index][help] */