|
From: openocd-gerrit <ope...@us...> - 2023-03-25 18:11:41
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Main OpenOCD repository".
The branch, master has been updated
via 21e6252965d8cf82660344a7d6c12d64269d7387 (commit)
via 0332da1f1518b0cb4150965614c09fcc7319ddbe (commit)
from 880ae3f07744a09e267bde00cf405c85a6f10482 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 21e6252965d8cf82660344a7d6c12d64269d7387
Author: Antonio Borneo <bor...@gm...>
Date: Mon Dec 19 12:49:20 2022 +0100
target: aarch64: rewrite commands 'aarch64 mcr/mrc' as COMMAND_HANDLER
This also fixes an incorrect return ERROR_TARGET_NOT_HALTED from a
jim command.
Change-Id: I99a02a21bedb64e60944e295c7cf24356e07be60
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7490
Tested-by: jenkins
diff --git a/src/target/aarch64.c b/src/target/aarch64.c
index 8e90e6400..3c33032e9 100644
--- a/src/target/aarch64.c
+++ b/src/target/aarch64.c
@@ -2952,53 +2952,41 @@ COMMAND_HANDLER(aarch64_mask_interrupts_command)
return ERROR_OK;
}
-static int jim_mcrmrc(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
+COMMAND_HANDLER(aarch64_mcrmrc_command)
{
- struct command *c = jim_to_command(interp);
- struct command_context *context;
- struct target *target;
- struct arm *arm;
- int retval;
bool is_mcr = false;
- int arg_cnt = 0;
+ unsigned int arg_cnt = 5;
- if (!strcmp(c->name, "mcr")) {
+ if (!strcmp(CMD_NAME, "mcr")) {
is_mcr = true;
- arg_cnt = 7;
- } else {
arg_cnt = 6;
}
- context = current_command_context(interp);
- assert(context);
+ if (arg_cnt != CMD_ARGC)
+ return ERROR_COMMAND_SYNTAX_ERROR;
- target = get_current_target(context);
+ struct target *target = get_current_target(CMD_CTX);
if (!target) {
- LOG_ERROR("%s: no current target", __func__);
- return JIM_ERR;
+ command_print(CMD, "no current target");
+ return ERROR_FAIL;
}
if (!target_was_examined(target)) {
- LOG_ERROR("%s: not yet examined", target_name(target));
- return JIM_ERR;
+ command_print(CMD, "%s: not yet examined", target_name(target));
+ return ERROR_TARGET_NOT_EXAMINED;
}
- arm = target_to_arm(target);
+ struct arm *arm = target_to_arm(target);
if (!is_arm(arm)) {
- LOG_ERROR("%s: not an ARM", target_name(target));
- return JIM_ERR;
+ command_print(CMD, "%s: not an ARM", target_name(target));
+ return ERROR_FAIL;
}
if (target->state != TARGET_HALTED)
return ERROR_TARGET_NOT_HALTED;
if (arm->core_state == ARM_STATE_AARCH64) {
- LOG_ERROR("%s: not 32-bit arm target", target_name(target));
- return JIM_ERR;
- }
-
- if (argc != arg_cnt) {
- LOG_ERROR("%s: wrong number of arguments", __func__);
- return JIM_ERR;
+ command_print(CMD, "%s: not 32-bit arm target", target_name(target));
+ return ERROR_FAIL;
}
int cpnum;
@@ -3007,87 +2995,62 @@ static int jim_mcrmrc(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
uint32_t crn;
uint32_t crm;
uint32_t value;
- long l;
/* NOTE: parameter sequence matches ARM instruction set usage:
* MCR pNUM, op1, rX, CRn, CRm, op2 ; write CP from rX
* MRC pNUM, op1, rX, CRn, CRm, op2 ; read CP into rX
* The "rX" is necessarily omitted; it uses Tcl mechanisms.
*/
- retval = Jim_GetLong(interp, argv[1], &l);
- if (retval != JIM_OK)
- return retval;
- if (l & ~0xf) {
- LOG_ERROR("%s: %s %d out of range", __func__,
- "coprocessor", (int) l);
- return JIM_ERR;
+ COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], cpnum);
+ if (cpnum & ~0xf) {
+ command_print(CMD, "coprocessor %d out of range", cpnum);
+ return ERROR_COMMAND_ARGUMENT_INVALID;
}
- cpnum = l;
- retval = Jim_GetLong(interp, argv[2], &l);
- if (retval != JIM_OK)
- return retval;
- if (l & ~0x7) {
- LOG_ERROR("%s: %s %d out of range", __func__,
- "op1", (int) l);
- return JIM_ERR;
+ COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], op1);
+ if (op1 & ~0x7) {
+ command_print(CMD, "op1 %d out of range", op1);
+ return ERROR_COMMAND_ARGUMENT_INVALID;
}
- op1 = l;
- retval = Jim_GetLong(interp, argv[3], &l);
- if (retval != JIM_OK)
- return retval;
- if (l & ~0xf) {
- LOG_ERROR("%s: %s %d out of range", __func__,
- "CRn", (int) l);
- return JIM_ERR;
+ COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], crn);
+ if (crn & ~0xf) {
+ command_print(CMD, "CRn %d out of range", crn);
+ return ERROR_COMMAND_ARGUMENT_INVALID;
}
- crn = l;
- retval = Jim_GetLong(interp, argv[4], &l);
- if (retval != JIM_OK)
- return retval;
- if (l & ~0xf) {
- LOG_ERROR("%s: %s %d out of range", __func__,
- "CRm", (int) l);
- return JIM_ERR;
+ COMMAND_PARSE_NUMBER(u32, CMD_ARGV[3], crm);
+ if (crm & ~0xf) {
+ command_print(CMD, "CRm %d out of range", crm);
+ return ERROR_COMMAND_ARGUMENT_INVALID;
}
- crm = l;
- retval = Jim_GetLong(interp, argv[5], &l);
- if (retval != JIM_OK)
- return retval;
- if (l & ~0x7) {
- LOG_ERROR("%s: %s %d out of range", __func__,
- "op2", (int) l);
- return JIM_ERR;
+ COMMAND_PARSE_NUMBER(u32, CMD_ARGV[4], op2);
+ if (op2 & ~0x7) {
+ command_print(CMD, "op2 %d out of range", op2);
+ return ERROR_COMMAND_ARGUMENT_INVALID;
}
- op2 = l;
- value = 0;
-
- if (is_mcr == true) {
- retval = Jim_GetLong(interp, argv[6], &l);
- if (retval != JIM_OK)
- return retval;
- value = l;
+ if (is_mcr) {
+ COMMAND_PARSE_NUMBER(u32, CMD_ARGV[5], value);
/* NOTE: parameters reordered! */
/* ARMV4_5_MCR(cpnum, op1, 0, crn, crm, op2) */
- retval = arm->mcr(target, cpnum, op1, op2, crn, crm, value);
+ int retval = arm->mcr(target, cpnum, op1, op2, crn, crm, value);
if (retval != ERROR_OK)
- return JIM_ERR;
+ return retval;
} else {
+ value = 0;
/* NOTE: parameters reordered! */
/* ARMV4_5_MRC(cpnum, op1, 0, crn, crm, op2) */
- retval = arm->mrc(target, cpnum, op1, op2, crn, crm, &value);
+ int retval = arm->mrc(target, cpnum, op1, op2, crn, crm, &value);
if (retval != ERROR_OK)
- return JIM_ERR;
+ return retval;
- Jim_SetResult(interp, Jim_NewIntObj(interp, value));
+ command_print(CMD, "0x%" PRIx32, value);
}
- return JIM_OK;
+ return ERROR_OK;
}
static const struct command_registration aarch64_exec_command_handlers[] = {
@@ -3122,14 +3085,14 @@ static const struct command_registration aarch64_exec_command_handlers[] = {
{
.name = "mcr",
.mode = COMMAND_EXEC,
- .jim_handler = jim_mcrmrc,
+ .handler = aarch64_mcrmrc_command,
.help = "write coprocessor register",
.usage = "cpnum op1 CRn CRm op2 value",
},
{
.name = "mrc",
.mode = COMMAND_EXEC,
- .jim_handler = jim_mcrmrc,
+ .handler = aarch64_mcrmrc_command,
.help = "read coprocessor register",
.usage = "cpnum op1 CRn CRm op2",
},
commit 0332da1f1518b0cb4150965614c09fcc7319ddbe
Author: Antonio Borneo <bor...@gm...>
Date: Sun Dec 18 22:42:18 2022 +0100
rtt: rewrite command 'rtt channellist' as COMMAND_HANDLER
This also fixes a mistake of the jim command returning ERROR_xx
when function rtt_read_channel_info() returns error.
While there:
- format in a human readable way the output dictionary list, while
preserving the structure of its TCL data;
- add check for the number of parameters.
Change-Id: Ica2b623699d3a606d3992975c836dae96f74b26d
Signed-off-by: Antonio Borneo <bor...@gm...>
Reviewed-on: https://review.openocd.org/c/openocd/+/7489
Tested-by: jenkins
diff --git a/src/rtt/tcl.c b/src/rtt/tcl.c
index 7cbdccf56..f949aa1c9 100644
--- a/src/rtt/tcl.c
+++ b/src/rtt/tcl.c
@@ -150,17 +150,17 @@ COMMAND_HANDLER(handle_rtt_channels_command)
return ERROR_OK;
}
-static int jim_channel_list(Jim_Interp *interp, int argc,
- Jim_Obj * const *argv)
+COMMAND_HANDLER(handle_channel_list)
{
- Jim_Obj *list;
- Jim_Obj *channel_list;
char channel_name[CHANNEL_NAME_SIZE];
const struct rtt_control *ctrl;
struct rtt_channel_info info;
+ if (CMD_ARGC != 0)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
if (!rtt_found_cb()) {
- Jim_SetResultFormatted(interp, "rtt: Control block not available");
+ command_print(CMD, "rtt: Control block not available");
return ERROR_FAIL;
}
@@ -169,81 +169,47 @@ static int jim_channel_list(Jim_Interp *interp, int argc,
info.name = channel_name;
info.name_length = sizeof(channel_name);
- list = Jim_NewListObj(interp, NULL, 0);
- channel_list = Jim_NewListObj(interp, NULL, 0);
+ command_print(CMD, "{");
for (unsigned int i = 0; i < ctrl->num_up_channels; i++) {
- int ret;
- Jim_Obj *tmp;
-
- ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_UP, &info);
-
+ int ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_UP, &info);
if (ret != ERROR_OK)
return ret;
if (!info.size)
continue;
- tmp = Jim_NewListObj(interp, NULL, 0);
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "name", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- info.name, -1));
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "size", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
- info.size));
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "flags", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
- info.flags));
-
- Jim_ListAppendElement(interp, channel_list, tmp);
+ command_print(CMD,
+ " {\n"
+ " name %s\n"
+ " size 0x%" PRIx32 "\n"
+ " flags 0x%" PRIx32 "\n"
+ " }",
+ info.name, info.size, info.flags);
}
- Jim_ListAppendElement(interp, list, channel_list);
-
- channel_list = Jim_NewListObj(interp, NULL, 0);
+ command_print(CMD, "}\n{");
for (unsigned int i = 0; i < ctrl->num_down_channels; i++) {
- int ret;
- Jim_Obj *tmp;
-
- ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_DOWN, &info);
-
+ int ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_DOWN, &info);
if (ret != ERROR_OK)
return ret;
if (!info.size)
continue;
- tmp = Jim_NewListObj(interp, NULL, 0);
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "name", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- info.name, -1));
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "size", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
- info.size));
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "flags", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
- info.flags));
-
- Jim_ListAppendElement(interp, channel_list, tmp);
+ command_print(CMD,
+ " {\n"
+ " name %s\n"
+ " size 0x%" PRIx32 "\n"
+ " flags 0x%" PRIx32 "\n"
+ " }",
+ info.name, info.size, info.flags);
}
- Jim_ListAppendElement(interp, list, channel_list);
- Jim_SetResult(interp, list);
+ command_print(CMD, "}");
- return JIM_OK;
+ return ERROR_OK;
}
static const struct command_registration rtt_subcommand_handlers[] = {
@@ -284,7 +250,7 @@ static const struct command_registration rtt_subcommand_handlers[] = {
},
{
.name = "channellist",
- .jim_handler = jim_channel_list,
+ .handler = handle_channel_list,
.mode = COMMAND_EXEC,
.help = "list available channels",
.usage = ""
-----------------------------------------------------------------------
Summary of changes:
src/rtt/tcl.c | 86 +++++++++++-----------------------
src/target/aarch64.c | 129 ++++++++++++++++++---------------------------------
2 files changed, 72 insertions(+), 143 deletions(-)
hooks/post-receive
--
Main OpenOCD repository
|