Lines Matching refs:kp

99 kinst_riprel_disp(struct kinst_probe *kp, void *dst)  in kinst_riprel_disp()  argument
101 return ((uint32_t)((intptr_t)kp->kp_patchpoint + kp->kp_md.disp - in kinst_riprel_disp()
106 kinst_trampoline_populate(struct kinst_probe *kp, uint8_t *tramp) in kinst_trampoline_populate() argument
112 ilen = kp->kp_md.tinstlen; in kinst_trampoline_populate()
114 kinst_memcpy(tramp, kp->kp_md.template, ilen); in kinst_trampoline_populate()
115 if ((kp->kp_md.flags & KINST_F_RIPREL) != 0) { in kinst_trampoline_populate()
116 disp = kinst_riprel_disp(kp, tramp); in kinst_trampoline_populate()
117 kinst_memcpy(&tramp[kp->kp_md.dispoff], &disp, sizeof(uint32_t)); in kinst_trampoline_populate()
132 instr = kp->kp_patchpoint + kp->kp_md.instlen; in kinst_trampoline_populate()
141 struct kinst_probe *kp; in kinst_invop() local
148 LIST_FOREACH(kp, KINST_GETPROBE(addr), kp_hashnext) { in kinst_invop()
149 if ((uintptr_t)kp->kp_patchpoint == addr) in kinst_invop()
152 if (kp == NULL) in kinst_invop()
164 dtrace_probe(kp->kp_id, 0, 0, 0, 0, 0); in kinst_invop()
167 kpmd = &kp->kp_md; in kinst_invop()
173 retaddr = (uintptr_t)(kp->kp_patchpoint + kpmd->instlen); in kinst_invop()
177 frame->tf_rip = (uintptr_t)(kp->kp_patchpoint + in kinst_invop()
215 kinst_patch_tracepoint(kp, kp->kp_savedval); in kinst_invop()
216 frame->tf_rip = (register_t)kp->kp_patchpoint; in kinst_invop()
218 kinst_trampoline_populate(kp, tramp); in kinst_invop()
226 kinst_patch_tracepoint(struct kinst_probe *kp, kinst_patchval_t val) in kinst_patch_tracepoint() argument
233 *kp->kp_patchpoint = val; in kinst_patch_tracepoint()
239 kinst_set_disp8(struct kinst_probe *kp, uint8_t byte) in kinst_set_disp8() argument
241 kp->kp_md.disp = (int64_t)(int8_t)byte; in kinst_set_disp8()
245 kinst_set_disp32(struct kinst_probe *kp, uint8_t *bytes) in kinst_set_disp32() argument
250 kp->kp_md.disp = (int64_t)disp32; in kinst_set_disp32()
279 kinst_instr_dissect(struct kinst_probe *kp, uint8_t **instr) in kinst_instr_dissect() argument
286 kpmd = &kp->kp_md; in kinst_instr_dissect()
344 kinst_set_disp32(kp, &bytes[dispoff]); in kinst_instr_dissect()
359 kinst_set_disp8(kp, bytes[dispoff]); in kinst_instr_dissect()
365 kinst_set_disp32(kp, &bytes[dispoff]); in kinst_instr_dissect()
371 kinst_set_disp8(kp, bytes[dispoff]); in kinst_instr_dissect()
378 kinst_set_disp32(kp, &bytes[dispoff]); in kinst_instr_dissect()
414 kinst_set_disp32(kp, &bytes[dispoff]); in kinst_instr_dissect()
421 kinst_set_disp8(kp, bytes[dispoff]); in kinst_instr_dissect()
423 kinst_set_disp32(kp, &bytes[dispoff]); in kinst_instr_dissect()
499 struct kinst_probe *kp; in kinst_make_probe() local
570 LIST_FOREACH(kp, KINST_GETPROBE(instr), kp_hashnext) { in kinst_make_probe()
571 if (strcmp(kp->kp_func, func) == 0 && in kinst_make_probe()
572 strtol(kp->kp_name, NULL, 10) == off) in kinst_make_probe()
579 kp = malloc(sizeof(struct kinst_probe), M_KINST, in kinst_make_probe()
581 kp->kp_func = func; in kinst_make_probe()
582 snprintf(kp->kp_name, sizeof(kp->kp_name), "%d", off); in kinst_make_probe()
583 kp->kp_savedval = *instr; in kinst_make_probe()
584 kp->kp_patchval = KINST_PATCHVAL; in kinst_make_probe()
585 kp->kp_patchpoint = instr; in kinst_make_probe()
587 error = kinst_instr_dissect(kp, &instr); in kinst_make_probe()
591 kinst_probe_create(kp, lf); in kinst_make_probe()