diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2021-02-26 22:35:39 +0100 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2021-03-04 14:58:58 +0000 |
commit | 23d8831391bbd167e0061388c87e7ecf7b9891a7 (patch) | |
tree | 12b2426944538239b577a8230229e1d84c93279b /NEWS | |
parent | ba0f382137749b78b27ac58238735cc20a6fa847 (diff) | |
download | riscv-openocd-23d8831391bbd167e0061388c87e7ecf7b9891a7.zip riscv-openocd-23d8831391bbd167e0061388c87e7ecf7b9891a7.tar.gz riscv-openocd-23d8831391bbd167e0061388c87e7ecf7b9891a7.tar.bz2 |
target: avoid polling during 'resumed' event handler
OpenOCD is based on a single main loop that schedules all the
activities.
At the execution of a TCL command, the timestamp is checked to
eventually trigger the polling of the targets. This means that by
executing a TCL command the polling can be triggered and detect a
change of target's state.
When openocd 'resumes' a target, the target can halt again by
hitting a breakpoint.
The 'resumed' event handler is started just after the target has
been resumed, but it triggers a polling before the execution of
its very first instruction.
If the polling finds the target halted, it will run the 'halted'
event handler, that will then be executed 'before' the pending
'resumed' handler.
In case of gdb, a 'continue' command will restart the target but,
polling (and halt detection) executed before the end of the resume
process will hide the halt. As a consequence, the gdb will not be
informed of the halt and will remains waiting as if the target is
still running without showing the prompt.
This can be verified by running on the target a firmware with a
loop, run openocd with a dummy 'resumed' event, and let gdb to set
a breakpoint in the loop. A 'continue' command will cause the
target to halt again by hitting the breakpoint at the next loop
iteration, but gdb will loose it and will not return the prompt.
openocd -f board/st_nucleo_f4.cfg -c \
'stm32f4x.cpu configure -event resumed {echo hello}'
arm-none-eabi-gdb -ex 'target remote :3333' -ex 'b *$pc' -ex c
Disable the polling while executing target's resume().
Document it and provide hints to developers to cope with future
implementation.
Change-Id: I3be830a8e7c2ef6278617cb4547a4d676b0ddeb5
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reported-by: Габитов Александр Фаритович <gabitov@planarchel.ru>
Reviewed-on: http://openocd.zylin.com/6074
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Tested-by: jenkins
Diffstat (limited to 'NEWS')
0 files changed, 0 insertions, 0 deletions