target: drop deprecated code for mem2array and array2mem
Commit e370e06b72
("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.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/8052
Tested-by: jenkins
This commit is contained in:
parent
0425853d7b
commit
88b8f2a796
|
@ -219,20 +219,30 @@ proc init_target_events {} {
|
||||||
proc init_board {} {
|
proc init_board {} {
|
||||||
}
|
}
|
||||||
|
|
||||||
proc mem2array {arrayname bitwidth address count {phys ""}} {
|
lappend _telnet_autocomplete_skip _post_init_target_array_mem
|
||||||
|
proc _post_init_target_array_mem {} {
|
||||||
|
set targets [target names]
|
||||||
|
lappend targets ""
|
||||||
|
|
||||||
|
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'"
|
echo "DEPRECATED! use 'read_memory' not 'mem2array'"
|
||||||
|
|
||||||
upvar $arrayname $arrayname
|
upvar $arrayname $arrayname
|
||||||
set $arrayname ""
|
set $arrayname ""
|
||||||
set i 0
|
set i 0
|
||||||
|
|
||||||
foreach elem [read_memory $address $bitwidth $count {*}$phys] {
|
foreach elem [%sread_memory $address $bitwidth $count {*}$phys] {
|
||||||
set ${arrayname}($i) $elem
|
set ${arrayname}($i) $elem
|
||||||
incr i
|
incr i
|
||||||
}
|
}
|
||||||
}
|
}} $t $t]
|
||||||
|
eval [format {lappend ::_telnet_autocomplete_skip "%sarray2mem"} $t]
|
||||||
proc array2mem {arrayname bitwidth address count {phys ""}} {
|
eval [format {proc {%sarray2mem} {arrayname bitwidth address count {phys ""}} {
|
||||||
echo "DEPRECATED! use 'write_memory' not 'array2mem'"
|
echo "DEPRECATED! use 'write_memory' not 'array2mem'"
|
||||||
|
|
||||||
upvar $arrayname $arrayname
|
upvar $arrayname $arrayname
|
||||||
|
@ -242,8 +252,11 @@ proc array2mem {arrayname bitwidth address count {phys ""}} {
|
||||||
lappend data [expr $${arrayname}($i)]
|
lappend data [expr $${arrayname}($i)]
|
||||||
}
|
}
|
||||||
|
|
||||||
write_memory $address $bitwidth $data {*}$phys
|
%swrite_memory $address $bitwidth $data {*}$phys
|
||||||
|
}} $t $t]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
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
|
# smp_on/smp_off were already DEPRECATED in v0.11.0 through http://openocd.zylin.com/4615
|
||||||
lappend _telnet_autocomplete_skip "aarch64 smp_on"
|
lappend _telnet_autocomplete_skip "aarch64 smp_on"
|
||||||
|
|
|
@ -56,10 +56,6 @@ static int target_read_buffer_default(struct target *target, target_addr_t addre
|
||||||
uint32_t count, uint8_t *buffer);
|
uint32_t count, uint8_t *buffer);
|
||||||
static int target_write_buffer_default(struct target *target, target_addr_t address,
|
static int target_write_buffer_default(struct target *target, target_addr_t address,
|
||||||
uint32_t count, const uint8_t *buffer);
|
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_register_user_commands(struct command_context *cmd_ctx);
|
||||||
static int target_get_gdb_fileio_info_default(struct target *target,
|
static int target_get_gdb_fileio_info_default(struct target *target,
|
||||||
struct gdb_fileio_info *fileio_info);
|
struct gdb_fileio_info *fileio_info);
|
||||||
|
@ -4399,192 +4395,6 @@ COMMAND_HANDLER(handle_profile_command)
|
||||||
return retval;
|
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)
|
COMMAND_HANDLER(handle_target_read_memory)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -4708,201 +4518,6 @@ COMMAND_HANDLER(handle_target_read_memory)
|
||||||
return ERROR_OK;
|
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,
|
static int target_jim_write_memory(Jim_Interp *interp, int argc,
|
||||||
Jim_Obj * const *argv)
|
Jim_Obj * const *argv)
|
||||||
{
|
{
|
||||||
|
@ -5639,24 +5254,6 @@ static int jim_target_configure(Jim_Interp *interp, int argc, Jim_Obj * const *a
|
||||||
return target_configure(&goi, target);
|
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)
|
COMMAND_HANDLER(handle_target_examine)
|
||||||
{
|
{
|
||||||
bool allow_defer = false;
|
bool allow_defer = false;
|
||||||
|
@ -5978,22 +5575,6 @@ static const struct command_registration target_instance_command_handlers[] = {
|
||||||
.help = "Display target memory as 8-bit bytes",
|
.help = "Display target memory as 8-bit bytes",
|
||||||
.usage = "address [count]",
|
.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",
|
.name = "get_reg",
|
||||||
.mode = COMMAND_EXEC,
|
.mode = COMMAND_EXEC,
|
||||||
|
|
Loading…
Reference in New Issue