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/+/8052

-- gerrit

commit 7776438d45e3b3a8fcef66163547f389249b6277
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Sun Dec 3 18:10:45 2023 +0100

    target: drop deprecated code for mem2array and array2mem
    
    Commit e370e06b724f ("target: Deprecate 'array2mem' and
    'mem2array''") has already replaced the deprecated root versions
    of commands mem2array and array2mem with TCL proc's that use
    'read_memory' and 'write_memory'. It has left the deprecated code
    of the target's version of the commands because the effort to code
    the TCL replacement was not considered valuable.
    
    To drop the last jim_handler commands, I consider much easier and
    less error-prone to code them in TCL instead of converting the
    deprecated code to COMMAND_HANDLER.
    
    Drop the code in target.c and extend the TCL proc's.
    While there, add the TCL procs to _telnet_autocomplete_skip.
    
    Change-Id: I97d2370d8af479434ddf5af68541f90913982bc0
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/target/startup.tcl b/src/target/startup.tcl
index 35492a6d91..75e0edc77d 100644
--- a/src/target/startup.tcl
+++ b/src/target/startup.tcl
@@ -219,31 +219,44 @@ proc init_target_events {} {
 proc init_board {} {
 }
 
-proc mem2array {arrayname bitwidth address count {phys ""}} {
-       echo "DEPRECATED! use 'read_memory' not 'mem2array'"
-
-       upvar $arrayname $arrayname
-       set $arrayname ""
-       set i 0
-
-       foreach elem [read_memory $address $bitwidth $count {*}$phys] {
-               set ${arrayname}($i) $elem
-               incr i
-       }
-}
-
-proc array2mem {arrayname bitwidth address count {phys ""}} {
-       echo "DEPRECATED! use 'write_memory' not 'array2mem'"
-
-       upvar $arrayname $arrayname
-       set data ""
+lappend _telnet_autocomplete_skip _post_init_target_array_mem
+proc _post_init_target_array_mem {} {
+       set targets [target names]
+       lappend targets ""
 
-       for {set i 0} {$i < $count} {incr i} {
-               lappend data [expr $${arrayname}($i)]
+       foreach t $targets {
+               if {$t != ""} {
+                       set t "$t "
+               }
+               eval [format    {lappend ::_telnet_autocomplete_skip 
"%smem2array"} $t]
+               eval [format    {proc {%smem2array} {arrayname bitwidth address 
count {phys ""}} {
+                                                       echo "DEPRECATED! use 
'read_memory' not 'mem2array'"
+
+                                                       upvar $arrayname 
$arrayname
+                                                       set $arrayname ""
+                                                       set i 0
+
+                                                       foreach elem 
[%sread_memory $address $bitwidth $count {*}$phys] {
+                                                               set 
${arrayname}($i) $elem
+                                                               incr i
+                                                       }
+                                               }} $t $t]
+               eval [format    {lappend ::_telnet_autocomplete_skip 
"%sarray2mem"} $t]
+               eval [format    {proc {%sarray2mem} {arrayname bitwidth address 
count {phys ""}} {
+                                                       echo "DEPRECATED! use 
'write_memory' not 'array2mem'"
+
+                                                       upvar $arrayname 
$arrayname
+                                                       set data ""
+
+                                                       for {set i 0} {$i < 
$count} {incr i} {
+                                                               lappend data 
[expr $${arrayname}($i)]
+                                                       }
+
+                                                       %swrite_memory $address 
$bitwidth $data {*}$phys
+                                               }} $t $t]
        }
-
-       write_memory $address $bitwidth $data {*}$phys
 }
+lappend post_init_commands _post_init_target_array_mem
 
 # smp_on/smp_off were already DEPRECATED in v0.11.0 through 
http://openocd.zylin.com/4615
 lappend _telnet_autocomplete_skip "aarch64 smp_on"
diff --git a/src/target/target.c b/src/target/target.c
index bb773f6a5c..6e3537a65d 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -56,10 +56,6 @@ static int target_read_buffer_default(struct target *target, 
target_addr_t addre
                uint32_t count, uint8_t *buffer);
 static int target_write_buffer_default(struct target *target, target_addr_t 
address,
                uint32_t count, const uint8_t *buffer);
-static int target_array2mem(Jim_Interp *interp, struct target *target,
-               int argc, Jim_Obj * const *argv);
-static int target_mem2array(Jim_Interp *interp, struct target *target,
-               int argc, Jim_Obj * const *argv);
 static int target_register_user_commands(struct command_context *cmd_ctx);
 static int target_get_gdb_fileio_info_default(struct target *target,
                struct gdb_fileio_info *fileio_info);
@@ -4379,192 +4375,6 @@ COMMAND_HANDLER(handle_profile_command)
        return retval;
 }
 
-static int new_u64_array_element(Jim_Interp *interp, const char *varname, int 
idx, uint64_t val)
-{
-       char *namebuf;
-       Jim_Obj *obj_name, *obj_val;
-       int result;
-
-       namebuf = alloc_printf("%s(%d)", varname, idx);
-       if (!namebuf)
-               return JIM_ERR;
-
-       obj_name = Jim_NewStringObj(interp, namebuf, -1);
-       jim_wide wide_val = val;
-       obj_val = Jim_NewWideObj(interp, wide_val);
-       if (!obj_name || !obj_val) {
-               free(namebuf);
-               return JIM_ERR;
-       }
-
-       Jim_IncrRefCount(obj_name);
-       Jim_IncrRefCount(obj_val);
-       result = Jim_SetVariable(interp, obj_name, obj_val);
-       Jim_DecrRefCount(interp, obj_name);
-       Jim_DecrRefCount(interp, obj_val);
-       free(namebuf);
-       /* printf("%s(%d) <= 0%08x\n", varname, idx, val); */
-       return result;
-}
-
-static int target_mem2array(Jim_Interp *interp, struct target *target, int 
argc, Jim_Obj *const *argv)
-{
-       int e;
-
-       LOG_WARNING("DEPRECATED! use 'read_memory' not 'mem2array'");
-
-       /* argv[0] = name of array to receive the data
-        * argv[1] = desired element width in bits
-        * argv[2] = memory address
-        * argv[3] = count of times to read
-        * argv[4] = optional "phys"
-        */
-       if (argc < 4 || argc > 5) {
-               Jim_WrongNumArgs(interp, 0, argv, "varname width addr nelems 
[phys]");
-               return JIM_ERR;
-       }
-
-       /* Arg 0: Name of the array variable */
-       const char *varname = Jim_GetString(argv[0], NULL);
-
-       /* Arg 1: Bit width of one element */
-       long l;
-       e = Jim_GetLong(interp, argv[1], &l);
-       if (e != JIM_OK)
-               return e;
-       const unsigned int width_bits = l;
-
-       if (width_bits != 8 &&
-                       width_bits != 16 &&
-                       width_bits != 32 &&
-                       width_bits != 64) {
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp),
-                               "Invalid width param. Must be one of: 8, 16, 32 
or 64.", NULL);
-               return JIM_ERR;
-       }
-       const unsigned int width = width_bits / 8;
-
-       /* Arg 2: Memory address */
-       jim_wide wide_addr;
-       e = Jim_GetWide(interp, argv[2], &wide_addr);
-       if (e != JIM_OK)
-               return e;
-       target_addr_t addr = (target_addr_t)wide_addr;
-
-       /* Arg 3: Number of elements to read */
-       e = Jim_GetLong(interp, argv[3], &l);
-       if (e != JIM_OK)
-               return e;
-       size_t len = l;
-
-       /* Arg 4: phys */
-       bool is_phys = false;
-       if (argc > 4) {
-               int str_len = 0;
-               const char *phys = Jim_GetString(argv[4], &str_len);
-               if (!strncmp(phys, "phys", str_len))
-                       is_phys = true;
-               else
-                       return JIM_ERR;
-       }
-
-       /* Argument checks */
-       if (len == 0) {
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: 
zero width read?", NULL);
-               return JIM_ERR;
-       }
-       if ((addr + (len * width)) < addr) {
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp), "mem2array: 
addr + len - wraps to zero?", NULL);
-               return JIM_ERR;
-       }
-       if (len > 65536) {
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp),
-                               "mem2array: too large read request, exceeds 64K 
items", NULL);
-               return JIM_ERR;
-       }
-
-       if ((width == 1) ||
-               ((width == 2) && ((addr & 1) == 0)) ||
-               ((width == 4) && ((addr & 3) == 0)) ||
-               ((width == 8) && ((addr & 7) == 0))) {
-               /* alignment correct */
-       } else {
-               char buf[100];
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               sprintf(buf, "mem2array address: " TARGET_ADDR_FMT " is not 
aligned for %" PRIu32 " byte reads",
-                               addr,
-                               width);
-               Jim_AppendStrings(interp, Jim_GetResult(interp), buf, NULL);
-               return JIM_ERR;
-       }
-
-       /* Transfer loop */
-
-       /* index counter */
-       size_t idx = 0;
-
-       const size_t buffersize = 4096;
-       uint8_t *buffer = malloc(buffersize);
-       if (!buffer)
-               return JIM_ERR;
-
-       /* assume ok */
-       e = JIM_OK;
-       while (len) {
-               /* Slurp... in buffer size chunks */
-               const unsigned int max_chunk_len = buffersize / width;
-               const size_t chunk_len = MIN(len, max_chunk_len); /* in 
elements.. */
-
-               int retval;
-               if (is_phys)
-                       retval = target_read_phys_memory(target, addr, width, 
chunk_len, buffer);
-               else
-                       retval = target_read_memory(target, addr, width, 
chunk_len, buffer);
-               if (retval != ERROR_OK) {
-                       /* BOO !*/
-                       LOG_ERROR("mem2array: Read @ " TARGET_ADDR_FMT ", w=%u, 
cnt=%zu, failed",
-                                         addr,
-                                         width,
-                                         chunk_len);
-                       Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-                       Jim_AppendStrings(interp, Jim_GetResult(interp), 
"mem2array: cannot read memory", NULL);
-                       e = JIM_ERR;
-                       break;
-               } else {
-                       for (size_t i = 0; i < chunk_len ; i++, idx++) {
-                               uint64_t v = 0;
-                               switch (width) {
-                                       case 8:
-                                               v = 
target_buffer_get_u64(target, &buffer[i*width]);
-                                               break;
-                                       case 4:
-                                               v = 
target_buffer_get_u32(target, &buffer[i*width]);
-                                               break;
-                                       case 2:
-                                               v = 
target_buffer_get_u16(target, &buffer[i*width]);
-                                               break;
-                                       case 1:
-                                               v = buffer[i] & 0x0ff;
-                                               break;
-                               }
-                               new_u64_array_element(interp, varname, idx, v);
-                       }
-                       len -= chunk_len;
-                       addr += chunk_len * width;
-               }
-       }
-
-       free(buffer);
-
-       Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-
-       return e;
-}
-
 COMMAND_HANDLER(handle_target_read_memory)
 {
        /*
@@ -4688,201 +4498,6 @@ COMMAND_HANDLER(handle_target_read_memory)
        return ERROR_OK;
 }
 
-static int get_u64_array_element(Jim_Interp *interp, const char *varname, 
size_t idx, uint64_t *val)
-{
-       char *namebuf = alloc_printf("%s(%zu)", varname, idx);
-       if (!namebuf)
-               return JIM_ERR;
-
-       Jim_Obj *obj_name = Jim_NewStringObj(interp, namebuf, -1);
-       if (!obj_name) {
-               free(namebuf);
-               return JIM_ERR;
-       }
-
-       Jim_IncrRefCount(obj_name);
-       Jim_Obj *obj_val = Jim_GetVariable(interp, obj_name, JIM_ERRMSG);
-       Jim_DecrRefCount(interp, obj_name);
-       free(namebuf);
-       if (!obj_val)
-               return JIM_ERR;
-
-       jim_wide wide_val;
-       int result = Jim_GetWide(interp, obj_val, &wide_val);
-       *val = wide_val;
-       return result;
-}
-
-static int target_array2mem(Jim_Interp *interp, struct target *target,
-               int argc, Jim_Obj *const *argv)
-{
-       int e;
-
-       LOG_WARNING("DEPRECATED! use 'write_memory' not 'array2mem'");
-
-       /* argv[0] = name of array from which to read the data
-        * argv[1] = desired element width in bits
-        * argv[2] = memory address
-        * argv[3] = number of elements to write
-        * argv[4] = optional "phys"
-        */
-       if (argc < 4 || argc > 5) {
-               Jim_WrongNumArgs(interp, 0, argv, "varname width addr nelems 
[phys]");
-               return JIM_ERR;
-       }
-
-       /* Arg 0: Name of the array variable */
-       const char *varname = Jim_GetString(argv[0], NULL);
-
-       /* Arg 1: Bit width of one element */
-       long l;
-       e = Jim_GetLong(interp, argv[1], &l);
-       if (e != JIM_OK)
-               return e;
-       const unsigned int width_bits = l;
-
-       if (width_bits != 8 &&
-                       width_bits != 16 &&
-                       width_bits != 32 &&
-                       width_bits != 64) {
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp),
-                               "Invalid width param. Must be one of: 8, 16, 32 
or 64.", NULL);
-               return JIM_ERR;
-       }
-       const unsigned int width = width_bits / 8;
-
-       /* Arg 2: Memory address */
-       jim_wide wide_addr;
-       e = Jim_GetWide(interp, argv[2], &wide_addr);
-       if (e != JIM_OK)
-               return e;
-       target_addr_t addr = (target_addr_t)wide_addr;
-
-       /* Arg 3: Number of elements to write */
-       e = Jim_GetLong(interp, argv[3], &l);
-       if (e != JIM_OK)
-               return e;
-       size_t len = l;
-
-       /* Arg 4: Phys */
-       bool is_phys = false;
-       if (argc > 4) {
-               int str_len = 0;
-               const char *phys = Jim_GetString(argv[4], &str_len);
-               if (!strncmp(phys, "phys", str_len))
-                       is_phys = true;
-               else
-                       return JIM_ERR;
-       }
-
-       /* Argument checks */
-       if (len == 0) {
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp),
-                               "array2mem: zero width read?", NULL);
-               return JIM_ERR;
-       }
-
-       if ((addr + (len * width)) < addr) {
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp),
-                               "array2mem: addr + len - wraps to zero?", NULL);
-               return JIM_ERR;
-       }
-
-       if (len > 65536) {
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               Jim_AppendStrings(interp, Jim_GetResult(interp),
-                               "array2mem: too large memory write request, 
exceeds 64K items", NULL);
-               return JIM_ERR;
-       }
-
-       if ((width == 1) ||
-               ((width == 2) && ((addr & 1) == 0)) ||
-               ((width == 4) && ((addr & 3) == 0)) ||
-               ((width == 8) && ((addr & 7) == 0))) {
-               /* alignment correct */
-       } else {
-               char buf[100];
-               Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-               sprintf(buf, "array2mem address: " TARGET_ADDR_FMT " is not 
aligned for %" PRIu32 " byte reads",
-                               addr,
-                               width);
-               Jim_AppendStrings(interp, Jim_GetResult(interp), buf, NULL);
-               return JIM_ERR;
-       }
-
-       /* Transfer loop */
-
-       /* assume ok */
-       e = JIM_OK;
-
-       const size_t buffersize = 4096;
-       uint8_t *buffer = malloc(buffersize);
-       if (!buffer)
-               return JIM_ERR;
-
-       /* index counter */
-       size_t idx = 0;
-
-       while (len) {
-               /* Slurp... in buffer size chunks */
-               const unsigned int max_chunk_len = buffersize / width;
-
-               const size_t chunk_len = MIN(len, max_chunk_len); /* in 
elements.. */
-
-               /* Fill the buffer */
-               for (size_t i = 0; i < chunk_len; i++, idx++) {
-                       uint64_t v = 0;
-                       if (get_u64_array_element(interp, varname, idx, &v) != 
JIM_OK) {
-                               free(buffer);
-                               return JIM_ERR;
-                       }
-                       switch (width) {
-                       case 8:
-                               target_buffer_set_u64(target, &buffer[i * 
width], v);
-                               break;
-                       case 4:
-                               target_buffer_set_u32(target, &buffer[i * 
width], v);
-                               break;
-                       case 2:
-                               target_buffer_set_u16(target, &buffer[i * 
width], v);
-                               break;
-                       case 1:
-                               buffer[i] = v & 0x0ff;
-                               break;
-                       }
-               }
-               len -= chunk_len;
-
-               /* Write the buffer to memory */
-               int retval;
-               if (is_phys)
-                       retval = target_write_phys_memory(target, addr, width, 
chunk_len, buffer);
-               else
-                       retval = target_write_memory(target, addr, width, 
chunk_len, buffer);
-               if (retval != ERROR_OK) {
-                       /* BOO !*/
-                       LOG_ERROR("array2mem: Write @ " TARGET_ADDR_FMT ", 
w=%u, cnt=%zu, failed",
-                                         addr,
-                                         width,
-                                         chunk_len);
-                       Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-                       Jim_AppendStrings(interp, Jim_GetResult(interp), 
"array2mem: cannot read memory", NULL);
-                       e = JIM_ERR;
-                       break;
-               }
-               addr += chunk_len * width;
-       }
-
-       free(buffer);
-
-       Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
-
-       return e;
-}
-
 static int target_jim_write_memory(Jim_Interp *interp, int argc,
                Jim_Obj * const *argv)
 {
@@ -5619,24 +5234,6 @@ static int jim_target_configure(Jim_Interp *interp, int 
argc, Jim_Obj * const *a
        return target_configure(&goi, target);
 }
 
-static int jim_target_mem2array(Jim_Interp *interp,
-               int argc, Jim_Obj *const *argv)
-{
-       struct command_context *cmd_ctx = current_command_context(interp);
-       assert(cmd_ctx);
-       struct target *target = get_current_target(cmd_ctx);
-       return target_mem2array(interp, target, argc - 1, argv + 1);
-}
-
-static int jim_target_array2mem(Jim_Interp *interp,
-               int argc, Jim_Obj *const *argv)
-{
-       struct command_context *cmd_ctx = current_command_context(interp);
-       assert(cmd_ctx);
-       struct target *target = get_current_target(cmd_ctx);
-       return target_array2mem(interp, target, argc - 1, argv + 1);
-}
-
 COMMAND_HANDLER(handle_target_examine)
 {
        bool allow_defer = false;
@@ -5958,22 +5555,6 @@ static const struct command_registration 
target_instance_command_handlers[] = {
                .help = "Display target memory as 8-bit bytes",
                .usage = "address [count]",
        },
-       {
-               .name = "array2mem",
-               .mode = COMMAND_EXEC,
-               .jim_handler = jim_target_array2mem,
-               .help = "Writes Tcl array of 8/16/32 bit numbers "
-                       "to target memory",
-               .usage = "arrayname bitwidth address count",
-       },
-       {
-               .name = "mem2array",
-               .mode = COMMAND_EXEC,
-               .jim_handler = jim_target_mem2array,
-               .help = "Loads Tcl array of 8/16/32 bit numbers "
-                       "from target memory",
-               .usage = "arrayname bitwidth address count",
-       },
        {
                .name = "get_reg",
                .mode = COMMAND_EXEC,

-- 

Reply via email to