|
@@ -808,7 +808,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
|
|
|
{
|
|
|
struct task_struct *task = current;
|
|
|
struct fpu *fpu = &task->thread.fpu;
|
|
|
- siginfo_t info;
|
|
|
+ int si_code;
|
|
|
char *str = (trapnr == X86_TRAP_MF) ? "fpu exception" :
|
|
|
"simd exception";
|
|
|
|
|
@@ -834,18 +834,14 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
|
|
|
|
|
|
task->thread.trap_nr = trapnr;
|
|
|
task->thread.error_code = error_code;
|
|
|
- clear_siginfo(&info);
|
|
|
- info.si_signo = SIGFPE;
|
|
|
- info.si_errno = 0;
|
|
|
- info.si_addr = (void __user *)uprobe_get_trap_addr(regs);
|
|
|
-
|
|
|
- info.si_code = fpu__exception_code(fpu, trapnr);
|
|
|
|
|
|
+ si_code = fpu__exception_code(fpu, trapnr);
|
|
|
/* Retry when we get spurious exceptions: */
|
|
|
- if (!info.si_code)
|
|
|
+ if (!si_code)
|
|
|
return;
|
|
|
|
|
|
- force_sig_info(SIGFPE, &info, task);
|
|
|
+ force_sig_fault(SIGFPE, si_code,
|
|
|
+ (void __user *)uprobe_get_trap_addr(regs), task);
|
|
|
}
|
|
|
|
|
|
dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code)
|