Lines Matching refs:insn
87 static int get_reg_offset(struct insn *insn, struct pt_regs *regs, in get_reg_offset() argument
117 if (IS_ENABLED(CONFIG_X86_64) && !insn->x86_64) in get_reg_offset()
122 regno = X86_MODRM_RM(insn->modrm.value); in get_reg_offset()
123 if (X86_REX_B(insn->rex_prefix.value)) in get_reg_offset()
128 regno = X86_SIB_INDEX(insn->sib.value); in get_reg_offset()
129 if (X86_REX_X(insn->rex_prefix.value)) in get_reg_offset()
134 regno = X86_SIB_BASE(insn->sib.value); in get_reg_offset()
135 if (X86_REX_B(insn->rex_prefix.value)) in get_reg_offset()
157 static void __user *mpx_get_addr_ref(struct insn *insn, struct pt_regs *regs) in mpx_get_addr_ref() argument
163 insn_get_modrm(insn); in mpx_get_addr_ref()
164 insn_get_sib(insn); in mpx_get_addr_ref()
165 sib = insn->sib.value; in mpx_get_addr_ref()
167 if (X86_MODRM_MOD(insn->modrm.value) == 3) { in mpx_get_addr_ref()
168 addr_offset = get_reg_offset(insn, regs, REG_TYPE_RM); in mpx_get_addr_ref()
173 if (insn->sib.nbytes) { in mpx_get_addr_ref()
174 base_offset = get_reg_offset(insn, regs, REG_TYPE_BASE); in mpx_get_addr_ref()
178 indx_offset = get_reg_offset(insn, regs, REG_TYPE_INDEX); in mpx_get_addr_ref()
186 addr_offset = get_reg_offset(insn, regs, REG_TYPE_RM); in mpx_get_addr_ref()
191 addr += insn->displacement.value; in mpx_get_addr_ref()
198 static int mpx_insn_decode(struct insn *insn, in mpx_insn_decode() argument
215 insn_init(insn, buf, nr_copied, x86_64); in mpx_insn_decode()
216 insn_get_length(insn); in mpx_insn_decode()
225 if (nr_copied < insn->length) in mpx_insn_decode()
228 insn_get_opcode(insn); in mpx_insn_decode()
233 if (insn->opcode.bytes[0] != 0x0f) in mpx_insn_decode()
235 if ((insn->opcode.bytes[1] != 0x1a) && in mpx_insn_decode()
236 (insn->opcode.bytes[1] != 0x1b)) in mpx_insn_decode()
262 struct insn insn; in mpx_generate_siginfo() local
266 err = mpx_insn_decode(&insn, regs); in mpx_generate_siginfo()
274 insn_get_modrm(&insn); in mpx_generate_siginfo()
275 bndregno = X86_MODRM_REG(insn.modrm.value); in mpx_generate_siginfo()
310 info->si_addr = mpx_get_addr_ref(&insn, regs); in mpx_generate_siginfo()