return x + 1;
}
+static void append_to_list_all_targets(struct target *target)
+{
+ struct target **t = &all_targets;
+
+ while (*t)
+ t = &((*t)->next);
+ *t = target;
+}
+
/* read a uint64_t from a buffer in target memory endianness */
uint64_t target_buffer_get_u64(struct target *target, const uint8_t *buffer)
{
/* If backup memory was allocated to this area, it has the wrong size
* now so free it and it will be reallocated if/when needed */
- if (area->backup) {
- free(area->backup);
- area->backup = NULL;
- }
+ free(area->backup);
+ area->backup = NULL;
}
}
/* Remove the last */
struct working_area *to_be_freed = c->next;
c->next = c->next->next;
- if (to_be_freed->backup)
- free(to_be_freed->backup);
+ free(to_be_freed->backup);
free(to_be_freed);
/* If backup memory was allocated to the remaining area, it's has
* the wrong size now */
- if (c->backup) {
- free(c->backup);
- c->backup = NULL;
- }
+ free(c->backup);
+ c->backup = NULL;
} else {
c = c->next;
}
if (target->type->deinit_target)
target->type->deinit_target(target);
- if (target->semihosting)
- free(target->semihosting);
+ free(target->semihosting);
jtag_unregister_event_callback(jtag_enable_callback, target);
*/
int target_write_buffer(struct target *target, target_addr_t address, uint32_t size, const uint8_t *buffer)
{
- LOG_DEBUG("writing buffer of %" PRIi32 " byte at " TARGET_ADDR_FMT,
+ LOG_DEBUG("writing buffer of %" PRIu32 " byte at " TARGET_ADDR_FMT,
size, address);
if (!target_was_examined(target)) {
*/
int target_read_buffer(struct target *target, target_addr_t address, uint32_t size, uint8_t *buffer)
{
- LOG_DEBUG("reading buffer of %" PRIi32 " byte at " TARGET_ADDR_FMT,
+ LOG_DEBUG("reading buffer of %" PRIu32 " byte at " TARGET_ADDR_FMT,
size, address);
if (!target_was_examined(target)) {
if (retval != ERROR_OK) {
buffer = malloc(size);
if (buffer == NULL) {
- LOG_ERROR("error allocating buffer for section (%" PRId32 " bytes)", size);
+ LOG_ERROR("error allocating buffer for section (%" PRIu32 " bytes)", size);
return ERROR_COMMAND_SYNTAX_ERROR;
}
retval = target_read_buffer(target, address, size, buffer);
continue;
/* only print cached values if they are valid */
if (reg->valid) {
- value = buf_to_str(reg->value,
- reg->size, 16);
+ value = buf_to_hex_str(reg->value,
+ reg->size);
command_print(CMD,
"(%i) %s (/%" PRIu32 "): 0x%s%s",
count, reg->name,
if (reg->valid == 0)
reg->type->get(reg);
- value = buf_to_str(reg->value, reg->size, 16);
+ value = buf_to_hex_str(reg->value, reg->size);
command_print(CMD, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
free(value);
return ERROR_OK;
reg->type->set(reg, buf);
- value = buf_to_str(reg->value, reg->size, 16);
+ value = buf_to_hex_str(reg->value, reg->size);
command_print(CMD, "%s (/%i): 0x%s", reg->name, (int)(reg->size), value);
free(value);
struct breakpoint *breakpoint = target->breakpoints;
while (breakpoint) {
if (breakpoint->type == BKPT_SOFT) {
- char *buf = buf_to_str(breakpoint->orig_instr,
- breakpoint->length, 16);
+ char *buf = buf_to_hex_str(breakpoint->orig_instr,
+ breakpoint->length);
command_print(cmd, "IVA breakpoint: " TARGET_ADDR_FMT ", 0x%x, %i, 0x%s",
breakpoint->address,
breakpoint->length,
} else {
char buf[100];
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
- sprintf(buf, "mem2array address: 0x%08" PRIx32 " is not aligned for %" PRId32 " byte reads",
+ sprintf(buf, "mem2array address: 0x%08" PRIx32 " is not aligned for %" PRIu32 " byte reads",
addr,
width);
Jim_AppendStrings(interp, Jim_GetResult(interp), buf, NULL);
retval = target_read_memory(target, addr, width, count, buffer);
if (retval != ERROR_OK) {
/* BOO !*/
- LOG_ERROR("mem2array: Read @ 0x%08" PRIx32 ", w=%" PRId32 ", cnt=%" PRId32 ", failed",
+ LOG_ERROR("mem2array: Read @ 0x%08" PRIx32 ", w=%" PRIu32 ", cnt=%" PRIu32 ", failed",
addr,
width,
count);
} else {
char buf[100];
Jim_SetResult(interp, Jim_NewEmptyStringObj(interp));
- sprintf(buf, "array2mem address: 0x%08" PRIx32 " is not aligned for %" PRId32 " byte reads",
+ sprintf(buf, "array2mem address: 0x%08" PRIx32 " is not aligned for %" PRIu32 " byte reads",
addr,
width);
Jim_AppendStrings(interp, Jim_GetResult(interp), buf, NULL);
retval = target_write_memory(target, addr, width, count, buffer);
if (retval != ERROR_OK) {
/* BOO !*/
- LOG_ERROR("array2mem: Write @ 0x%08" PRIx32 ", w=%" PRId32 ", cnt=%" PRId32 ", failed",
+ LOG_ERROR("array2mem: Write @ 0x%08" PRIx32 ", w=%" PRIu32 ", cnt=%" PRIu32 ", failed",
addr,
width,
count);
/* Create it */
target = calloc(1, sizeof(struct target));
+ if (!target) {
+ LOG_ERROR("Out of memory");
+ return JIM_ERR;
+ }
+
/* set target number */
target->target_number = new_target_number();
- cmd_ctx->current_target = target;
/* allocate memory for each unique target type */
- target->type = calloc(1, sizeof(struct target_type));
+ target->type = malloc(sizeof(struct target_type));
+ if (!target->type) {
+ LOG_ERROR("Out of memory");
+ free(target);
+ return JIM_ERR;
+ }
memcpy(target->type, target_types[x], sizeof(struct target_type));
/* initialize trace information */
target->trace_info = calloc(1, sizeof(struct trace));
+ if (!target->trace_info) {
+ LOG_ERROR("Out of memory");
+ free(target->type);
+ free(target);
+ return JIM_ERR;
+ }
target->dbgmsg = NULL;
target->dbg_msg_enabled = 0;
}
if (e != JIM_OK) {
+ rtos_destroy(target);
free(target->gdb_port_override);
+ free(target->trace_info);
free(target->type);
free(target);
return e;
cp = Jim_GetString(new_cmd, NULL);
target->cmd_name = strdup(cp);
+ if (!target->cmd_name) {
+ LOG_ERROR("Out of memory");
+ rtos_destroy(target);
+ free(target->gdb_port_override);
+ free(target->trace_info);
+ free(target->type);
+ free(target);
+ return JIM_ERR;
+ }
if (target->type->target_create) {
e = (*(target->type->target_create))(target, goi->interp);
if (e != ERROR_OK) {
LOG_DEBUG("target_create failed");
+ free(target->cmd_name);
+ rtos_destroy(target);
free(target->gdb_port_override);
+ free(target->trace_info);
free(target->type);
- free(target->cmd_name);
free(target);
return JIM_ERR;
}
LOG_ERROR("unable to register '%s' commands", cp);
}
- /* append to end of list */
- {
- struct target **tpp;
- tpp = &(all_targets);
- while (*tpp)
- tpp = &((*tpp)->next);
- *tpp = target;
- }
-
/* now - create the new target name command */
const struct command_registration target_subcommands[] = {
{
COMMAND_REGISTRATION_DONE
};
e = register_commands(cmd_ctx, NULL, target_commands);
- if (ERROR_OK != e)
+ if (e != ERROR_OK) {
+ if (target->type->deinit_target)
+ target->type->deinit_target(target);
+ free(target->cmd_name);
+ rtos_destroy(target);
+ free(target->gdb_port_override);
+ free(target->trace_info);
+ free(target->type);
+ free(target);
return JIM_ERR;
+ }
struct command *c = command_find_in_context(cmd_ctx, cp);
assert(c);
command_set_handler_data(c, target);
- return (ERROR_OK == e) ? JIM_OK : JIM_ERR;
+ /* append to end of list */
+ append_to_list_all_targets(target);
+
+ cmd_ctx->current_target = target;
+ return JIM_OK;
}
static int jim_target_current(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
static void free_fastload(void)
{
if (fastload != NULL) {
- int i;
- for (i = 0; i < fastload_num; i++) {
- if (fastload[i].data)
- free(fastload[i].data);
- }
+ for (int i = 0; i < fastload_num; i++)
+ free(fastload[i].data);
free(fastload);
fastload = NULL;
}