Ver Fonte

Blackfin arch: Fix bugs - Make kgdb code apparent to app debugging.

 - Skip single step if global interrupt disable bit is set.
 - Extend bernds' patch r4673 to skip single step in any interrupt entry
   that interrupts the code which is under single stepping. Bernds' patch
   only allow user space single stepping.

Singed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
Sonic Zhang há 17 anos atrás
pai
commit
d6a2989136
1 ficheiros alterados com 5 adições e 3 exclusões
  1. 5 3
      arch/blackfin/mach-common/entry.S

+ 5 - 3
arch/blackfin/mach-common/entry.S

@@ -163,6 +163,8 @@ ENTRY(_ex_single_step)
         p5.l = lo(IPEND);
         p5.h = hi(IPEND);
 	r6 = [p5];
+	cc = bittst(r6, 4);
+	if cc jump _bfin_return_from_exception;
 	cc = bittst(r6, 5);
 	if cc jump _bfin_return_from_exception;
 
@@ -186,10 +188,9 @@ ENTRY(_ex_single_step)
 	if cc jump .Ldo_single_step;
 	r6 += -1;
 	cc = r6 < r7;
-	if cc jump _bfin_return_from_exception;
+	if cc jump 1f;
 .Ldo_single_step:
-#endif
-
+#else
 	/* If we were in user mode, do the single step normally.  */
 	p5.l = lo(IPEND);
 	p5.h = hi(IPEND);
@@ -198,6 +199,7 @@ ENTRY(_ex_single_step)
 	r7 = r7 & r6;
 	cc = r7 == 0;
 	if !cc jump 1f;
+#endif
 
 	/* Single stepping only a single instruction, so clear the trace
 	 * bit here.  */