The PPC architecture is unable to debug applications using hardware
floating point, because it would not save the floating point registers.

After returning from the debugger, the contents of register was
modified. This patch fix this bug.

Signed-off-by: Stefani Seibold <stef...@seibold.net>
---
 traps.c |    6 ++++++
 1 file changed, 6 insertions(+)

--- linux-2.6.32-rc5/arch/powerpc/kernel/traps.c.orig   2009-11-27 
09:47:37.989943124 +0100
+++ linux-2.6.32-rc5/arch/powerpc/kernel/traps.c        2009-11-27 
09:47:41.088330825 +0100
@@ -559,6 +559,8 @@ void instruction_breakpoint_exception(st
                return;
        if (debugger_iabr_match(regs))
                return;
+       if (regs->msr & MSR_FP)
+               giveup_fpu(current);
        _exception(SIGTRAP, regs, TRAP_BRKPT, regs->nip);
 }
 
@@ -577,6 +579,8 @@ void __kprobes single_step_exception(str
        if (debugger_sstep(regs))
                return;
 
+       if (regs->msr & MSR_FP)
+               giveup_fpu(current);
        _exception(SIGTRAP, regs, TRAP_TRACE, regs->nip);
 }
 
@@ -834,6 +838,8 @@ void __kprobes program_check_exception(s
                        regs->nip += 4;
                        return;
                }
+               if (regs->msr & MSR_FP)
+                       giveup_fpu(current);
                _exception(SIGTRAP, regs, TRAP_BRKPT, regs->nip);
                return;
        }


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to