Lines Matching refs:regs

165  * @regs:	Register values as seen when entering kernel mode
179 static int resolve_default_seg(struct insn *insn, struct pt_regs *regs, int off)
181 if (any_64bit_mode(regs))
232 * @regs: Register values as seen when entering kernel mode
281 static int resolve_seg_reg(struct insn *insn, struct pt_regs *regs, int regoff)
292 if (any_64bit_mode(regs))
302 return resolve_default_seg(insn, regs, regoff);
309 return resolve_default_seg(insn, regs, regoff);
315 if (any_64bit_mode(regs)) {
326 * @regs: Register values as seen when entering kernel mode
343 static short get_segment_selector(struct pt_regs *regs, int seg_reg_idx)
352 return (unsigned short)(regs->cs & 0xffff);
354 return (unsigned short)(regs->ss & 0xffff);
371 struct kernel_vm86_regs *vm86regs = (struct kernel_vm86_regs *)regs;
373 if (v8086_mode(regs)) {
376 return (unsigned short)(regs->cs & 0xffff);
378 return (unsigned short)(regs->ss & 0xffff);
395 return (unsigned short)(regs->cs & 0xffff);
397 return (unsigned short)(regs->ss & 0xffff);
399 return (unsigned short)(regs->ds & 0xffff);
401 return (unsigned short)(regs->es & 0xffff);
403 return (unsigned short)(regs->fs & 0xffff);
440 int pt_regs_offset(struct pt_regs *regs, int regno)
522 static int get_reg_offset(struct insn *insn, struct pt_regs *regs,
530 return pt_regs_offset(regs, regno);
536 * @regs: Register values as seen when entering kernel mode
550 static int get_reg_offset_16(struct insn *insn, struct pt_regs *regs,
585 *offs1 = insn_get_modrm_rm_off(insn, regs);
666 * @regs: Register values as seen when entering kernel mode
681 unsigned long insn_get_seg_base(struct pt_regs *regs, int seg_reg_idx)
686 sel = get_segment_selector(regs, seg_reg_idx);
690 if (v8086_mode(regs))
697 if (any_64bit_mode(regs)) {
711 if (user_mode(regs))
733 * @regs: Register values as seen when entering kernel mode
748 static unsigned long get_seg_limit(struct pt_regs *regs, int seg_reg_idx)
754 sel = get_segment_selector(regs, seg_reg_idx);
758 if (any_64bit_mode(regs) || v8086_mode(regs))
782 * @regs: Structure with register values as seen when entering kernel mode
785 * selector contained in the CS register in regs. In protected mode, the default
796 int insn_get_code_seg_params(struct pt_regs *regs)
801 if (v8086_mode(regs))
805 sel = get_segment_selector(regs, INAT_SEG_REG_CS);
846 * @regs: Register values as seen when entering kernel mode
855 int insn_get_modrm_rm_off(struct insn *insn, struct pt_regs *regs)
857 return get_reg_offset(insn, regs, REG_TYPE_RM);
863 * @regs: Register values as seen when entering kernel mode
870 int insn_get_modrm_reg_off(struct insn *insn, struct pt_regs *regs)
872 return get_reg_offset(insn, regs, REG_TYPE_REG);
878 * @regs: Register values as seen when entering kernel mode
885 unsigned long *insn_get_modrm_reg_ptr(struct insn *insn, struct pt_regs *regs)
889 offset = insn_get_modrm_reg_off(insn, regs);
892 return (void *)regs + offset;
898 * @regs: Register values as seen when entering kernel mode
916 static int get_seg_base_limit(struct insn *insn, struct pt_regs *regs,
925 seg_reg_idx = resolve_seg_reg(insn, regs, regoff);
929 *base = insn_get_seg_base(regs, seg_reg_idx);
936 *limit = get_seg_limit(regs, seg_reg_idx);
946 * @regs: Register values as seen when entering kernel mode
966 static int get_eff_addr_reg(struct insn *insn, struct pt_regs *regs,
978 *regoff = get_reg_offset(insn, regs, REG_TYPE_RM);
984 *eff_addr = regs_get_register(regs, *regoff) & 0xffff;
986 *eff_addr = regs_get_register(regs, *regoff) & 0xffffffff;
988 *eff_addr = regs_get_register(regs, *regoff);
996 * @regs: Register values as seen when entering kernel mode
1002 * its value is obtained from the operands in @regs. The computed address is
1015 static int get_eff_addr_modrm(struct insn *insn, struct pt_regs *regs,
1031 *regoff = get_reg_offset(insn, regs, REG_TYPE_RM);
1039 if (any_64bit_mode(regs))
1040 tmp = regs->ip + insn->length;
1046 tmp = regs_get_register(regs, *regoff);
1063 * @regs: Register values as seen when entering kernel mode
1069 * reference, its value is obtained from the operands in @regs. The computed
1082 static int get_eff_addr_modrm_16(struct insn *insn, struct pt_regs *regs,
1099 ret = get_reg_offset_16(insn, regs, &addr_offset1, &addr_offset2);
1109 addr1 = regs_get_register(regs, addr_offset1) & 0xffff;
1112 addr2 = regs_get_register(regs, addr_offset2) & 0xffff;
1131 * @regs: Register values as seen when entering kernel mode
1137 * reference, its value is obtained from the operands in @regs. The computed
1150 static int get_eff_addr_sib(struct insn *insn, struct pt_regs *regs,
1177 *base_offset = get_reg_offset(insn, regs, REG_TYPE_BASE);
1178 indx_offset = get_reg_offset(insn, regs, REG_TYPE_INDEX);
1190 base = regs_get_register(regs, *base_offset);
1197 indx = regs_get_register(regs, indx_offset);
1220 * @regs: Register values as seen when entering kernel mode
1234 static void __user *get_addr_ref_16(struct insn *insn, struct pt_regs *regs)
1248 ret = get_eff_addr_reg(insn, regs, &regoff, &tmp);
1254 ret = get_eff_addr_modrm_16(insn, regs, &regoff, &eff_addr);
1259 ret = get_seg_base_limit(insn, regs, regoff, &seg_base, &seg_limit);
1275 if (v8086_mode(regs))
1285 * @regs: Register values as seen when entering kernel mode
1298 static void __user *get_addr_ref_32(struct insn *insn, struct pt_regs *regs)
1309 ret = get_eff_addr_reg(insn, regs, &regoff, &tmp);
1317 ret = get_eff_addr_sib(insn, regs, &regoff, &tmp);
1323 ret = get_eff_addr_modrm(insn, regs, &regoff, &tmp);
1331 ret = get_seg_base_limit(insn, regs, regoff, &seg_base, &seg_limit);
1346 if (!any_64bit_mode(regs) && ((unsigned int)eff_addr > seg_limit))
1353 if (v8086_mode(regs) && (eff_addr & ~0xffff))
1364 if (v8086_mode(regs))
1374 * @regs: Structure with register values as seen when entering kernel mode
1387 static void __user *get_addr_ref_64(struct insn *insn, struct pt_regs *regs)
1392 static void __user *get_addr_ref_64(struct insn *insn, struct pt_regs *regs)
1402 ret = get_eff_addr_reg(insn, regs, &regoff, &eff_addr);
1408 ret = get_eff_addr_sib(insn, regs, &regoff, &eff_addr);
1412 ret = get_eff_addr_modrm(insn, regs, &regoff, &eff_addr);
1419 ret = get_seg_base_limit(insn, regs, regoff, &seg_base, NULL);
1433 * @regs: Structure with register values as seen when entering kernel mode
1445 void __user *insn_get_addr_ref(struct insn *insn, struct pt_regs *regs)
1447 if (!insn || !regs)
1455 return get_addr_ref_16(insn, regs);
1457 return get_addr_ref_32(insn, regs);
1459 return get_addr_ref_64(insn, regs);
1465 int insn_get_effective_ip(struct pt_regs *regs, unsigned long *ip)
1475 if (!user_64bit_mode(regs)) {
1476 seg_base = insn_get_seg_base(regs, INAT_SEG_REG_CS);
1481 *ip = seg_base + regs->ip;
1488 * @regs: Structure with register values as seen when entering kernel mode
1500 int insn_fetch_from_user(struct pt_regs *regs, unsigned char buf[MAX_INSN_SIZE])
1505 if (insn_get_effective_ip(regs, &ip))
1516 * @regs: Structure with register values as seen when entering kernel mode
1528 int insn_fetch_from_user_inatomic(struct pt_regs *regs, unsigned char buf[MAX_INSN_SIZE])
1533 if (insn_get_effective_ip(regs, &ip))
1544 * @regs: Structure with register values as seen when entering kernel mode
1555 bool insn_decode_from_regs(struct insn *insn, struct pt_regs *regs,
1560 insn_init(insn, buf, buf_size, user_64bit_mode(regs));
1572 seg_defs = insn_get_code_seg_params(regs);