From b3ce5a0ae5453a879a36856b5d8453722ba0f9b5 Mon Sep 17 00:00:00 2001 From: Antonio Borneo Date: Mon, 1 Apr 2019 10:34:25 +0200 Subject: [PATCH] target: use LOG_USER to print errors in events Events are supposed to be executed asynchronously and not linked with any command, so it's incorrect printing out an eventual error using command_print(). Even in the case of events triggered by the command invoke-event the eventual error in the event handler is not propagated to the command, so the command_print() is still not appropriate. Replace command_print() with LOG_USER() in target_handle_event(). Add further info in the log to identify which event has generated the error and its associated target. Before return, clean-up the error message and the stacktrace from the error already displayed, to avoid propagate them. Change-Id: I5966aa25e7c81348f4ad4d6e7ce5d4dee44ea4c8 Signed-off-by: Antonio Borneo Reviewed-on: http://openocd.zylin.com/5049 Tested-by: jenkins Reviewed-by: Tomas Vanek --- src/target/target.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/target/target.c b/src/target/target.c index 28e67bf75..14b6b0b99 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -4553,7 +4553,12 @@ void target_handle_event(struct target *target, enum target_event e) if (Jim_EvalObj(teap->interp, teap->body) != JIM_OK) { Jim_MakeErrorMessage(teap->interp); - command_print(NULL, "%s\n", Jim_GetString(Jim_GetResult(teap->interp), NULL)); + LOG_USER("Error executing event %s on target %s:\n%s", + Jim_Nvp_value2name_simple(nvp_target_event, e)->name, + target_name(target), + Jim_GetString(Jim_GetResult(teap->interp), NULL)); + /* clean both error code and stacktrace before return */ + Jim_Eval(teap->interp, "error \"\" \"\""); } cmd_ctx->current_target_override = saved_target_override;