Lines Matching +full:no +full:- +full:pc +full:- +full:write

1 // SPDX-License-Identifier: GPL-2.0-only
15 #include <asm/debug-monitors.h>
24 static int ftrace_modify_code(unsigned long pc, u32 old, u32 new, in ftrace_modify_code() argument
32 * could cause us to read or write to someplace that could cause harm. in ftrace_modify_code()
38 if (aarch64_insn_read((void *)pc, &replaced)) in ftrace_modify_code()
39 return -EFAULT; in ftrace_modify_code()
42 return -EINVAL; in ftrace_modify_code()
44 if (aarch64_insn_patch_text_nosync((void *)pc, new)) in ftrace_modify_code()
45 return -EPERM; in ftrace_modify_code()
55 unsigned long pc; in ftrace_update_ftrace_func() local
58 pc = (unsigned long)&ftrace_call; in ftrace_update_ftrace_func()
59 new = aarch64_insn_gen_branch_imm(pc, (unsigned long)func, in ftrace_update_ftrace_func()
62 return ftrace_modify_code(pc, 0, new, false); in ftrace_update_ftrace_func()
70 unsigned long pc = rec->ip; in ftrace_make_call() local
72 long offset = (long)pc - (long)addr; in ftrace_make_call()
74 if (offset < -SZ_128M || offset >= SZ_128M) { in ftrace_make_call()
90 mod = __module_text_address(pc); in ftrace_make_call()
94 return -EINVAL; in ftrace_make_call()
109 dst = mod->arch.ftrace_trampoline; in ftrace_make_call()
114 return -EINVAL; in ftrace_make_call()
126 * Neoverse-N1 erratum #1542419 does require one in ftrace_make_call()
130 * certainly not a fast-path. in ftrace_make_call()
137 return -EINVAL; in ftrace_make_call()
142 new = aarch64_insn_gen_branch_imm(pc, addr, AARCH64_INSN_BRANCH_LINK); in ftrace_make_call()
144 return ftrace_modify_code(pc, old, new, true); in ftrace_make_call()
153 unsigned long pc = rec->ip; in ftrace_make_nop() local
156 long offset = (long)pc - (long)addr; in ftrace_make_nop()
158 if (offset < -SZ_128M || offset >= SZ_128M) { in ftrace_make_nop()
164 * dealing with an out-of-range condition, we can assume it in ftrace_make_nop()
169 mod = __module_text_address(pc); in ftrace_make_nop()
173 return -EINVAL; in ftrace_make_nop()
183 if (aarch64_insn_read((void *)pc, &replaced)) in ftrace_make_nop()
184 return -EFAULT; in ftrace_make_nop()
187 !within_module(pc + aarch64_get_branch_offset(replaced), in ftrace_make_nop()
189 return -EINVAL; in ftrace_make_nop()
193 return -EINVAL; in ftrace_make_nop()
196 old = aarch64_insn_gen_branch_imm(pc, addr, in ftrace_make_nop()
202 return ftrace_modify_code(pc, old, new, validate); in ftrace_make_nop()
232 if (unlikely(atomic_read(&current->tracing_graph_pause))) in prepare_ftrace_return()
237 * No protection against faulting at *parent, which may be seen in prepare_ftrace_return()
253 unsigned long pc = (unsigned long)&ftrace_graph_call; in ftrace_modify_graph_caller() local
256 branch = aarch64_insn_gen_branch_imm(pc, in ftrace_modify_graph_caller()
262 return ftrace_modify_code(pc, nop, branch, true); in ftrace_modify_graph_caller()
264 return ftrace_modify_code(pc, branch, nop, true); in ftrace_modify_graph_caller()