1
2#ifndef _ASM_S390_FTRACE_H
3#define _ASM_S390_FTRACE_H
4
5#define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
6#define ARCH_SUPPORTS_FTRACE_OPS 1
7#define MCOUNT_INSN_SIZE 6
8
9#ifndef __ASSEMBLY__
10
11#ifdef CONFIG_CC_IS_CLANG
12
13#define ftrace_return_address(n) 0UL
14#else
15#define ftrace_return_address(n) __builtin_return_address(n)
16#endif
17
18void ftrace_caller(void);
19
20extern void *ftrace_func;
21
22struct dyn_arch_ftrace { };
23
24#define MCOUNT_ADDR 0
25#define FTRACE_ADDR ((unsigned long)ftrace_caller)
26
27#define KPROBE_ON_FTRACE_NOP 0
28#define KPROBE_ON_FTRACE_CALL 1
29
30struct module;
31struct dyn_ftrace;
32
33bool ftrace_need_init_nop(void);
34#define ftrace_need_init_nop ftrace_need_init_nop
35
36int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec);
37#define ftrace_init_nop ftrace_init_nop
38
39static inline unsigned long ftrace_call_adjust(unsigned long addr)
40{
41 return addr;
42}
43
44struct ftrace_regs {
45 struct pt_regs regs;
46};
47
48static __always_inline struct pt_regs *arch_ftrace_get_regs(struct ftrace_regs *fregs)
49{
50 struct pt_regs *regs = &fregs->regs;
51
52 if (test_pt_regs_flag(regs, PIF_FTRACE_FULL_REGS))
53 return regs;
54 return NULL;
55}
56
57static __always_inline void ftrace_instruction_pointer_set(struct ftrace_regs *fregs,
58 unsigned long ip)
59{
60 fregs->regs.psw.addr = ip;
61}
62
63
64
65
66
67
68
69
70static inline void arch_ftrace_set_direct_caller(struct pt_regs *regs, unsigned long addr)
71{
72 regs->orig_gpr2 = addr;
73}
74
75
76
77
78
79
80
81
82#define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS
83static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
84{
85 return is_compat_task();
86}
87
88#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
89static inline bool arch_syscall_match_sym_name(const char *sym,
90 const char *name)
91{
92
93
94
95
96
97 return !strcmp(sym + 7, name) || !strcmp(sym + 8, name);
98}
99
100#endif
101
102#ifdef CONFIG_FUNCTION_TRACER
103
104#define FTRACE_NOP_INSN .word 0xc004, 0x0000, 0x0000
105
106#ifndef CC_USING_HOTPATCH
107
108#define FTRACE_GEN_MCOUNT_RECORD(name) \
109 .section __mcount_loc, "a", @progbits; \
110 .quad name; \
111 .previous;
112
113#else
114
115#define FTRACE_GEN_MCOUNT_RECORD(name)
116
117#endif
118
119#define FTRACE_GEN_NOP_ASM(name) \
120 FTRACE_GEN_MCOUNT_RECORD(name) \
121 FTRACE_NOP_INSN
122
123#else
124
125#define FTRACE_GEN_NOP_ASM(name)
126
127#endif
128
129#endif
130