X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Ftarget%2Ftarget.c;h=04d162b5c7fe23250d05a9da2ce94daa559f005d;hb=4deb42ed004f90058856b1d72dda63c4843b3854;hp=3ec28284e6da22a93662c51d2a1b891ee02e7786;hpb=41826d5bd90d268beb03086aa5cad8d6be0152b4;p=fw%2Fopenocd diff --git a/src/target/target.c b/src/target/target.c index 3ec28284e..04d162b5c 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -150,7 +150,7 @@ const char *target_strerror_safe( int err ) } } -const Jim_Nvp nvp_target_event[] = { +static const Jim_Nvp nvp_target_event[] = { { .value = TARGET_EVENT_OLD_gdb_program_config , .name = "old-gdb_program_config" }, { .value = TARGET_EVENT_OLD_pre_resume , .name = "old-pre_resume" }, @@ -273,7 +273,7 @@ static int new_target_number(void) static int target_continous_poll = 1; /* read a u32 from a buffer in target memory endianness */ -u32 target_buffer_get_u32(target_t *target, u8 *buffer) +u32 target_buffer_get_u32(target_t *target, const u8 *buffer) { if (target->endianness == TARGET_LITTLE_ENDIAN) return le_to_h_u32(buffer); @@ -282,7 +282,7 @@ u32 target_buffer_get_u32(target_t *target, u8 *buffer) } /* read a u16 from a buffer in target memory endianness */ -u16 target_buffer_get_u16(target_t *target, u8 *buffer) +u16 target_buffer_get_u16(target_t *target, const u8 *buffer) { if (target->endianness == TARGET_LITTLE_ENDIAN) return le_to_h_u16(buffer); @@ -291,7 +291,7 @@ u16 target_buffer_get_u16(target_t *target, u8 *buffer) } /* read a u8 from a buffer in target memory endianness */ -u8 target_buffer_get_u8(target_t *target, u8 *buffer) +u8 target_buffer_get_u8(target_t *target, const u8 *buffer) { return *buffer & 0x0ff; } @@ -320,8 +320,36 @@ void target_buffer_set_u8(target_t *target, u8 *buffer, u8 value) *buffer = value; } +/* return a pointer to a configured target; id is name or number */ +target_t *get_target(const char *id) +{ + target_t *target; + char *endptr; + int num; + + /* try as tcltarget name */ + for (target = all_targets; target; target = target->next) { + if (target->cmd_name == NULL) + continue; + if (strcmp(id, target->cmd_name) == 0) + return target; + } + + /* no match, try as number */ + num = strtoul(id, &endptr, 0); + if (*endptr != 0) + return NULL; + + for (target = all_targets; target; target = target->next) { + if (target->target_number == num) + return target; + } + + return NULL; +} + /* returns a pointer to the n-th configured target */ -target_t* get_target_by_num(int num) +static target_t *get_target_by_num(int num) { target_t *target = all_targets; @@ -356,7 +384,7 @@ target_t* get_current_target(command_context_t *cmd_ctx) int target_poll(struct target_s *target) { /* We can't poll until after examine */ - if (!target->type->examined) + if (!target_was_examined(target)) { /* Fail silently lest we pollute the log */ return ERROR_FAIL; @@ -367,7 +395,7 @@ int target_poll(struct target_s *target) int target_halt(struct target_s *target) { /* We can't poll until after examine */ - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -380,7 +408,7 @@ int target_resume(struct target_s *target, int current, u32 address, int handle_ int retval; /* We can't poll until after examine */ - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -435,10 +463,15 @@ static int default_mmu(struct target_s *target, int *enabled) static int default_examine(struct target_s *target) { - target->type->examined = 1; + target_set_examined(target); return ERROR_OK; } +int target_examine_one(struct target_s *target) +{ + return target->type->examine(target); +} + /* Targets that correctly implement init+examine, i.e. * no communication with target during init: * @@ -450,16 +483,20 @@ int target_examine(void) target_t *target = all_targets; while (target) { - if ((retval = target->type->examine(target))!=ERROR_OK) + if ((retval = target_examine_one(target)) != ERROR_OK) return retval; target = target->next; } return retval; } +const char *target_get_name(struct target_s *target) +{ + return target->type->name; +} static int target_write_memory_imp(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer) { - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -469,7 +506,7 @@ static int target_write_memory_imp(struct target_s *target, u32 address, u32 siz static int target_read_memory_imp(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer) { - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -479,7 +516,7 @@ static int target_read_memory_imp(struct target_s *target, u32 address, u32 size static int target_soft_reset_halt_imp(struct target_s *target) { - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -489,7 +526,7 @@ static int target_soft_reset_halt_imp(struct target_s *target) static int target_run_algorithm_imp(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 entry_point, u32 exit_point, int timeout_ms, void *arch_info) { - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -497,6 +534,85 @@ static int target_run_algorithm_imp(struct target_s *target, int num_mem_params, return target->type->run_algorithm_imp(target, num_mem_params, mem_params, num_reg_params, reg_param, entry_point, exit_point, timeout_ms, arch_info); } +int target_read_memory(struct target_s *target, + u32 address, u32 size, u32 count, u8 *buffer) +{ + return target->type->read_memory(target, address, size, count, buffer); +} + +int target_write_memory(struct target_s *target, + u32 address, u32 size, u32 count, u8 *buffer) +{ + return target->type->write_memory(target, address, size, count, buffer); +} +int target_bulk_write_memory(struct target_s *target, + u32 address, u32 count, u8 *buffer) +{ + return target->type->bulk_write_memory(target, address, count, buffer); +} + +int target_add_breakpoint(struct target_s *target, + struct breakpoint_s *breakpoint) +{ + return target->type->add_breakpoint(target, breakpoint); +} +int target_remove_breakpoint(struct target_s *target, + struct breakpoint_s *breakpoint) +{ + return target->type->remove_breakpoint(target, breakpoint); +} + +int target_add_watchpoint(struct target_s *target, + struct watchpoint_s *watchpoint) +{ + return target->type->add_watchpoint(target, watchpoint); +} +int target_remove_watchpoint(struct target_s *target, + struct watchpoint_s *watchpoint) +{ + return target->type->remove_watchpoint(target, watchpoint); +} + +int target_get_gdb_reg_list(struct target_s *target, + struct reg_s **reg_list[], int *reg_list_size) +{ + return target->type->get_gdb_reg_list(target, reg_list, reg_list_size); +} +int target_step(struct target_s *target, + int current, u32 address, int handle_breakpoints) +{ + return target->type->step(target, current, address, handle_breakpoints); +} + + +int target_run_algorithm(struct target_s *target, + int num_mem_params, mem_param_t *mem_params, + int num_reg_params, reg_param_t *reg_param, + u32 entry_point, u32 exit_point, + int timeout_ms, void *arch_info) +{ + return target->type->run_algorithm(target, + num_mem_params, mem_params, num_reg_params, reg_param, + entry_point, exit_point, timeout_ms, arch_info); +} + +/// @returns @c true if the target has been examined. +bool target_was_examined(struct target_s *target) +{ + return target->type->examined; +} +/// Sets the @c examined flag for the given target. +void target_set_examined(struct target_s *target) +{ + target->type->examined = true; +} +// Reset the @c examined flag for the given target. +void target_reset_examined(struct target_s *target) +{ + target->type->examined = false; +} + + int target_init(struct command_context_s *cmd_ctx) { target_t *target = all_targets; @@ -504,7 +620,7 @@ int target_init(struct command_context_s *cmd_ctx) while (target) { - target->type->examined = 0; + target_reset_examined(target); if (target->type->examine == NULL) { target->type->examine = default_examine; @@ -512,7 +628,7 @@ int target_init(struct command_context_s *cmd_ctx) if ((retval = target->type->init_target(cmd_ctx, target)) != ERROR_OK) { - LOG_ERROR("target '%s' init failed", target->type->name); + LOG_ERROR("target '%s' init failed", target_get_name(target)); return retval; } @@ -830,7 +946,7 @@ int target_alloc_working_area(struct target_s *target, u32 size, working_area_t { int retval; new_wa->backup = malloc(new_wa->size); - if((retval = target->type->read_memory(target, new_wa->address, 4, new_wa->size / 4, new_wa->backup)) != ERROR_OK) + if((retval = target_read_memory(target, new_wa->address, 4, new_wa->size / 4, new_wa->backup)) != ERROR_OK) { free(new_wa->backup); free(new_wa); @@ -864,7 +980,7 @@ int target_free_working_area_restore(struct target_s *target, working_area_t *ar if (restore&&target->backup_working_area) { int retval; - if((retval = target->type->write_memory(target, area->address, 4, area->size / 4, area->backup)) != ERROR_OK) + if((retval = target_write_memory(target, area->address, 4, area->size / 4, area->backup)) != ERROR_OK) return retval; } @@ -951,12 +1067,16 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff int retval; LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size, address); - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; } + if (size == 0) { + return ERROR_OK; + } + if ((address + size - 1) < address) { /* GDB can request this when e.g. PC is 0xfffffffc*/ @@ -966,7 +1086,7 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff if (((address % 2) == 0) && (size == 2)) { - return target->type->write_memory(target, address, 2, 1, buffer); + return target_write_memory(target, address, 2, 1, buffer); } /* handle unaligned head bytes */ @@ -977,7 +1097,7 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff if (unaligned > size) unaligned = size; - if ((retval = target->type->write_memory(target, address, 1, unaligned, buffer)) != ERROR_OK) + if ((retval = target_write_memory(target, address, 1, unaligned, buffer)) != ERROR_OK) return retval; buffer += unaligned; @@ -998,7 +1118,7 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff } else { - if ((retval = target->type->write_memory(target, address, 4, aligned / 4, buffer)) != ERROR_OK) + if ((retval = target_write_memory(target, address, 4, aligned / 4, buffer)) != ERROR_OK) return retval; } @@ -1010,7 +1130,7 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff /* handle tail writes of less than 4 bytes */ if (size > 0) { - if ((retval = target->type->write_memory(target, address, 1, size, buffer)) != ERROR_OK) + if ((retval = target_write_memory(target, address, 1, size, buffer)) != ERROR_OK) return retval; } @@ -1026,12 +1146,16 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe int retval; LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size, address); - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; } + if (size == 0) { + return ERROR_OK; + } + if ((address + size - 1) < address) { /* GDB can request this when e.g. PC is 0xfffffffc*/ @@ -1041,7 +1165,7 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe if (((address % 2) == 0) && (size == 2)) { - return target->type->read_memory(target, address, 2, 1, buffer); + return target_read_memory(target, address, 2, 1, buffer); } /* handle unaligned head bytes */ @@ -1052,7 +1176,7 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe if (unaligned > size) unaligned = size; - if ((retval = target->type->read_memory(target, address, 1, unaligned, buffer)) != ERROR_OK) + if ((retval = target_read_memory(target, address, 1, unaligned, buffer)) != ERROR_OK) return retval; buffer += unaligned; @@ -1065,7 +1189,7 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe { int aligned = size - (size % 4); - if ((retval = target->type->read_memory(target, address, 4, aligned / 4, buffer)) != ERROR_OK) + if ((retval = target_read_memory(target, address, 4, aligned / 4, buffer)) != ERROR_OK) return retval; buffer += aligned; @@ -1076,7 +1200,7 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe /* handle tail writes of less than 4 bytes */ if (size > 0) { - if ((retval = target->type->read_memory(target, address, 1, size, buffer)) != ERROR_OK) + if ((retval = target_read_memory(target, address, 1, size, buffer)) != ERROR_OK) return retval; } @@ -1089,7 +1213,7 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32* int retval; u32 i; u32 checksum = 0; - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -1131,7 +1255,7 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32* int target_blank_check_memory(struct target_s *target, u32 address, u32 size, u32* blank) { int retval; - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -1148,13 +1272,13 @@ int target_blank_check_memory(struct target_s *target, u32 address, u32 size, u3 int target_read_u32(struct target_s *target, u32 address, u32 *value) { u8 value_buf[4]; - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; } - int retval = target->type->read_memory(target, address, 4, 1, value_buf); + int retval = target_read_memory(target, address, 4, 1, value_buf); if (retval == ERROR_OK) { @@ -1173,13 +1297,13 @@ int target_read_u32(struct target_s *target, u32 address, u32 *value) int target_read_u16(struct target_s *target, u32 address, u16 *value) { u8 value_buf[2]; - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; } - int retval = target->type->read_memory(target, address, 2, 1, value_buf); + int retval = target_read_memory(target, address, 2, 1, value_buf); if (retval == ERROR_OK) { @@ -1197,8 +1321,8 @@ int target_read_u16(struct target_s *target, u32 address, u16 *value) int target_read_u8(struct target_s *target, u32 address, u8 *value) { - int retval = target->type->read_memory(target, address, 1, 1, value); - if (!target->type->examined) + int retval = target_read_memory(target, address, 1, 1, value); + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -1221,7 +1345,7 @@ int target_write_u32(struct target_s *target, u32 address, u32 value) { int retval; u8 value_buf[4]; - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -1230,7 +1354,7 @@ int target_write_u32(struct target_s *target, u32 address, u32 value) LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value); target_buffer_set_u32(target, value_buf, value); - if ((retval = target->type->write_memory(target, address, 4, 1, value_buf)) != ERROR_OK) + if ((retval = target_write_memory(target, address, 4, 1, value_buf)) != ERROR_OK) { LOG_DEBUG("failed: %i", retval); } @@ -1242,7 +1366,7 @@ int target_write_u16(struct target_s *target, u32 address, u16 value) { int retval; u8 value_buf[2]; - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -1251,7 +1375,7 @@ int target_write_u16(struct target_s *target, u32 address, u16 value) LOG_DEBUG("address: 0x%8.8x, value: 0x%8.8x", address, value); target_buffer_set_u16(target, value_buf, value); - if ((retval = target->type->write_memory(target, address, 2, 1, value_buf)) != ERROR_OK) + if ((retval = target_write_memory(target, address, 2, 1, value_buf)) != ERROR_OK) { LOG_DEBUG("failed: %i", retval); } @@ -1262,7 +1386,7 @@ int target_write_u16(struct target_s *target, u32 address, u16 value) int target_write_u8(struct target_s *target, u32 address, u8 value) { int retval; - if (!target->type->examined) + if (!target_was_examined(target)) { LOG_ERROR("Target not examined yet"); return ERROR_FAIL; @@ -1270,7 +1394,7 @@ int target_write_u8(struct target_s *target, u32 address, u8 value) LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, value); - if ((retval = target->type->write_memory(target, address, 1, 1, &value)) != ERROR_OK) + if ((retval = target_write_memory(target, address, 1, 1, &value)) != ERROR_OK) { LOG_DEBUG("failed: %i", retval); } @@ -1333,35 +1457,16 @@ int target_register_user_commands(struct command_context_s *cmd_ctx) static int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { - char *cp; target_t *target = all_targets; if (argc == 1) { - /* try as tcltarget name */ - for( target = all_targets ; target ; target = target->next ){ - if( target->cmd_name ){ - if( 0 == strcmp( args[0], target->cmd_name ) ){ - /* MATCH */ - goto Match; - } - } - } - /* no match, try as number */ - - int num = strtoul(args[0], &cp, 0 ); - if( *cp != 0 ){ - /* then it was not a number */ - command_print( cmd_ctx, "Target: %s unknown, try one of:\n", args[0] ); - goto DumpTargets; - } - - target = get_target_by_num( num ); - if( target == NULL ){ + target = get_target(args[0]); + if (target == NULL) { command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0] ); goto DumpTargets; } - Match: + cmd_ctx->current_target = target->target_number; return ERROR_OK; } @@ -1376,7 +1481,7 @@ DumpTargets: command_print(cmd_ctx, "%2d: %-10s %-10s %-10s %10d %14s %s", target->target_number, target->cmd_name, - target->type->name, + target_get_name(target), Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness )->name, target->tap->abs_chain_position, target->tap->dotted_name, @@ -1827,77 +1932,80 @@ static int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, cha return ERROR_OK; } -static int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +static void handle_md_output(struct command_context_s *cmd_ctx, + struct target_s *target, u32 address, unsigned size, + unsigned count, const u8 *buffer) { - const int line_bytecnt = 32; - int count = 1; - int size = 4; - u32 address = 0; - int line_modulo; - int i; + const unsigned line_bytecnt = 32; + unsigned line_modulo = line_bytecnt / size; - char output[128]; - int output_len; + char output[line_bytecnt * 4 + 1]; + unsigned output_len = 0; - int retval; + const char *value_fmt; + switch (size) { + case 4: value_fmt = "%8.8x"; break; + case 2: value_fmt = "%4.2x"; break; + case 1: value_fmt = "%2.2x"; break; + default: + LOG_ERROR("invalid memory read size: %u", size); + exit(-1); + } - u8 *buffer; - target_t *target = get_current_target(cmd_ctx); + for (unsigned i = 0; i < count; i++) + { + if (i % line_modulo == 0) + { + output_len += snprintf(output + output_len, + sizeof(output) - output_len, + "0x%8.8x: ", address + (i*size)); + } - if (argc < 1) - return ERROR_OK; + u32 value; + const u8 *value_ptr = buffer + i * size; + switch (size) { + case 4: value = target_buffer_get_u32(target, value_ptr); break; + case 2: value = target_buffer_get_u16(target, value_ptr); break; + case 1: value = *value_ptr; + } + output_len += snprintf(output + output_len, + sizeof(output) - output_len, + value_fmt, value); - if (argc == 2) - count = strtoul(args[1], NULL, 0); + if ((i % line_modulo == line_modulo - 1) || (i == count - 1)) + { + command_print(cmd_ctx, "%s", output); + output_len = 0; + } + } +} - address = strtoul(args[0], NULL, 0); +static int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +{ + if (argc < 1) + return ERROR_COMMAND_SYNTAX_ERROR; - switch (cmd[2]) - { - case 'w': - size = 4; line_modulo = line_bytecnt / 4; - break; - case 'h': - size = 2; line_modulo = line_bytecnt / 2; - break; - case 'b': - size = 1; line_modulo = line_bytecnt / 1; - break; - default: - return ERROR_OK; + unsigned size = 0; + switch (cmd[2]) { + case 'w': size = 4; break; + case 'h': size = 2; break; + case 'b': size = 1; break; + default: return ERROR_COMMAND_SYNTAX_ERROR; } - buffer = calloc(count, size); - retval = target->type->read_memory(target, address, size, count, buffer); - if (retval == ERROR_OK) - { - output_len = 0; + u32 address = strtoul(args[0], NULL, 0); - for (i = 0; i < count; i++) - { - if (i%line_modulo == 0) - output_len += snprintf(output + output_len, 128 - output_len, "0x%8.8x: ", address + (i*size)); + unsigned count = 1; + if (argc == 2) + count = strtoul(args[1], NULL, 0); - switch (size) - { - case 4: - output_len += snprintf(output + output_len, 128 - output_len, "%8.8x ", target_buffer_get_u32(target, &buffer[i*4])); - break; - case 2: - output_len += snprintf(output + output_len, 128 - output_len, "%4.4x ", target_buffer_get_u16(target, &buffer[i*2])); - break; - case 1: - output_len += snprintf(output + output_len, 128 - output_len, "%2.2x ", buffer[i*1]); - break; - } + u8 *buffer = calloc(count, size); - if ((i%line_modulo == line_modulo-1) || (i == count - 1)) - { - command_print(cmd_ctx, output); - output_len = 0; - } - } - } + target_t *target = get_current_target(cmd_ctx); + int retval = target_read_memory(target, + address, size, count, buffer); + if (ERROR_OK == retval) + handle_md_output(cmd_ctx, target, address, size, count, buffer); free(buffer); @@ -1941,27 +2049,11 @@ static int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char } for (i=0; itype->write_memory(target, address + i*wordsize, 4, 1, value_buf); - break; - case 2: - retval = target->type->write_memory(target, address + i*wordsize, 2, 1, value_buf); - break; - case 1: - retval = target->type->write_memory(target, address + i*wordsize, 1, 1, value_buf); - break; - default: - return ERROR_OK; - } - keep_alive(); - - if (retval!=ERROR_OK) - { + int retval = target_write_memory(target, + address + i * wordsize, wordsize, 1, value_buf); + if (ERROR_OK != retval) return retval; - } + keep_alive(); } return ERROR_OK; @@ -2151,7 +2243,8 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm if (retval==ERROR_OK) { - command_print(cmd_ctx, "dumped %"PRIi64" byte in %s", fileio.size, duration_text); + command_print(cmd_ctx, "dumped %lld byte in %s", + fileio.size, duration_text); free(duration_text); } @@ -2251,7 +2344,7 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct size *= 4; count /= 4; } - retval = target->type->read_memory(target, image.sections[i].base_address, size, count, data); + retval = target_read_memory(target, image.sections[i].base_address, size, count, data); if (retval == ERROR_OK) { u32 t; @@ -2352,7 +2445,8 @@ static int handle_bp_command(struct command_context_s *cmd_ctx, char *cmd, char } else { - command_print(cmd_ctx, "breakpoint added at address 0x%8.8x", strtoul(args[0], NULL, 0)); + command_print(cmd_ctx, "breakpoint added at address 0x%8.8lx", + strtoul(args[0], NULL, 0)); } } else @@ -2823,7 +2917,7 @@ static int target_mem2array(Jim_Interp *interp, target_t *target, int argc, Jim_ count = (sizeof(buffer)/width); } - retval = target->type->read_memory( target, addr, width, count, buffer ); + retval = target_read_memory( target, addr, width, count, buffer ); if (retval != ERROR_OK) { /* BOO !*/ LOG_ERROR("mem2array: Read @ 0x%08x, w=%d, cnt=%d, failed", addr, width, count); @@ -3022,7 +3116,7 @@ static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_ } len -= count; - retval = target->type->write_memory(target, addr, width, count, buffer); + retval = target_write_memory(target, addr, width, count, buffer); if (retval != ERROR_OK) { /* BOO !*/ LOG_ERROR("array2mem: Write @ 0x%08x, w=%d, cnt=%d, failed", addr, width, count); @@ -3067,7 +3161,7 @@ void target_handle_event( target_t *target, enum target_event e ) LOG_DEBUG( "target: (%d) %s (%s) event: %d (%s) action: %s\n", target->target_number, target->cmd_name, - target->type->name, + target_get_name(target), e, Jim_Nvp_value2name_simple( nvp_target_event, e )->name, Jim_GetString( teap->body, NULL ) ); @@ -3156,7 +3250,7 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target ) return JIM_ERR; } } - Jim_SetResultString( goi->interp, target->type->name, -1 ); + Jim_SetResultString( goi->interp, target_get_name(target), -1 ); /* loop for more */ break; case TCFG_EVENT: @@ -3513,7 +3607,7 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) break; } for( x = 0 ; x < c ; x++ ){ - e = target->type->write_memory( target, a, b, 1, target_buf ); + e = target_write_memory( target, a, b, 1, target_buf ); if( e != ERROR_OK ){ Jim_SetResult_sprintf( interp, "Error writing @ 0x%08x: %d\n", (int)(a), e ); return JIM_ERR; @@ -3569,7 +3663,7 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) if( y > 16 ){ y = 16; } - e = target->type->read_memory( target, a, b, y / b, target_buf ); + e = target_read_memory( target, a, b, y / b, target_buf ); if( e != ERROR_OK ){ Jim_SetResult_sprintf( interp, "error reading target @ 0x%08lx", (int)(a) ); return JIM_ERR; @@ -3652,7 +3746,7 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) Jim_WrongNumArgs( goi.interp, 2, argv, "[no parameters]"); return JIM_ERR; } - if( !(target->type->examined) ){ + if( !(target_was_examined(target)) ){ e = ERROR_TARGET_NOT_EXAMINED; } else { e = target->type->poll( target );