This is an automated email from Gerrit. "Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8584
-- gerrit commit 8179b873f94b6f2b79d83eb5c0c42c0974e458b6 Author: Antonio Borneo <borneo.anto...@gmail.com> Date: Sat Dec 2 16:14:32 2023 +0100 target: rewrite command 'set_reg' as COMMAND_HANDLER Drop the use of Jim dictionary and simply handle it as a list. This has the drawback that repeated registers will be written at each repetition. Change-Id: I8e6e2f834a129ff1f6ea8f4c276fedf75cf40c39 Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com> diff --git a/src/target/target.c b/src/target/target.c index de6d89429b..44ff740a69 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -4754,38 +4754,27 @@ COMMAND_HANDLER(handle_target_get_reg) return ERROR_OK; } -COMMAND_HANDLER(handle_set_reg_command) +COMMAND_HANDLER(handle_target_set_reg) { if (CMD_ARGC != 1) return ERROR_COMMAND_SYNTAX_ERROR; - int tmp; -#if JIM_VERSION >= 80 - Jim_Obj **dict = Jim_DictPairs(CMD_CTX->interp, CMD_JIMTCL_ARGV[0], &tmp); - - if (!dict) - return ERROR_FAIL; -#else - Jim_Obj **dict; - int ret = Jim_DictPairs(CMD_CTX->interp, CMD_JIMTCL_ARGV[0], &dict, &tmp); - - if (ret != JIM_OK) - return ERROR_FAIL; -#endif - - const unsigned int length = tmp; + const unsigned int length = Jim_ListLength(CMD_CTX->interp, CMD_JIMTCL_ARGV[0]); + if (length % 2) { + command_print(CMD, "missing value"); + return ERROR_COMMAND_ARGUMENT_INVALID; + } const struct target *target = get_current_target(CMD_CTX); - assert(target); for (unsigned int i = 0; i < length; i += 2) { - const char *reg_name = Jim_String(dict[i]); - const char *reg_value = Jim_String(dict[i + 1]); + const char *reg_name = Jim_String(Jim_ListGetIndex(CMD_CTX->interp, CMD_JIMTCL_ARGV[0], i)); + const char *reg_value = Jim_String(Jim_ListGetIndex(CMD_CTX->interp, CMD_JIMTCL_ARGV[0], i + 1)); struct reg *reg = register_get_by_name(target->reg_cache, reg_name, false); if (!reg || !reg->exist) { command_print(CMD, "unknown register '%s'", reg_name); - return ERROR_FAIL; + return ERROR_COMMAND_ARGUMENT_INVALID; } uint8_t *buf = malloc(DIV_ROUND_UP(reg->size, 8)); @@ -5550,7 +5539,7 @@ static const struct command_registration target_instance_command_handlers[] = { { .name = "set_reg", .mode = COMMAND_EXEC, - .handler = handle_set_reg_command, + .handler = handle_target_set_reg, .help = "Set target register values", .usage = "dict", }, @@ -6685,7 +6674,7 @@ static const struct command_registration target_exec_command_handlers[] = { { .name = "set_reg", .mode = COMMAND_EXEC, - .handler = handle_set_reg_command, + .handler = handle_target_set_reg, .help = "Set target register values", .usage = "dict", }, --