target/cortex_a: poll all targets in SMP node after halt 22/4622/2
authorAntonio Borneo <borneo.antonio@gmail.com>
Mon, 23 Jul 2018 13:20:40 +0000 (15:20 +0200)
committerMatthias Welwarsky <matthias@welwarsky.de>
Wed, 12 Sep 2018 14:14:42 +0000 (15:14 +0100)
commit56cdc3f3d54ecef9f1847045c041a2d8e723c375
tree519c24d2d27ed4f73d8b40d0a9f210a21512ac89
parent2253a31fb19cbc501fd8e54bfd43310c35dacd4b
target/cortex_a: poll all targets in SMP node after halt

The periodic poll scans all the targets in the same order they
have been declared in the configuration file.
When one target in a SMP node halts, the transition is detected
in the following poll and this triggers a halt request to all the
other cores of the SMP node.
The targets that will be polled afterwards will be identified as
"halted", but the targets already scanned will remain as
"running" until the next periodic poll.
This creates a race condition with GDB; GDB sets the breakpoints
when runs the target and removes them as soon as the target is
halted. When it receives the halt event, it starts removing the
breakpoints and fails on the targets that are still reported as
"running".

Fixed by polling all the targets in the SMP node before informing
GDB about the halt event.
This implementation is almost copy/paste from the one in aarch64.

Change-Id: Id2bd99f1e56b014e48e9e34ccb891b4219c518f8
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4622
Tested-by: jenkins
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
src/target/cortex_a.c