Lines Matching refs:insn

121 	} __packed *insn;  in __synthesize_relative_insn()  local
123 insn = (struct __arch_relative_insn *)from; in __synthesize_relative_insn()
124 insn->raddr = (s32)((long)(to) - ((long)(from) + 5)); in __synthesize_relative_insn()
125 insn->op = op; in __synthesize_relative_insn()
145 static kprobe_opcode_t *skip_prefixes(kprobe_opcode_t *insn) in skip_prefixes() argument
149 attr = inat_get_opcode_attribute((insn_byte_t)*insn); in skip_prefixes()
151 insn++; in skip_prefixes()
152 attr = inat_get_opcode_attribute((insn_byte_t)*insn); in skip_prefixes()
156 insn++; in skip_prefixes()
158 return insn; in skip_prefixes()
292 struct insn insn; in can_probe() local
312 kernel_insn_init(&insn, (void *)__addr, MAX_INSN_SIZE); in can_probe()
313 insn_get_length(&insn); in can_probe()
319 if (insn.opcode.bytes[0] == BREAKPOINT_INSTRUCTION) in can_probe()
321 addr += insn.length; in can_probe()
330 static int is_IF_modifier(kprobe_opcode_t *insn) in is_IF_modifier() argument
333 insn = skip_prefixes(insn); in is_IF_modifier()
335 switch (*insn) { in is_IF_modifier()
355 struct insn insn; in __copy_instruction() local
363 kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); in __copy_instruction()
364 insn_get_length(&insn); in __copy_instruction()
365 length = insn.length; in __copy_instruction()
368 if (insn.opcode.bytes[0] == BREAKPOINT_INSTRUCTION) in __copy_instruction()
370 memcpy(dest, insn.kaddr, length); in __copy_instruction()
373 if (insn_rip_relative(&insn)) { in __copy_instruction()
376 kernel_insn_init(&insn, dest, length); in __copy_instruction()
377 insn_get_displacement(&insn); in __copy_instruction()
390 newdisp = (u8 *) src + (s64) insn.displacement.value - (u8 *) dest; in __copy_instruction()
393 pr_err("\tSrc: %p, Dest: %p, old disp: %x\n", src, dest, insn.displacement.value); in __copy_instruction()
396 disp = (u8 *) dest + insn_offset_displacement(&insn); in __copy_instruction()
408 ret = __copy_instruction(p->ainsn.insn, p->addr); in arch_copy_kprobe()
416 if (can_boost(p->ainsn.insn)) in arch_copy_kprobe()
422 p->ainsn.if_modifier = is_IF_modifier(p->ainsn.insn); in arch_copy_kprobe()
425 p->opcode = p->ainsn.insn[0]; in arch_copy_kprobe()
438 p->ainsn.insn = get_insn_slot(); in arch_prepare_kprobe()
439 if (!p->ainsn.insn) in arch_prepare_kprobe()
457 if (p->ainsn.insn) { in arch_remove_kprobe()
458 free_insn_slot(p->ainsn.insn, (p->ainsn.boostable == 1)); in arch_remove_kprobe()
459 p->ainsn.insn = NULL; in arch_remove_kprobe()
539 regs->ip = (unsigned long)p->ainsn.insn; in setup_singlestep()
558 regs->ip = (unsigned long)p->ainsn.insn; in setup_singlestep()
830 unsigned long copy_ip = (unsigned long)p->ainsn.insn; in resume_execution()
832 kprobe_opcode_t *insn = p->ainsn.insn; in resume_execution() local
835 insn = skip_prefixes(insn); in resume_execution()
838 switch (*insn) { in resume_execution()
861 if ((insn[1] & 0x30) == 0x10) { in resume_execution()
869 } else if (((insn[1] & 0x31) == 0x20) || in resume_execution()
870 ((insn[1] & 0x31) == 0x21)) { in resume_execution()
950 if (unlikely(regs->ip == (unsigned long)cur->ainsn.insn)) { in kprobe_fault_handler()