openocd: prevent target polling during 'init'

The command 'init' causes the execution of few lower level
commands, e.g. 'target init', and switches from command mode
COMMAND_CONFIG to COMMAND_EXEC, with an intermediate switch back
to mode COMMAND_CONFIG.

A timed target polling can occur during the execution of 'init'
and the target's status can trigger the execution of some events.
E.g. if a target has been left halted by a previous execution of
OpenOCD, the first poll will find the target halted, calling the
corresponding 'halted' event.
The event handler can use commands that can only be executed in
mode COMMAND_EXEC. If the poll happens while OpenOCD is in mode
COMMAND_CONFIG, the triggered handler will fail.

Prevent the target polling to operate during the execution of the
'init' command.

Change-Id: Ia435a5d2039be9b247e2336616dab53ed5d983ac
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/7007
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Tested-by: jenkins
This commit is contained in:
Antonio Borneo 2022-05-30 15:32:24 +02:00
parent 0d56f379b5
commit e282d20832
1 changed files with 4 additions and 0 deletions

View File

@ -119,6 +119,8 @@ COMMAND_HANDLER(handle_init_command)
initialized = 1; initialized = 1;
bool save_poll_mask = jtag_poll_mask();
retval = command_run_line(CMD_CTX, "target init"); retval = command_run_line(CMD_CTX, "target init");
if (retval != ERROR_OK) if (retval != ERROR_OK)
return ERROR_FAIL; return ERROR_FAIL;
@ -166,6 +168,8 @@ COMMAND_HANDLER(handle_init_command)
if (command_run_line(CMD_CTX, "tpiu init") != ERROR_OK) if (command_run_line(CMD_CTX, "tpiu init") != ERROR_OK)
return ERROR_FAIL; return ERROR_FAIL;
jtag_poll_unmask(save_poll_mask);
/* initialize telnet subsystem */ /* initialize telnet subsystem */
gdb_target_add_all(all_targets); gdb_target_add_all(all_targets);