jtag: fix error on TCL command "return" in jtag event handler
The TCL command "return" always returns error code JIM_RETURN, to indicate that the effective error code and message are elsewhere. In the current implementation, the caller of jtag's event only checks for return code JIM_OK and considers any other value, including JIM_RETURN, as an error condition. It can be tested running openocd on a jtag target and adding a jtag event "setup" with a single line "return", e.g. openocd -f board/ti_cc3200_launchxl.cfg \ -c 'jtag configure cc32xx.cpu -event setup return' to get the message: ../src/jtag/core.c:1599: Error: in procedure 'jtag_init' called at file "../src/jtag/core.c", line 1599 Modify jtag_tap_handle_event() to detect the specific return value of the "return" command and to test the real error code that is, eventually, specified to the TCL "return" command. Change-Id: I6d6febc15ef169638afffbffc1810e0b84fcf5c8 Reported-by: Tomas Vanek <vanekt@fbl.cz> Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/5199 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>bscan_optimization
parent
1af83682e0
commit
9879f9bf04
|
@ -639,6 +639,7 @@ static int jim_newtap_cmd(Jim_GetOptInfo *goi)
|
|||
static void jtag_tap_handle_event(struct jtag_tap *tap, enum jtag_event e)
|
||||
{
|
||||
struct jtag_tap_event_action *jteap;
|
||||
int retval;
|
||||
|
||||
for (jteap = tap->event_action; jteap != NULL; jteap = jteap->next) {
|
||||
if (jteap->event != e)
|
||||
|
@ -649,7 +650,11 @@ static void jtag_tap_handle_event(struct jtag_tap *tap, enum jtag_event e)
|
|||
tap->dotted_name, e, nvp->name,
|
||||
Jim_GetString(jteap->body, NULL));
|
||||
|
||||
if (Jim_EvalObj(jteap->interp, jteap->body) != JIM_OK) {
|
||||
retval = Jim_EvalObj(jteap->interp, jteap->body);
|
||||
if (retval == JIM_RETURN)
|
||||
retval = jteap->interp->returnCode;
|
||||
|
||||
if (retval != JIM_OK) {
|
||||
Jim_MakeErrorMessage(jteap->interp);
|
||||
LOG_USER("%s", Jim_GetString(Jim_GetResult(jteap->interp), NULL));
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue