Lines Matching full:regs
15 static inline unsigned long *pt_regs_nr(struct pt_regs *regs, int nr) in pt_regs_nr() argument
17 int reg_offset = pt_regs_offset(regs, nr); in pt_regs_nr()
23 return (unsigned long *)((unsigned long)regs + reg_offset); in pt_regs_nr()
33 struct pt_regs *regs) in ex_handler_default() argument
36 regs->ax = 0; in ex_handler_default()
38 regs->dx = 0; in ex_handler_default()
40 regs->ip = ex_fixup_addr(e); in ex_handler_default()
57 struct pt_regs *regs, in ex_handler_zeropad() argument
66 len = next_ip - regs->ip; in ex_handler_zeropad()
70 if (insn_decode(&insn, (void *) regs->ip, len, INSN_MODE_KERN)) in ex_handler_zeropad()
80 addr = (unsigned long) insn_get_addr_ref(&insn, regs); in ex_handler_zeropad()
89 reg = insn_get_modrm_reg_ptr(&insn, regs); in ex_handler_zeropad()
94 return ex_handler_default(e, regs); in ex_handler_zeropad()
98 struct pt_regs *regs, int trapnr) in ex_handler_fault() argument
100 regs->ax = trapnr; in ex_handler_fault()
101 return ex_handler_default(fixup, regs); in ex_handler_fault()
105 struct pt_regs *regs, int trapnr) in ex_handler_sgx() argument
107 regs->ax = trapnr | SGX_ENCLS_FAULT_FLAG; in ex_handler_sgx()
108 return ex_handler_default(fixup, regs); in ex_handler_sgx()
122 struct pt_regs *regs) in ex_handler_fprestore() argument
124 regs->ip = ex_fixup_addr(fixup); in ex_handler_fprestore()
127 (void *)instruction_pointer(regs)); in ex_handler_fprestore()
134 struct pt_regs *regs, int trapnr) in ex_handler_uaccess() argument
137 return ex_handler_default(fixup, regs); in ex_handler_uaccess()
141 struct pt_regs *regs, int trapnr) in ex_handler_copy() argument
144 return ex_handler_fault(fixup, regs, trapnr); in ex_handler_copy()
148 struct pt_regs *regs, bool wrmsr, bool safe, int reg) in ex_handler_msr() argument
152 (unsigned int)regs->cx, (unsigned int)regs->dx, in ex_handler_msr()
153 (unsigned int)regs->ax, regs->ip, (void *)regs->ip); in ex_handler_msr()
154 show_stack_regs(regs); in ex_handler_msr()
159 (unsigned int)regs->cx, regs->ip, (void *)regs->ip); in ex_handler_msr()
160 show_stack_regs(regs); in ex_handler_msr()
165 regs->ax = 0; in ex_handler_msr()
166 regs->dx = 0; in ex_handler_msr()
170 *pt_regs_nr(regs, reg) = -EIO; in ex_handler_msr()
172 return ex_handler_default(fixup, regs); in ex_handler_msr()
176 struct pt_regs *regs) in ex_handler_clear_fs() argument
181 return ex_handler_default(fixup, regs); in ex_handler_clear_fs()
185 struct pt_regs *regs, int reg, int imm) in ex_handler_imm_reg() argument
187 *pt_regs_nr(regs, reg) = (long)imm; in ex_handler_imm_reg()
188 return ex_handler_default(fixup, regs); in ex_handler_imm_reg()
192 struct pt_regs *regs, int trapnr, int reg, int imm) in ex_handler_ucopy_len() argument
194 regs->cx = imm * regs->cx + *pt_regs_nr(regs, reg); in ex_handler_ucopy_len()
195 return ex_handler_uaccess(fixup, regs, trapnr); in ex_handler_ucopy_len()
205 int fixup_exception(struct pt_regs *regs, int trapnr, unsigned long error_code, in fixup_exception() argument
212 if (unlikely(SEGMENT_IS_PNP_CODE(regs->cs))) { in fixup_exception()
225 e = search_exception_tables(regs->ip); in fixup_exception()
236 return ex_handler_default(e, regs); in fixup_exception()
239 return ex_handler_fault(e, regs, trapnr); in fixup_exception()
241 return ex_handler_uaccess(e, regs, trapnr); in fixup_exception()
243 return ex_handler_copy(e, regs, trapnr); in fixup_exception()
245 return ex_handler_clear_fs(e, regs); in fixup_exception()
247 return ex_handler_fprestore(e, regs); in fixup_exception()
249 return ex_handler_bpf(e, regs); in fixup_exception()
251 return ex_handler_msr(e, regs, true, false, reg); in fixup_exception()
253 return ex_handler_msr(e, regs, false, false, reg); in fixup_exception()
255 return ex_handler_msr(e, regs, true, true, reg); in fixup_exception()
257 return ex_handler_msr(e, regs, false, true, reg); in fixup_exception()
259 ex_handler_msr_mce(regs, true); in fixup_exception()
262 ex_handler_msr_mce(regs, false); in fixup_exception()
265 regs->sp += sizeof(long); in fixup_exception()
268 return ex_handler_imm_reg(e, regs, reg, imm); in fixup_exception()
270 return ex_handler_sgx(e, regs, trapnr); in fixup_exception()
272 return ex_handler_ucopy_len(e, regs, trapnr, reg, imm); in fixup_exception()
274 return ex_handler_zeropad(e, regs, fault_addr); in fixup_exception()
282 void __init early_fixup_exception(struct pt_regs *regs, int trapnr) in early_fixup_exception() argument
297 if (!xen_pv_domain() && regs->cs != __KERNEL_CS) in early_fixup_exception()
314 if (fixup_exception(regs, trapnr, regs->orig_ax, 0)) in early_fixup_exception()
318 if (report_bug(regs->ip, regs) == BUG_TRAP_TYPE_WARN) { in early_fixup_exception()
320 regs->ip += LEN_UD2; in early_fixup_exception()
333 (unsigned)trapnr, (unsigned long)regs->cs, regs->ip, in early_fixup_exception()
334 regs->orig_ax, read_cr2()); in early_fixup_exception()
336 show_regs(regs); in early_fixup_exception()