{
"debug request", "breakpoint", "watchpoint",
"watchpoint and breakpoint", "single step",
- "target not halted"
+ "target not halted", "undefined"
};
char *target_endianess_strings[] =
{
if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec)))
{
- command_print(cmd_ctx, "Timed out waiting for reset");
+ USER("Timed out waiting for reset");
goto done;
}
- usleep(100*1000); /* Do not eat all cpu */
+ /* this will send alive messages on e.g. GDB remote protocol. */
+ usleep(500*1000);
+ USER_N("%s", ""); /* avoid warning about zero length formatting message*/
goto again;
}
}
register_command(cmd_ctx, NULL, "targets", handle_targets_command, COMMAND_EXEC, NULL);
register_command(cmd_ctx, NULL, "daemon_startup", handle_daemon_startup_command, COMMAND_CONFIG, NULL);
register_command(cmd_ctx, NULL, "target_script", handle_target_script_command, COMMAND_CONFIG, NULL);
- register_command(cmd_ctx, NULL, "run_and_halt_time", handle_run_and_halt_time_command, COMMAND_CONFIG, NULL);
+ register_command(cmd_ctx, NULL, "run_and_halt_time", handle_run_and_halt_time_command, COMMAND_CONFIG, "<target> <run time ms>");
register_command(cmd_ctx, NULL, "working_area", handle_working_area_command, COMMAND_ANY, "working_area <target#> <address> <size> <'backup'|'nobackup'> [virtual address]");
register_command(cmd_ctx, NULL, "virt2phys", handle_virt2phys_command, COMMAND_ANY, "virt2phys <virtual address>");
if (argc < 3)
{
- ERROR("target command requires at least three arguments: <type> <endianess> <reset_mode>");
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
/* search for the specified target */
else
{
ERROR("endianness must be either 'little' or 'big', not '%s'", args[1]);
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
/* what to do on a target reset */
else
{
ERROR("unknown target startup mode %s", args[2]);
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
(*last_target_p)->run_and_halt_time = 1000; /* default 1s */
(*last_target_p)->backup_working_area = 0;
(*last_target_p)->state = TARGET_UNKNOWN;
+ (*last_target_p)->debug_reason = DBG_REASON_UNDEFINED;
(*last_target_p)->reg_cache = NULL;
(*last_target_p)->breakpoints = NULL;
(*last_target_p)->watchpoints = NULL;
if (!found)
{
ERROR("target '%s' not found", args[0]);
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
return ERROR_OK;
if (argc < 3)
{
ERROR("incomplete target_script command");
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
target = get_target_by_num(strtoul(args[0], NULL, 0));
if (!target)
{
- ERROR("target number '%s' not defined", args[0]);
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (strcmp(args[1], "reset") == 0)
else
{
ERROR("unknown event type: '%s", args[1]);
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
return ERROR_OK;
if (argc < 2)
{
- ERROR("incomplete run_and_halt_time command");
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
target = get_target_by_num(strtoul(args[0], NULL, 0));
if (!target)
{
- ERROR("target number '%s' not defined", args[0]);
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
target->run_and_halt_time = strtoul(args[1], NULL, 0);
if (!target)
{
- ERROR("target number '%s' not defined", args[0]);
- exit(-1);
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
target_free_all_working_areas(target);
int handle_soft_reset_halt_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
target_t *target = get_current_target(cmd_ctx);
- int retval;
- command_print(cmd_ctx, "requesting target halt and executing a soft reset");
+ USER("requesting target halt and executing a soft reset");
- if ((retval = target->type->soft_reset_halt(target)) != ERROR_OK)
- {
- switch (retval)
- {
- case ERROR_TARGET_TIMEOUT:
- command_print(cmd_ctx, "target timed out... shutting down");
- exit(-1);
- default:
- command_print(cmd_ctx, "unknown error... shutting down");
- exit(-1);
- }
- }
+ target->type->soft_reset_halt(target);
return ERROR_OK;
}
target_process_events(cmd_ctx);
- target_arch_state(target);
-
return retval;
}
}
image_size = 0x0;
+ retval = ERROR_OK;
for (i = 0; i < image.num_sections; i++)
{
buffer = malloc(image.sections[i].size);
if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK)
{
- ERROR("image_read_section failed with error code: %i", retval);
- command_print(cmd_ctx, "image reading failed, download aborted");
free(buffer);
- image_close(&image);
- return ERROR_OK;
+ break;
+ }
+ if ((retval = target_write_buffer(target, image.sections[i].base_address, buf_cnt, buffer)) != ERROR_OK)
+ {
+ free(buffer);
+ break;
}
- target_write_buffer(target, image.sections[i].base_address, buf_cnt, buffer);
image_size += buf_cnt;
command_print(cmd_ctx, "%u byte written at address 0x%8.8x", buf_cnt, image.sections[i].base_address);
}
duration_stop_measure(&duration, &duration_text);
- command_print(cmd_ctx, "downloaded %u byte in %s", image_size, duration_text);
+ if (retval==ERROR_OK)
+ {
+ command_print(cmd_ctx, "downloaded %u byte in %s", image_size, duration_text);
+ }
free(duration_text);
image_close(&image);
- return ERROR_OK;
+ return retval;
}
u32 address;
u32 size;
u8 buffer[560];
- int retval;
+ int retval=ERROR_OK;
duration_t duration;
char *duration_text;
retval = target->type->read_memory(target, address, 4, this_run_size / 4, buffer);
if (retval != ERROR_OK)
{
- command_print(cmd_ctx, "Reading memory failed %d", retval);
break;
}
- fileio_write(&fileio, this_run_size, buffer, &size_written);
+ retval = fileio_write(&fileio, this_run_size, buffer, &size_written);
+ if (retval != ERROR_OK)
+ {
+ break;
+ }
size -= this_run_size;
address += this_run_size;
fileio_close(&fileio);
duration_stop_measure(&duration, &duration_text);
- command_print(cmd_ctx, "dumped %"PRIi64" byte in %s", fileio.size, duration_text);
+ if (retval==ERROR_OK)
+ {
+ command_print(cmd_ctx, "dumped %"PRIi64" byte in %s", fileio.size, duration_text);
+ }
free(duration_text);
return ERROR_OK;
}
image_size = 0x0;
+ retval=ERROR_OK;
for (i = 0; i < image.num_sections; i++)
{
buffer = malloc(image.sections[i].size);
}
if ((retval = image_read_section(&image, i, 0x0, image.sections[i].size, buffer, &buf_cnt)) != ERROR_OK)
{
- ERROR("image_read_section failed with error code: %i", retval);
- command_print(cmd_ctx, "image reading failed, verify aborted");
free(buffer);
- image_close(&image);
- return ERROR_OK;
+ break;
}
/* calculate checksum of image */
if( retval != ERROR_OK )
{
- command_print(cmd_ctx, "could not calculate checksum, verify aborted");
free(buffer);
- image_close(&image);
- return ERROR_OK;
+ break;
}
if( checksum != mem_checksum )
command_print(cmd_ctx, "Verify operation failed address 0x%08x. Was 0x%02x instead of 0x%02x\n", t + image.sections[i].base_address, data[t], buffer[t]);
free(data);
free(buffer);
- image_close(&image);
- return ERROR_OK;
+ retval=ERROR_FAIL;
+ goto done;
}
}
}
free(buffer);
image_size += buf_cnt;
}
-
+done:
duration_stop_measure(&duration, &duration_text);
- command_print(cmd_ctx, "verified %u bytes in %s", image_size, duration_text);
+ if (retval==ERROR_OK)
+ {
+ command_print(cmd_ctx, "verified %u bytes in %s", image_size, duration_text);
+ }
free(duration_text);
image_close(&image);
- return ERROR_OK;
+ return retval;
}
int handle_bp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)