Lines Matching refs:insn

68 static int get_reg_offset(struct insn *insn, struct pt_regs *regs,  in get_reg_offset()  argument
98 if (IS_ENABLED(CONFIG_X86_64) && !insn->x86_64) in get_reg_offset()
103 regno = X86_MODRM_RM(insn->modrm.value); in get_reg_offset()
104 if (X86_REX_B(insn->rex_prefix.value)) in get_reg_offset()
109 regno = X86_SIB_INDEX(insn->sib.value); in get_reg_offset()
110 if (X86_REX_X(insn->rex_prefix.value)) in get_reg_offset()
115 regno = X86_SIB_BASE(insn->sib.value); in get_reg_offset()
116 if (X86_REX_B(insn->rex_prefix.value)) in get_reg_offset()
138 static void __user *mpx_get_addr_ref(struct insn *insn, struct pt_regs *regs) in mpx_get_addr_ref() argument
144 insn_get_modrm(insn); in mpx_get_addr_ref()
145 insn_get_sib(insn); in mpx_get_addr_ref()
146 sib = insn->sib.value; in mpx_get_addr_ref()
148 if (X86_MODRM_MOD(insn->modrm.value) == 3) { in mpx_get_addr_ref()
149 addr_offset = get_reg_offset(insn, regs, REG_TYPE_RM); in mpx_get_addr_ref()
154 if (insn->sib.nbytes) { in mpx_get_addr_ref()
155 base_offset = get_reg_offset(insn, regs, REG_TYPE_BASE); in mpx_get_addr_ref()
159 indx_offset = get_reg_offset(insn, regs, REG_TYPE_INDEX); in mpx_get_addr_ref()
167 addr_offset = get_reg_offset(insn, regs, REG_TYPE_RM); in mpx_get_addr_ref()
172 addr += insn->displacement.value; in mpx_get_addr_ref()
179 static int mpx_insn_decode(struct insn *insn, in mpx_insn_decode() argument
196 insn_init(insn, buf, nr_copied, x86_64); in mpx_insn_decode()
197 insn_get_length(insn); in mpx_insn_decode()
206 if (nr_copied < insn->length) in mpx_insn_decode()
209 insn_get_opcode(insn); in mpx_insn_decode()
214 if (insn->opcode.bytes[0] != 0x0f) in mpx_insn_decode()
216 if ((insn->opcode.bytes[1] != 0x1a) && in mpx_insn_decode()
217 (insn->opcode.bytes[1] != 0x1b)) in mpx_insn_decode()
243 struct insn insn; in mpx_generate_siginfo() local
247 err = mpx_insn_decode(&insn, regs); in mpx_generate_siginfo()
255 insn_get_modrm(&insn); in mpx_generate_siginfo()
256 bndregno = X86_MODRM_REG(insn.modrm.value); in mpx_generate_siginfo()
291 info->si_addr = mpx_get_addr_ref(&insn, regs); in mpx_generate_siginfo()