X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Ftarget.c;h=ab094f96775b5441e0b8374f60017b44584931f8;hp=bcd00a1fbe9959224c624ab24c614cf110803383;hb=61f3d4b7e42897fb1570bd4307137833cce0f7ba;hpb=b46231669928bf4edb48c50b327cb68b0d01a27e diff --git a/src/target/target.c b/src/target/target.c index bcd00a1fbe..ab094f9677 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -84,6 +84,7 @@ extern struct target_type dsp563xx_target; extern struct target_type dsp5680xx_target; extern struct target_type testee_target; extern struct target_type avr32_ap7k_target; +extern struct target_type stm32_stlink_target; static struct target_type *target_types[] = { @@ -107,6 +108,7 @@ static struct target_type *target_types[] = &dsp5680xx_target, &testee_target, &avr32_ap7k_target, + &stm32_stlink_target, NULL, }; @@ -940,6 +942,8 @@ static int target_init_one(struct command_context *cmd_ctx, if (type->check_reset== NULL) type->check_reset = default_check_reset; + assert(type->init_target != NULL); + int retval = type->init_target(cmd_ctx, target); if (ERROR_OK != retval) { @@ -1070,7 +1074,7 @@ int target_register_event_callback(int (*callback)(struct target *target, enum t if (callback == NULL) { - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } if (*callbacks_p) @@ -1095,7 +1099,7 @@ int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int if (callback == NULL) { - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } if (*callbacks_p) @@ -1133,7 +1137,7 @@ int target_unregister_event_callback(int (*callback)(struct target *target, enum if (callback == NULL) { - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } while (c) @@ -1160,7 +1164,7 @@ static int target_unregister_timer_callback(int (*callback)(void *priv), void *p if (callback == NULL) { - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } while (c) @@ -1677,7 +1681,7 @@ int target_checksum_memory(struct target *target, uint32_t address, uint32_t siz if (buffer == NULL) { LOG_ERROR("error allocating buffer for section (%d bytes)", (int)size); - return ERROR_INVALID_ARGUMENTS; + return ERROR_COMMAND_SYNTAX_ERROR; } retval = target_read_buffer(target, address, size, buffer); if (retval != ERROR_OK) @@ -2242,9 +2246,7 @@ COMMAND_HANDLER(handle_reg_command) return ERROR_OK; } - command_print(CMD_CTX, "usage: reg <#|name> [value]"); - - return ERROR_OK; + return ERROR_COMMAND_SYNTAX_ERROR; } COMMAND_HANDLER(handle_poll_command) @@ -2291,7 +2293,6 @@ COMMAND_HANDLER(handle_wait_halt_command) int retval = parse_uint(CMD_ARGV[0], &ms); if (ERROR_OK != retval) { - command_print(CMD_CTX, "usage: %s [seconds]", CMD_NAME); return ERROR_COMMAND_SYNTAX_ERROR; } // convert seconds (given) to milliseconds (needed) @@ -2796,7 +2797,7 @@ COMMAND_HANDLER(handle_load_image_command) COMMAND_HANDLER(handle_dump_image_command) { struct fileio fileio; - uint8_t buffer[560]; + uint8_t *buffer; int retval, retvaltemp; uint32_t address, size; struct duration bench; @@ -2808,17 +2809,23 @@ COMMAND_HANDLER(handle_dump_image_command) COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], address); COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], size); + uint32_t buf_size = (size > 4096) ? 4096 : size; + buffer = malloc(buf_size); + if (!buffer) + return ERROR_FAIL; + retval = fileio_open(&fileio, CMD_ARGV[0], FILEIO_WRITE, FILEIO_BINARY); - if (retval != ERROR_OK) + if (retval != ERROR_OK) { + free(buffer); return retval; + } duration_start(&bench); - retval = ERROR_OK; while (size > 0) { size_t size_written; - uint32_t this_run_size = (size > 560) ? 560 : size; + uint32_t this_run_size = (size > buf_size) ? buf_size : size; retval = target_read_buffer(target, address, this_run_size, buffer); if (retval != ERROR_OK) { @@ -2835,6 +2842,8 @@ COMMAND_HANDLER(handle_dump_image_command) address += this_run_size; } + free(buffer); + if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK)) { int filesize; @@ -3151,7 +3160,6 @@ COMMAND_HANDLER(handle_bp_command) return handle_bp_command_set(CMD_CTX, addr, asid, length, hw); default: - command_print(CMD_CTX, "usage: bp
[