openocd/src
Antonio Borneo 23d8831391 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
2021-03-04 14:58:58 +00:00
..
flash flash/stmqspi: fix build error with -Werror=maybe-uninitialized 2021-01-18 15:31:51 +00:00
helper configure: drop macro 'AC_HEADER_TIME' 2021-01-18 15:32:46 +00:00
jtag Fix jtag_usb_location_equal for path members > 9 2021-02-13 13:08:12 +00:00
pld openocd: use proper format with uint32_t 2020-09-05 17:12:44 +01:00
rtos rtos/hwthread: fix register list for armv7a 2020-12-26 15:47:55 +00:00
rtt openocd: fix doxygen parameters of functions 2021-01-13 11:33:53 +00:00
server gdb_server: fix HW thread status at gdb attach 2020-12-26 15:48:17 +00:00
svf openocd: fix command's usage string 2020-09-05 17:13:10 +01:00
target target: avoid polling during 'resumed' event handler 2021-03-04 14:58:58 +00:00
transport build: fix build with --enable-minidriver-dummy 2020-11-07 20:53:39 +00:00
xsvf openocd: avoid checking for non NULL pointer to free it 2020-09-05 17:11:50 +01:00
Makefile.am Add initial RTT support 2020-12-02 23:15:52 +00:00
hello.c helper/command: change prototype of command_print/command_print_sameline 2019-05-14 19:37:11 +01:00
hello.h Make #include guard naming consistent 2016-05-24 22:30:55 +01:00
main.c Remove FSF address from GPL notices 2016-05-24 22:30:01 +01:00
openocd.c Add initial RTT support 2020-12-02 23:15:52 +00:00
openocd.h Make #include guard naming consistent 2016-05-24 22:30:55 +01:00