Lines Matching refs:ainsn

220 	 * Basically, kp->ainsn.insn has an original instruction.
224 * from the kp->ainsn.insn.
468 synthesize_reljump(buf + len, p->ainsn.insn + len,
471 p->ainsn.boostable = 1;
506 switch (p->ainsn.opcode) {
520 regs->ip = regs->ip - INT3_INSN_SIZE + p->ainsn.size;
532 unsigned long func = regs->ip - INT3_INSN_SIZE + p->ainsn.size;
534 func += p->ainsn.rel32;
541 unsigned long ip = regs->ip - INT3_INSN_SIZE + p->ainsn.size;
543 ip += p->ainsn.rel32;
550 unsigned long ip = regs->ip - INT3_INSN_SIZE + p->ainsn.size;
552 int3_emulate_jcc(regs, p->ainsn.jcc.type, ip, p->ainsn.rel32);
558 unsigned long ip = regs->ip - INT3_INSN_SIZE + p->ainsn.size;
561 if (p->ainsn.loop.type != 3) { /* LOOP* */
562 if (p->ainsn.loop.asize == 32)
565 else if (p->ainsn.loop.asize == 64)
571 if (p->ainsn.loop.asize == 32)
574 else if (p->ainsn.loop.asize == 64)
581 if (p->ainsn.loop.type == 0) /* LOOPNE */
583 else if (p->ainsn.loop.type == 1) /* LOOPE */
587 ip += p->ainsn.rel32;
615 unsigned long offs = addrmode_regoffs[p->ainsn.indirect.reg];
617 int3_emulate_push(regs, regs->ip - INT3_INSN_SIZE + p->ainsn.size);
624 unsigned long offs = addrmode_regoffs[p->ainsn.indirect.reg];
643 p->ainsn.emulate_op = kprobe_emulate_ifmodifiers;
644 p->ainsn.opcode = opcode;
650 p->ainsn.emulate_op = kprobe_emulate_ret;
659 p->ainsn.emulate_op = kprobe_emulate_call;
661 p->ainsn.rel32 = *(s16 *)&insn->immediate.value;
663 p->ainsn.rel32 = *(s32 *)&insn->immediate.value;
667 p->ainsn.emulate_op = kprobe_emulate_jmp;
669 p->ainsn.rel32 = *(s8 *)&insn->immediate.value;
671 p->ainsn.rel32 = *(s16 *)&insn->immediate.value;
673 p->ainsn.rel32 = *(s32 *)&insn->immediate.value;
677 p->ainsn.emulate_op = kprobe_emulate_jcc;
678 p->ainsn.jcc.type = opcode & 0xf;
679 p->ainsn.rel32 = insn->immediate.value;
685 p->ainsn.emulate_op = kprobe_emulate_jcc;
686 p->ainsn.jcc.type = opcode & 0xf;
688 p->ainsn.rel32 = *(s16 *)&insn->immediate.value;
690 p->ainsn.rel32 = *(s32 *)&insn->immediate.value;
702 p->ainsn.emulate_op = kprobe_emulate_loop;
703 p->ainsn.loop.type = opcode & 0x3;
704 p->ainsn.loop.asize = insn->addr_bytes * 8;
705 p->ainsn.rel32 = *(s8 *)&insn->immediate.value;
715 p->ainsn.emulate_op = kprobe_emulate_call_indirect;
718 p->ainsn.emulate_op = kprobe_emulate_jmp_indirect;
725 if (!p->ainsn.emulate_op)
733 p->ainsn.indirect.reg = X86_MODRM_RM(opcode);
736 p->ainsn.indirect.reg += 8;
742 p->ainsn.size = insn->length;
754 len = __copy_instruction(buf, p->addr, p->ainsn.insn, &insn);
771 p->ainsn.tp_len = len;
772 perf_event_text_poke(p->ainsn.insn, NULL, 0, buf, len);
775 text_poke(p->ainsn.insn, buf, len);
790 memset(&p->ainsn, 0, sizeof(p->ainsn));
793 p->ainsn.insn = get_insn_slot();
794 if (!p->ainsn.insn)
799 free_insn_slot(p->ainsn.insn, 0);
800 p->ainsn.insn = NULL;
826 if (p->ainsn.insn) {
828 perf_event_text_poke(p->ainsn.insn, p->ainsn.insn,
829 p->ainsn.tp_len, NULL, 0);
830 free_insn_slot(p->ainsn.insn, p->ainsn.boostable);
831 p->ainsn.insn = NULL;
889 if (p->ainsn.boostable) {
898 regs->ip = (unsigned long)p->ainsn.insn;
909 if (p->ainsn.emulate_op) {
910 p->ainsn.emulate_op(p, regs);
917 regs->ip = (unsigned long)p->ainsn.insn;
927 * copy is p->ainsn.insn. We also doesn't use trap, but "int3" again
942 unsigned long copy_ip = (unsigned long)p->ainsn.insn;
1039 if ((unsigned long)p->ainsn.insn < regs->ip &&
1040 (unsigned long)p->ainsn.insn + MAX_INSN_SIZE > regs->ip) {
1057 if (unlikely(regs->ip == (unsigned long)cur->ainsn.insn)) {