Lines Matching refs:kcb
216 static void save_previous_kprobe(struct kprobe_ctlblk *kcb) in save_previous_kprobe() argument
218 kcb->prev_kprobe.kp = kprobe_running(); in save_previous_kprobe()
219 kcb->prev_kprobe.status = kcb->kprobe_status; in save_previous_kprobe()
220 kcb->prev_kprobe.old_SR = kcb->kprobe_old_SR; in save_previous_kprobe()
221 kcb->prev_kprobe.saved_SR = kcb->kprobe_saved_SR; in save_previous_kprobe()
222 kcb->prev_kprobe.saved_epc = kcb->kprobe_saved_epc; in save_previous_kprobe()
225 static void restore_previous_kprobe(struct kprobe_ctlblk *kcb) in restore_previous_kprobe() argument
227 __this_cpu_write(current_kprobe, kcb->prev_kprobe.kp); in restore_previous_kprobe()
228 kcb->kprobe_status = kcb->prev_kprobe.status; in restore_previous_kprobe()
229 kcb->kprobe_old_SR = kcb->prev_kprobe.old_SR; in restore_previous_kprobe()
230 kcb->kprobe_saved_SR = kcb->prev_kprobe.saved_SR; in restore_previous_kprobe()
231 kcb->kprobe_saved_epc = kcb->prev_kprobe.saved_epc; in restore_previous_kprobe()
235 struct kprobe_ctlblk *kcb) in set_current_kprobe() argument
238 kcb->kprobe_saved_SR = kcb->kprobe_old_SR = (regs->cp0_status & ST0_IE); in set_current_kprobe()
239 kcb->kprobe_saved_epc = regs->cp0_epc; in set_current_kprobe()
256 struct kprobe_ctlblk *kcb) in evaluate_branch_instruction() argument
267 kcb->flags |= SKIP_DELAYSLOT; in evaluate_branch_instruction()
269 kcb->flags &= ~SKIP_DELAYSLOT; in evaluate_branch_instruction()
276 kcb->flags |= SKIP_DELAYSLOT; in evaluate_branch_instruction()
278 kcb->target_epc = regs->cp0_epc; in evaluate_branch_instruction()
290 struct kprobe_ctlblk *kcb) in prepare_singlestep() argument
301 ret = evaluate_branch_instruction(p, regs, kcb); in prepare_singlestep()
324 struct kprobe_ctlblk *kcb) in resume_execution() argument
327 regs->cp0_epc = kcb->target_epc; in resume_execution()
329 unsigned long orig_epc = kcb->kprobe_saved_epc; in resume_execution()
339 struct kprobe_ctlblk *kcb; in kprobe_handler() local
348 kcb = get_kprobe_ctlblk(); in kprobe_handler()
354 if (kcb->kprobe_status == KPROBE_HIT_SS && in kprobe_handler()
357 regs->cp0_status |= kcb->kprobe_saved_SR; in kprobe_handler()
367 save_previous_kprobe(kcb); in kprobe_handler()
368 set_current_kprobe(p, regs, kcb); in kprobe_handler()
370 prepare_singlestep(p, regs, kcb); in kprobe_handler()
371 kcb->kprobe_status = KPROBE_REENTER; in kprobe_handler()
372 if (kcb->flags & SKIP_DELAYSLOT) { in kprobe_handler()
373 resume_execution(p, regs, kcb); in kprobe_handler()
374 restore_previous_kprobe(kcb); in kprobe_handler()
411 set_current_kprobe(p, regs, kcb); in kprobe_handler()
412 kcb->kprobe_status = KPROBE_HIT_ACTIVE; in kprobe_handler()
420 prepare_singlestep(p, regs, kcb); in kprobe_handler()
421 if (kcb->flags & SKIP_DELAYSLOT) { in kprobe_handler()
422 kcb->kprobe_status = KPROBE_HIT_SSDONE; in kprobe_handler()
425 resume_execution(p, regs, kcb); in kprobe_handler()
428 kcb->kprobe_status = KPROBE_HIT_SS; in kprobe_handler()
441 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); in post_kprobe_handler() local
446 if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) { in post_kprobe_handler()
447 kcb->kprobe_status = KPROBE_HIT_SSDONE; in post_kprobe_handler()
451 resume_execution(cur, regs, kcb); in post_kprobe_handler()
453 regs->cp0_status |= kcb->kprobe_saved_SR; in post_kprobe_handler()
456 if (kcb->kprobe_status == KPROBE_REENTER) { in post_kprobe_handler()
457 restore_previous_kprobe(kcb); in post_kprobe_handler()
470 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); in kprobe_fault_handler() local
475 if (kcb->kprobe_status & KPROBE_HIT_SS) { in kprobe_fault_handler()
476 resume_execution(cur, regs, kcb); in kprobe_fault_handler()
477 regs->cp0_status |= kcb->kprobe_old_SR; in kprobe_fault_handler()
523 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); in setjmp_pre_handler() local
525 kcb->jprobe_saved_regs = *regs; in setjmp_pre_handler()
526 kcb->jprobe_saved_sp = regs->regs[29]; in setjmp_pre_handler()
528 memcpy(kcb->jprobes_stack, (void *)kcb->jprobe_saved_sp, in setjmp_pre_handler()
529 MIN_JPROBES_STACK_SIZE(kcb->jprobe_saved_sp)); in setjmp_pre_handler()
551 struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); in longjmp_break_handler() local
555 *regs = kcb->jprobe_saved_regs; in longjmp_break_handler()
556 memcpy((void *)kcb->jprobe_saved_sp, kcb->jprobes_stack, in longjmp_break_handler()
557 MIN_JPROBES_STACK_SIZE(kcb->jprobe_saved_sp)); in longjmp_break_handler()