Lines Matching refs:kp

68 kinst_emulate(struct trapframe *frame, const struct kinst_probe *kp)  in kinst_emulate()  argument
70 kinst_patchval_t instr = kp->kp_savedval; in kinst_emulate()
76 if (kp->kp_md.instlen == INSN_SIZE) { in kinst_emulate()
234 kinst_jump_next_instr(struct trapframe *frame, const struct kinst_probe *kp) in kinst_jump_next_instr() argument
236 frame->tf_sepc = (register_t)((const uint8_t *)kp->kp_patchpoint + in kinst_jump_next_instr()
237 kp->kp_md.instlen); in kinst_jump_next_instr()
243 kinst_trampoline_populate(struct kinst_probe *kp) in kinst_trampoline_populate() argument
249 ilen = kp->kp_md.instlen; in kinst_trampoline_populate()
250 kinst_memcpy(kp->kp_tramp, &kp->kp_savedval, ilen); in kinst_trampoline_populate()
263 kinst_memcpy(&kp->kp_tramp[ilen], &nop, INSN_C_SIZE); in kinst_trampoline_populate()
265 kinst_memcpy(&kp->kp_tramp[INSN_SIZE], &ebreak, INSN_SIZE); in kinst_trampoline_populate()
297 const struct kinst_probe *kp; in kinst_invop() local
306 addr == (uintptr_t)(ks->kp->kp_tramp + INSN_SIZE)) { in kinst_invop()
314 return (kinst_jump_next_instr(frame, ks->kp)); in kinst_invop()
317 LIST_FOREACH(kp, KINST_GETPROBE(addr), kp_hashnext) { in kinst_invop()
318 if ((uintptr_t)kp->kp_patchpoint == addr) in kinst_invop()
321 if (kp == NULL) in kinst_invop()
326 dtrace_probe(kp->kp_id, 0, 0, 0, 0, 0); in kinst_invop()
329 if (kp->kp_md.emulate) in kinst_invop()
330 return (kinst_emulate(frame, kp)); in kinst_invop()
333 ks->kp = kp; in kinst_invop()
341 frame->tf_sepc = (register_t)kp->kp_tramp; in kinst_invop()
347 kinst_patch_tracepoint(struct kinst_probe *kp, kinst_patchval_t val) in kinst_patch_tracepoint() argument
349 switch (kp->kp_patchval) { in kinst_patch_tracepoint()
351 *(uint16_t *)kp->kp_patchpoint = (uint16_t)val; in kinst_patch_tracepoint()
355 *kp->kp_patchpoint = val; in kinst_patch_tracepoint()
362 kinst_instr_dissect(struct kinst_probe *kp, int instrsize) in kinst_instr_dissect() argument
365 kinst_patchval_t instr = kp->kp_savedval; in kinst_instr_dissect()
368 kpmd = &kp->kp_md; in kinst_instr_dissect()
408 kinst_trampoline_populate(kp); in kinst_instr_dissect()
445 struct kinst_probe *kp; in kinst_make_probe() local
518 LIST_FOREACH(kp, KINST_GETPROBE(instr), kp_hashnext) { in kinst_make_probe()
519 if (strcmp(kp->kp_func, func) == 0 && in kinst_make_probe()
520 strtol(kp->kp_name, NULL, 10) == off) in kinst_make_probe()
527 kp = malloc(sizeof(struct kinst_probe), M_KINST, in kinst_make_probe()
529 kp->kp_func = func; in kinst_make_probe()
530 snprintf(kp->kp_name, sizeof(kp->kp_name), "%d", off); in kinst_make_probe()
531 kp->kp_patchpoint = (kinst_patchval_t *)instr; in kinst_make_probe()
532 kp->kp_savedval = v; in kinst_make_probe()
534 kp->kp_patchval = KINST_PATCHVAL; in kinst_make_probe()
536 kp->kp_patchval = KINST_C_PATCHVAL; in kinst_make_probe()
537 if ((kp->kp_tramp = kinst_trampoline_alloc(M_WAITOK)) == NULL) { in kinst_make_probe()
542 kinst_instr_dissect(kp, instrsize); in kinst_make_probe()
543 kinst_probe_create(kp, lf); in kinst_make_probe()