Ejemplo n.º 1
0
int
dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpregs)
{
#ifdef __SMP__
	if ( regs->msr & MSR_FP )
		smp_giveup_fpu(current);
#else
	if (last_task_used_math == current)
		giveup_fpu();
#endif	
	memcpy(fpregs, &current->tss.fpr[0], sizeof(*fpregs));
	return 1;
}
Ejemplo n.º 2
0
void
AlignmentException(struct pt_regs *regs)
{
	int fixed;

#ifdef __SMP__
	if (regs->msr & MSR_FP )
		smp_giveup_fpu(current);
#else	
	if (last_task_used_math == current)
		giveup_fpu();
#endif	
	fixed = fix_alignment(regs);
	if (fixed == 1) {
		regs->nip += 4;	/* skip over emulated instruction */
		return;
	}
	if (fixed == -EFAULT) {
		/* fixed == -EFAULT means the operand address was bad */
		bad_page_fault(regs, regs->dar);
		return;
	}
	_exception(SIGBUS, regs);	
}