target: use correct target in target-prefixed commands and event handlers 95/4295/5
authorTomas Vanek <vanekt@fbl.cz>
Tue, 21 Nov 2017 21:57:39 +0000 (22:57 +0100)
committerMatthias Welwarsky <matthias@welwarsky.de>
Sat, 3 Mar 2018 08:40:09 +0000 (08:40 +0000)
commitbb9d9c60264a905926e0d15f84842858d0de80b7
treecb402f03c09d0c1358c87775eb5d4443b585caf2
parenteaeb4191e55c3a23582ecb40b852f95c2e0ea917
target: use correct target in target-prefixed commands and event handlers

This change contains an alternative to Matthias Welwarsky's #4130
(target-prefixed commands) and to #4293 (event handlers).

get_current_target() must retrieve the target associated to the current
command. If no target associated, the current target of the command
context is used as a fallback.

Many Tcl event handlers work with the current target as if it were
the target issuing the event.

current_target in command_context is a number and has to be converted
to a pointer in every get_current_target() call.

The solution:
- Replace current_target in command_context by a target pointer
- Add another target pointer current_target_override
- get_current_target() returns current_target_override if set, otherwise
current_target
- Save, set and restore current_target_override to the current prefix
in run_command()
- Save, set and restore current_target_override to the event invoking
target in target_handle_event()

While on it use calloc when allocating a new command_context.

Change-Id: I9a82102e94dcac063743834a1d28da861b2e74ea
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Suggested-by: Matthias Welwarsky <matthias.welwarsky@sysgo.com>
Reviewed-on: http://openocd.zylin.com/4295
Tested-by: jenkins
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
doc/openocd.texi
src/helper/command.c
src/helper/command.h
src/server/tcl_server.c
src/target/target.c