Lines Matching refs:insn
194 static int insn_is_indirect_jump(struct insn *insn) in insn_is_indirect_jump() argument
196 return ((insn->opcode.bytes[0] == 0xff && in insn_is_indirect_jump()
197 (X86_MODRM_REG(insn->modrm.value) & 6) == 4) || /* Jump */ in insn_is_indirect_jump()
198 insn->opcode.bytes[0] == 0xea); /* Segment based jump */ in insn_is_indirect_jump()
202 static int insn_jump_into_range(struct insn *insn, unsigned long start, int len) in insn_jump_into_range() argument
206 switch (insn->opcode.bytes[0]) { in insn_jump_into_range()
215 if ((insn->opcode.bytes[1] & 0xf0) == 0x80) /* jcc near */ in insn_jump_into_range()
219 if ((insn->opcode.bytes[0] & 0xf0) == 0x70) /* jcc short */ in insn_jump_into_range()
223 target = (unsigned long)insn->next_byte + insn->immediate.value; in insn_jump_into_range()
232 struct insn insn; in can_optimize() local
264 kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); in can_optimize()
265 insn_get_length(&insn); in can_optimize()
267 if (insn.opcode.bytes[0] == BREAKPOINT_INSTRUCTION) in can_optimize()
270 insn.kaddr = (void *)addr; in can_optimize()
271 insn.next_byte = (void *)(addr + insn.length); in can_optimize()
273 if (insn_is_indirect_jump(&insn) || in can_optimize()
274 insn_jump_into_range(&insn, paddr + INT3_SIZE, in can_optimize()
277 addr += insn.length; in can_optimize()
310 if (op->optinsn.insn) { in __arch_remove_optimized_kprobe()
311 free_optinsn_slot(op->optinsn.insn, dirty); in __arch_remove_optimized_kprobe()
312 op->optinsn.insn = NULL; in __arch_remove_optimized_kprobe()
337 op->optinsn.insn = get_optinsn_slot(); in arch_prepare_optimized_kprobe()
338 if (!op->optinsn.insn) in arch_prepare_optimized_kprobe()
345 rel = (long)op->optinsn.insn - (long)op->kp.addr + RELATIVEJUMP_SIZE; in arch_prepare_optimized_kprobe()
351 buf = (u8 *)op->optinsn.insn; in arch_prepare_optimized_kprobe()
390 s32 rel = (s32)((long)op->optinsn.insn - in arch_optimize_kprobes()
403 op->optinsn.insn); in arch_optimize_kprobes()
418 op->optinsn.insn); in arch_unoptimize_kprobe()
444 regs->ip = (unsigned long)op->optinsn.insn + TMPL_END_IDX; in setup_detour_execution()