dsemul.c (a9de18eb761f7c1c860964b2e5addc1a35c7e861) | dsemul.c (b6ee75ed4fa201873d3a2b32dfce2dbd701a2de4) |
---|---|
1#include <linux/compiler.h> 2#include <linux/mm.h> 3#include <linux/signal.h> 4#include <linux/smp.h> 5 6#include <asm/asm.h> 7#include <asm/bootinfo.h> 8#include <asm/byteorder.h> --- 84 unchanged lines hidden (view full) --- 93 return SIGBUS; 94 95 err = __put_user(ir, &fr->emul); 96 err |= __put_user((mips_instruction)BREAK_MATH, &fr->badinst); 97 err |= __put_user((mips_instruction)BD_COOKIE, &fr->cookie); 98 err |= __put_user(cpc, &fr->epc); 99 100 if (unlikely(err)) { | 1#include <linux/compiler.h> 2#include <linux/mm.h> 3#include <linux/signal.h> 4#include <linux/smp.h> 5 6#include <asm/asm.h> 7#include <asm/bootinfo.h> 8#include <asm/byteorder.h> --- 84 unchanged lines hidden (view full) --- 93 return SIGBUS; 94 95 err = __put_user(ir, &fr->emul); 96 err |= __put_user((mips_instruction)BREAK_MATH, &fr->badinst); 97 err |= __put_user((mips_instruction)BD_COOKIE, &fr->cookie); 98 err |= __put_user(cpc, &fr->epc); 99 100 if (unlikely(err)) { |
101 fpuemustats.errors++; | 101 MIPS_FPU_EMU_INC_STATS(errors); |
102 return SIGBUS; 103 } 104 105 regs->cp0_epc = (unsigned long) &fr->emul; 106 107 flush_cache_sigtramp((unsigned long)&fr->badinst); 108 109 return SIGILL; /* force out of emulation loop */ --- 21 unchanged lines hidden (view full) --- 131 * 132 * - Is the instruction pointed to by the EPC an BREAK_MATH? 133 * - Is the following memory word the BD_COOKIE? 134 */ 135 err = __get_user(insn, &fr->badinst); 136 err |= __get_user(cookie, &fr->cookie); 137 138 if (unlikely(err || (insn != BREAK_MATH) || (cookie != BD_COOKIE))) { | 102 return SIGBUS; 103 } 104 105 regs->cp0_epc = (unsigned long) &fr->emul; 106 107 flush_cache_sigtramp((unsigned long)&fr->badinst); 108 109 return SIGILL; /* force out of emulation loop */ --- 21 unchanged lines hidden (view full) --- 131 * 132 * - Is the instruction pointed to by the EPC an BREAK_MATH? 133 * - Is the following memory word the BD_COOKIE? 134 */ 135 err = __get_user(insn, &fr->badinst); 136 err |= __get_user(cookie, &fr->cookie); 137 138 if (unlikely(err || (insn != BREAK_MATH) || (cookie != BD_COOKIE))) { |
139 fpuemustats.errors++; | 139 MIPS_FPU_EMU_INC_STATS(errors); |
140 return 0; 141 } 142 143 /* 144 * At this point, we are satisfied that it's a BD emulation trap. Yes, 145 * a user might have deliberately put two malformed and useless 146 * instructions in a row in his program, in which case he's in for a 147 * nasty surprise - the next instruction will be treated as a --- 20 unchanged lines hidden --- | 140 return 0; 141 } 142 143 /* 144 * At this point, we are satisfied that it's a BD emulation trap. Yes, 145 * a user might have deliberately put two malformed and useless 146 * instructions in a row in his program, in which case he's in for a 147 * nasty surprise - the next instruction will be treated as a --- 20 unchanged lines hidden --- |