]> rtime.felk.cvut.cz Git - lisovros/linux_canprio.git/blobdiff - arch/sparc64/lib/mcount.S
sparc64: Fix recursion in stack overflow detection handling.
[lisovros/linux_canprio.git] / arch / sparc64 / lib / mcount.S
index 7735a7a60533fa225256ad0bd2d94a00be26033a..734caf0cec09a02e77d7cd432ab74631e106cef9 100644 (file)
@@ -48,12 +48,23 @@ mcount:
        sub             %g3, STACK_BIAS, %g3
        cmp             %sp, %g3
        bg,pt           %xcc, 1f
-        sethi          %hi(panicstring), %g3
+        nop
+       /* If we are already on ovstack, don't hop onto it
+        * again, we are already trying to output the stack overflow
+        * message.
+        */
        sethi           %hi(ovstack), %g7               ! cant move to panic stack fast enough
         or             %g7, %lo(ovstack), %g7
-       add             %g7, OVSTACKSIZE, %g7
+       add             %g7, OVSTACKSIZE, %g3
+       sub             %g3, STACK_BIAS + 192, %g3
        sub             %g7, STACK_BIAS, %g7
-       mov             %g7, %sp
+       cmp             %sp, %g7
+       blu,pn          %xcc, 2f
+        cmp            %sp, %g3
+       bleu,pn         %xcc, 1f
+        nop
+2:     mov             %g3, %sp
+       sethi           %hi(panicstring), %g3
        call            prom_printf
         or             %g3, %lo(panicstring), %o0
        call            prom_halt