aboutsummaryrefslogtreecommitdiff
path: root/src/jtag/commands.c
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2018-08-28 14:49:10 +0200
committerTomas Vanek <vanekt@fbl.cz>2020-01-14 11:38:23 +0000
commitf275ae586bba359611dd34af2b3718526101279e (patch)
treea3f0ef34a2025805f7353671c4d08eb2b7461c4a /src/jtag/commands.c
parent0f24549ce95e682f1e04b3358b13ea8b7f80c074 (diff)
downloadriscv-openocd-f275ae586bba359611dd34af2b3718526101279e.zip
riscv-openocd-f275ae586bba359611dd34af2b3718526101279e.tar.gz
riscv-openocd-f275ae586bba359611dd34af2b3718526101279e.tar.bz2
jtag: print an errmsg on using jtag API for non jtag transport
After the cleanup of swd and hla, there should be no more calls to jtag_execute_queue() or to queue jtag commands if current transport is not jtag. Thus we can start removing the jtag specific code from adapters that do not support jtag. To prevent some remaining call to jtag_execute_queue() to crash openocd, verify the transport, print an error message if the transport is not jtag, call the adapter's jtag_execute_queue() only if it exist. To identify code that still add commands in the jtag queue even if transport is not jtag, print an error message in the function jtag_queue_command(). For the moment, still queue the message, even if will cause a memory leak if there is no following call to jtag_execute_queue(); the target is to identify the issue and cleanup the code, thus solving also the leak. Change-Id: I8fc85f754aa057aad1df05ff0448c8619897da23 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/4897 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Diffstat (limited to 'src/jtag/commands.c')
-rw-r--r--src/jtag/commands.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/jtag/commands.c b/src/jtag/commands.c
index 3352e03..e88a3b7 100644
--- a/src/jtag/commands.c
+++ b/src/jtag/commands.c
@@ -31,6 +31,7 @@
#endif
#include <jtag/jtag.h>
+#include <transport/transport.h>
#include "commands.h"
struct cmd_queue_page {
@@ -48,6 +49,19 @@ static struct jtag_command **next_command_pointer = &jtag_command_queue;
void jtag_queue_command(struct jtag_command *cmd)
{
+ if (!transport_is_jtag()) {
+ /*
+ * FIXME: This should not happen!
+ * There could be old code that queues jtag commands with non jtag interfaces so, for
+ * the moment simply highlight it by log an error.
+ * We should fix it quitting with assert(0) because it is an internal error, or returning
+ * an error after call to jtag_command_queue_reset() to free the jtag queue and avoid
+ * memory leaks.
+ * The fix can be applied immediately after next release (v0.11.0 ?)
+ */
+ LOG_ERROR("JTAG API jtag_queue_command() called on non JTAG interface");
+ }
+
/* this command goes on the end, so ensure the queue terminates */
cmd->next = NULL;