Lines Matching refs:p
23 int __kprobes arch_prepare_kprobe(struct kprobe *p) in arch_prepare_kprobe() argument
26 if ((unsigned long)p->addr & 0x01) in arch_prepare_kprobe()
31 p->ainsn.is_short = is_short_instr((unsigned long)p->addr); in arch_prepare_kprobe()
32 p->opcode = *p->addr; in arch_prepare_kprobe()
37 void __kprobes arch_arm_kprobe(struct kprobe *p) in arch_arm_kprobe() argument
39 *p->addr = UNIMP_S_INSTRUCTION; in arch_arm_kprobe()
41 flush_icache_range((unsigned long)p->addr, in arch_arm_kprobe()
42 (unsigned long)p->addr + sizeof(kprobe_opcode_t)); in arch_arm_kprobe()
45 void __kprobes arch_disarm_kprobe(struct kprobe *p) in arch_disarm_kprobe() argument
47 *p->addr = p->opcode; in arch_disarm_kprobe()
49 flush_icache_range((unsigned long)p->addr, in arch_disarm_kprobe()
50 (unsigned long)p->addr + sizeof(kprobe_opcode_t)); in arch_disarm_kprobe()
53 void __kprobes arch_remove_kprobe(struct kprobe *p) in arch_remove_kprobe() argument
55 arch_disarm_kprobe(p); in arch_remove_kprobe()
58 if (p->ainsn.t1_addr) { in arch_remove_kprobe()
59 *(p->ainsn.t1_addr) = p->ainsn.t1_opcode; in arch_remove_kprobe()
61 flush_icache_range((unsigned long)p->ainsn.t1_addr, in arch_remove_kprobe()
62 (unsigned long)p->ainsn.t1_addr + in arch_remove_kprobe()
65 p->ainsn.t1_addr = NULL; in arch_remove_kprobe()
68 if (p->ainsn.t2_addr) { in arch_remove_kprobe()
69 *(p->ainsn.t2_addr) = p->ainsn.t2_opcode; in arch_remove_kprobe()
71 flush_icache_range((unsigned long)p->ainsn.t2_addr, in arch_remove_kprobe()
72 (unsigned long)p->ainsn.t2_addr + in arch_remove_kprobe()
75 p->ainsn.t2_addr = NULL; in arch_remove_kprobe()
91 static inline void __kprobes set_current_kprobe(struct kprobe *p) in set_current_kprobe() argument
93 __this_cpu_write(current_kprobe, p); in set_current_kprobe()
96 static void __kprobes resume_execution(struct kprobe *p, unsigned long addr, in resume_execution() argument
102 if (p->ainsn.t1_addr) { in resume_execution()
103 *(p->ainsn.t1_addr) = p->ainsn.t1_opcode; in resume_execution()
105 flush_icache_range((unsigned long)p->ainsn.t1_addr, in resume_execution()
106 (unsigned long)p->ainsn.t1_addr + in resume_execution()
109 p->ainsn.t1_addr = NULL; in resume_execution()
112 if (p->ainsn.t2_addr) { in resume_execution()
113 *(p->ainsn.t2_addr) = p->ainsn.t2_opcode; in resume_execution()
115 flush_icache_range((unsigned long)p->ainsn.t2_addr, in resume_execution()
116 (unsigned long)p->ainsn.t2_addr + in resume_execution()
119 p->ainsn.t2_addr = NULL; in resume_execution()
125 static void __kprobes setup_singlestep(struct kprobe *p, struct pt_regs *regs) in setup_singlestep() argument
136 *(p->addr) = p->opcode; in setup_singlestep()
138 flush_icache_range((unsigned long)p->addr, in setup_singlestep()
139 (unsigned long)p->addr + sizeof(kprobe_opcode_t)); in setup_singlestep()
153 if (!p->ainsn.is_short) { in setup_singlestep()
170 disasm_next_pc((unsigned long)p->addr, regs, in setup_singlestep()
174 p->ainsn.t1_addr = (kprobe_opcode_t *) next_pc; in setup_singlestep()
175 p->ainsn.t1_opcode = *(p->ainsn.t1_addr); in setup_singlestep()
176 *(p->ainsn.t1_addr) = TRAP_S_2_INSTRUCTION; in setup_singlestep()
178 flush_icache_range((unsigned long)p->ainsn.t1_addr, in setup_singlestep()
179 (unsigned long)p->ainsn.t1_addr + in setup_singlestep()
183 p->ainsn.t2_addr = (kprobe_opcode_t *) tgt_if_br; in setup_singlestep()
184 p->ainsn.t2_opcode = *(p->ainsn.t2_addr); in setup_singlestep()
185 *(p->ainsn.t2_addr) = TRAP_S_2_INSTRUCTION; in setup_singlestep()
187 flush_icache_range((unsigned long)p->ainsn.t2_addr, in setup_singlestep()
188 (unsigned long)p->ainsn.t2_addr + in setup_singlestep()
196 struct kprobe *p; in arc_kprobe_handler() local
202 p = get_kprobe((unsigned long *)addr); in arc_kprobe_handler()
204 if (p) { in arc_kprobe_handler()
214 set_current_kprobe(p); in arc_kprobe_handler()
215 kprobes_inc_nmissed_count(p); in arc_kprobe_handler()
216 setup_singlestep(p, regs); in arc_kprobe_handler()
221 set_current_kprobe(p); in arc_kprobe_handler()
229 if (!p->pre_handler || !p->pre_handler(p, regs)) { in arc_kprobe_handler()
230 setup_singlestep(p, regs); in arc_kprobe_handler()
383 static int __kprobes trampoline_probe_handler(struct kprobe *p, in trampoline_probe_handler() argument
405 int __kprobes arch_trampoline_kprobe(struct kprobe *p) in arch_trampoline_kprobe() argument
407 if (p->addr == (kprobe_opcode_t *) &__kretprobe_trampoline) in arch_trampoline_kprobe()