Commit d6a29891 authored by Sonic Zhang's avatar Sonic Zhang Committed by Bryan Wu

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: default avatarSonic Zhang <sonic.zhang@analog.com>
Signed-off-by: default avatarBryan Wu <cooloney@kernel.org>
parent fe5aeb93
...@@ -163,6 +163,8 @@ ENTRY(_ex_single_step) ...@@ -163,6 +163,8 @@ ENTRY(_ex_single_step)
p5.l = lo(IPEND); p5.l = lo(IPEND);
p5.h = hi(IPEND); p5.h = hi(IPEND);
r6 = [p5]; r6 = [p5];
cc = bittst(r6, 4);
if cc jump _bfin_return_from_exception;
cc = bittst(r6, 5); cc = bittst(r6, 5);
if cc jump _bfin_return_from_exception; if cc jump _bfin_return_from_exception;
...@@ -186,10 +188,9 @@ ENTRY(_ex_single_step) ...@@ -186,10 +188,9 @@ ENTRY(_ex_single_step)
if cc jump .Ldo_single_step; if cc jump .Ldo_single_step;
r6 += -1; r6 += -1;
cc = r6 < r7; cc = r6 < r7;
if cc jump _bfin_return_from_exception; if cc jump 1f;
.Ldo_single_step: .Ldo_single_step:
#endif #else
/* If we were in user mode, do the single step normally. */ /* If we were in user mode, do the single step normally. */
p5.l = lo(IPEND); p5.l = lo(IPEND);
p5.h = hi(IPEND); p5.h = hi(IPEND);
...@@ -198,6 +199,7 @@ ENTRY(_ex_single_step) ...@@ -198,6 +199,7 @@ ENTRY(_ex_single_step)
r7 = r7 & r6; r7 = r7 & r6;
cc = r7 == 0; cc = r7 == 0;
if !cc jump 1f; if !cc jump 1f;
#endif
/* Single stepping only a single instruction, so clear the trace /* Single stepping only a single instruction, so clear the trace
* bit here. */ * bit here. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment