target->type->examine = default_examine;
}
- if (target->type->init_target(cmd_ctx, target) != ERROR_OK)
+ if ((retval = target->type->init_target(cmd_ctx, target)) != ERROR_OK)
{
LOG_ERROR("target '%s' init failed", target->type->name);
- exit(-1);
+ return retval;
}
/* Set up default functions if none are provided by target */
int target_register_commands(struct command_context_s *cmd_ctx)
{
- register_command(cmd_ctx, NULL, "targets", handle_targets_command, COMMAND_EXEC, NULL);
- 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>");
- register_command(cmd_ctx, NULL, "profile", handle_profile_command, COMMAND_EXEC, "PRELIMINARY! - profile <seconds> <gmon.out>");
+ register_command(cmd_ctx, NULL, "targets", handle_targets_command, COMMAND_EXEC, "change the current command line target (one parameter) or lists targets (with no parameter)");
+ register_command(cmd_ctx, NULL, "working_area", handle_working_area_command, COMMAND_ANY, "set a new working space");
+ register_command(cmd_ctx, NULL, "virt2phys", handle_virt2phys_command, COMMAND_ANY, "translate a virtual address into a physical address");
+ register_command(cmd_ctx, NULL, "profile", handle_profile_command, COMMAND_EXEC, "profiling samples the CPU PC");
register_jim(cmd_ctx, "target", jim_target, "configure target" );
LOG_DEBUG("address: 0x%8.8x, value: 0x%2.2x", address, value);
- if ((retval = target->type->read_memory(target, address, 1, 1, &value)) != ERROR_OK)
+ if ((retval = target->type->write_memory(target, address, 1, 1, &value)) != ERROR_OK)
{
LOG_DEBUG("failed: %i", retval);
}
int target_register_user_commands(struct command_context_s *cmd_ctx)
{
int retval = ERROR_OK;
- register_command(cmd_ctx, NULL, "reg", handle_reg_command, COMMAND_EXEC, NULL);
+ register_command(cmd_ctx, NULL, "reg", handle_reg_command, COMMAND_EXEC, "display or set a register");
register_command(cmd_ctx, NULL, "poll", handle_poll_command, COMMAND_EXEC, "poll target state");
register_command(cmd_ctx, NULL, "wait_halt", handle_wait_halt_command, COMMAND_EXEC, "wait for target halt [time (s)]");
register_command(cmd_ctx, NULL, "halt", handle_halt_command, COMMAND_EXEC, "halt target");
LOG_DEBUG("-");
if (argc == 0)
- target->type->step(target, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
+ return target->type->step(target, 1, 0, 1); /* current pc, addr = 0, handle breakpoints */
if (argc == 1)
- target->type->step(target, 0, strtoul(args[0], NULL, 0), 1); /* addr = args[0], handle breakpoints */
+ return target->type->step(target, 0, strtoul(args[0], NULL, 0), 1); /* addr = args[0], handle breakpoints */
return ERROR_OK;
}
{
long l;
u32 width;
- u32 len;
+ int len;
u32 addr;
u32 count;
u32 v;
{
long l;
u32 width;
- u32 len;
+ int len;
u32 addr;
u32 count;
u32 v;
target, /* private data */
NULL ); /* no del proc */
- (*(target->type->target_create))( target, goi->interp );
return e;
}
}
if( target_types[x] ){
/* YES IT IS OLD SYNTAX */
+ int chain_position_offset;
Jim_Obj *new_argv[10];
int new_argc;
/* target_old_syntax
*
- * argv[0] typename (above)
- * argv[1] endian
- * argv[2] reset method, deprecated/ignored
- * argv[3] = old param
- * argv[4] = old param
+ * It appears that there are 2 old syntaxes:
+ *
+ * target <typename> <endian> <chain position> <variant>
+ *
+ * and
*
- * We will combine all "old params" into a single param.
- * Then later, split them again.
+ * target <typename> <endian> <reset mode> <chain position> <variant>
+ *
+ * The following uses the number of arguments to switch between them.
*/
- if( argc < 4 ){
- Jim_WrongNumArgs( interp, 1, argv, "[OLDSYNTAX] ?TYPE? ?ENDIAN? ?RESET? ?old-params?");
+ if( argc < 5 ){
+ Jim_WrongNumArgs( interp, 1, argv, "[OLDSYNTAX] ?TYPE? ?ENDIAN? ?CHAIN-POSITION? ?VARIANT?");
return JIM_ERR;
}
+
+ /* Use the correct argument offset for the chain position */
+ if (argc < 6) {
+ /* target <type> <endian> <chain position> <variant> */
+ chain_position_offset = 2;
+ } else {
+ chain_position_offset = 3;
+ /* target <type> <endian> <reset mode> <chain position> <variant> */
+ }
+
/* the command */
new_argv[0] = argv[0];
new_argv[1] = Jim_NewStringObj( interp, "create", -1 );
new_argv[4] = Jim_NewStringObj( interp, "-endian", -1 );
new_argv[5] = goi.argv[1];
new_argv[6] = Jim_NewStringObj( interp, "-chain-position", -1 );
- new_argv[7] = goi.argv[2];
+ new_argv[7] = goi.argv[chain_position_offset];
new_argv[8] = Jim_NewStringObj( interp, "-variant", -1 );
- new_argv[9] = goi.argv[3];
+ new_argv[9] = goi.argv[chain_position_offset + 1];
new_argc = 10;
+
/*
* new arg syntax:
* argv[0] = command