aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-10-09 12:05:57 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-10-09 12:05:57 +0000
commitfbdc87effc21f72f5519a53e34ebeadb06e4bb33 (patch)
tree40cfb51a78a1064a0d6ee24ee7f60a6c49c217b9
parenta5dd5a45f3a44db85e41f2db05a2b0365e060e80 (diff)
downloadriscv-openocd-fbdc87effc21f72f5519a53e34ebeadb06e4bb33.zip
riscv-openocd-fbdc87effc21f72f5519a53e34ebeadb06e4bb33.tar.gz
riscv-openocd-fbdc87effc21f72f5519a53e34ebeadb06e4bb33.tar.bz2
enumeration of threads for testing purposes.
git-svn-id: svn://svn.berlios.de/openocd/trunk@1035 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r--src/ecosboard.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/ecosboard.c b/src/ecosboard.c
index 7a8c6cb..e39e8e6 100644
--- a/src/ecosboard.c
+++ b/src/ecosboard.c
@@ -934,6 +934,72 @@ zylinjtag_Jim_Command_rm(Jim_Interp *interp,
return del ? JIM_OK : JIM_ERR;
}
+static int zylinjtag_Jim_Command_threads(Jim_Interp *interp, int argc,
+ Jim_Obj * const *argv)
+{
+ cyg_handle_t thread = 0;
+ cyg_uint16 id = 0;
+ Jim_Obj *threads = Jim_NewListObj(interp, NULL, 0);
+
+ /* Loop over the threads, and generate a table row for
+ * each.
+ */
+ while (cyg_thread_get_next(&thread, &id))
+ {
+ Jim_Obj *threadObj = Jim_NewListObj(interp, NULL, 0);
+
+ cyg_thread_info info;
+ char *state_string;
+
+ cyg_thread_get_info(thread, id, &info);
+
+ if (info.name == NULL)
+ info.name = "<no name>";
+
+ Jim_ListAppendElement(interp, threadObj, Jim_NewStringObj(interp,
+ info.name, strlen(info.name)));
+
+ /* Translate the state into a string.
+ */
+ if (info.state == 0)
+ state_string = "RUN";
+ else if (info.state & 0x04)
+ state_string = "SUSP";
+ else
+ switch (info.state & 0x1b)
+ {
+ case 0x01:
+ state_string = "SLEEP";
+ break;
+ case 0x02:
+ state_string = "CNTSLEEP";
+ break;
+ case 0x08:
+ state_string = "CREATE";
+ break;
+ case 0x10:
+ state_string = "EXIT";
+ break;
+ default:
+ state_string = "????";
+ break;
+ }
+
+ Jim_ListAppendElement(interp, threadObj, Jim_NewStringObj(interp,
+ state_string, strlen(state_string)));
+
+ Jim_ListAppendElement (interp, threadObj, Jim_NewIntObj(interp, id));
+ Jim_ListAppendElement(interp, threadObj, Jim_NewIntObj(interp, info.set_pri));
+ Jim_ListAppendElement(interp, threadObj, Jim_NewIntObj(interp, info.cur_pri));
+
+ Jim_ListAppendElement(interp, threads, threadObj);
+ }
+ Jim_SetResult( interp, threads);
+
+ return JIM_OK;
+}
+
+
static int
zylinjtag_Jim_Command_ls(Jim_Interp *interp,
int argc,
@@ -1245,6 +1311,7 @@ static void zylinjtag_startNetwork()
Jim_CreateCommand(httpstate.jim_interp, "zy1000_flash", zylinjtag_Jim_Command_flash, NULL, NULL);
Jim_CreateCommand(httpstate.jim_interp, "poke", zylinjtag_Jim_Command_poke, NULL, NULL);
Jim_CreateCommand(httpstate.jim_interp, "ls", zylinjtag_Jim_Command_ls, NULL, NULL);
+ Jim_CreateCommand(httpstate.jim_interp, "threads", zylinjtag_Jim_Command_threads, NULL, NULL);
Jim_CreateCommand(httpstate.jim_interp, "getmem", zylinjtag_Jim_Command_getmem, NULL, NULL);
Jim_CreateCommand(httpstate.jim_interp, "mac", zylinjtag_Jim_Command_mac, NULL, NULL);
Jim_CreateCommand(httpstate.jim_interp, "ip", zylinjtag_Jim_Command_ip, NULL, NULL);