Improve target.c command argument parsing.
Passes cmd_ctx into parse_load_image_command_args for reporting the parsing errors therein.
This commit is contained in:
parent
b7b561aae8
commit
653ea7b25c
|
@ -2014,9 +2014,7 @@ static int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
if ((args[0][0] >= '0') && (args[0][0] <= '9'))
|
if ((args[0][0] >= '0') && (args[0][0] <= '9'))
|
||||||
{
|
{
|
||||||
unsigned num;
|
unsigned num;
|
||||||
int retval = parse_uint(args[0], &num);
|
COMMAND_PARSE_NUMBER(uint, args[0], num);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
|
||||||
|
|
||||||
reg_cache_t *cache = target->reg_cache;
|
reg_cache_t *cache = target->reg_cache;
|
||||||
count = 0;
|
count = 0;
|
||||||
|
@ -2270,9 +2268,7 @@ static int handle_resume_command(struct command_context_s *cmd_ctx, char *cmd, c
|
||||||
uint32_t addr = 0;
|
uint32_t addr = 0;
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
int retval = parse_u32(args[0], &addr);
|
COMMAND_PARSE_NUMBER(u32, args[0], addr);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
current = 0;
|
current = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2293,9 +2289,7 @@ static int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, cha
|
||||||
int current_pc = 1;
|
int current_pc = 1;
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
int retval = parse_u32(args[0], &addr);
|
COMMAND_PARSE_NUMBER(u32, args[0], addr);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
current_pc = 0;
|
current_pc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2382,23 +2376,18 @@ static int handle_md_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
{
|
{
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t address;
|
uint32_t address;
|
||||||
int retval = parse_u32(args[0], &address);
|
COMMAND_PARSE_NUMBER(u32, args[0], address);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
unsigned count = 1;
|
unsigned count = 1;
|
||||||
if (argc == 2)
|
if (argc == 2)
|
||||||
{
|
COMMAND_PARSE_NUMBER(uint, args[1], count);
|
||||||
retval = parse_uint(args[1], &count);
|
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t *buffer = calloc(count, size);
|
uint8_t *buffer = calloc(count, size);
|
||||||
|
|
||||||
target_t *target = get_current_target(cmd_ctx);
|
target_t *target = get_current_target(cmd_ctx);
|
||||||
retval = fn(target, address, size, count, buffer);
|
int retval = fn(target, address, size, count, buffer);
|
||||||
if (ERROR_OK == retval)
|
if (ERROR_OK == retval)
|
||||||
handle_md_output(cmd_ctx, target, address, size, count, buffer);
|
handle_md_output(cmd_ctx, target, address, size, count, buffer);
|
||||||
|
|
||||||
|
@ -2429,22 +2418,14 @@ static int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
|
||||||
uint32_t address;
|
uint32_t address;
|
||||||
int retval = parse_u32(args[0], &address);
|
COMMAND_PARSE_NUMBER(u32, args[0], address);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
retval = parse_u32(args[1], &value);
|
COMMAND_PARSE_NUMBER(u32, args[1], value);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
unsigned count = 1;
|
unsigned count = 1;
|
||||||
if (argc == 3)
|
if (argc == 3)
|
||||||
{
|
COMMAND_PARSE_NUMBER(uint, args[2], count);
|
||||||
retval = parse_uint(args[2], &count);
|
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
target_t *target = get_current_target(cmd_ctx);
|
target_t *target = get_current_target(cmd_ctx);
|
||||||
unsigned wordsize;
|
unsigned wordsize;
|
||||||
|
@ -2468,7 +2449,7 @@ static int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
}
|
}
|
||||||
for (unsigned i = 0; i < count; i++)
|
for (unsigned i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
retval = fn(target,
|
int retval = fn(target,
|
||||||
address + i * wordsize, wordsize, 1, value_buf);
|
address + i * wordsize, wordsize, 1, value_buf);
|
||||||
if (ERROR_OK != retval)
|
if (ERROR_OK != retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -2479,8 +2460,9 @@ static int handle_mw_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parse_load_image_command_args(char **args, int argc,
|
static int parse_load_image_command_args(struct command_context_s *cmd_ctx,
|
||||||
image_t *image, uint32_t *min_address, uint32_t *max_address)
|
char **args, int argc, image_t *image,
|
||||||
|
uint32_t *min_address, uint32_t *max_address)
|
||||||
{
|
{
|
||||||
if (argc < 1 || argc > 5)
|
if (argc < 1 || argc > 5)
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
@ -2490,9 +2472,7 @@ static int parse_load_image_command_args(char **args, int argc,
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
{
|
{
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
int retval = parse_u32(args[1], &addr);
|
COMMAND_PARSE_NUMBER(u32, args[1], addr);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
|
||||||
image->base_address = addr;
|
image->base_address = addr;
|
||||||
image->base_address_set = 1;
|
image->base_address_set = 1;
|
||||||
}
|
}
|
||||||
|
@ -2503,15 +2483,11 @@ static int parse_load_image_command_args(char **args, int argc,
|
||||||
|
|
||||||
if (argc >= 4)
|
if (argc >= 4)
|
||||||
{
|
{
|
||||||
int retval = parse_u32(args[3], min_address);
|
COMMAND_PARSE_NUMBER(u32, args[3], *min_address);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
|
||||||
}
|
}
|
||||||
if (argc == 5)
|
if (argc == 5)
|
||||||
{
|
{
|
||||||
int retval = parse_u32(args[4], max_address);
|
COMMAND_PARSE_NUMBER(u32, args[4], *max_address);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
|
||||||
// use size (given) to find max (required)
|
// use size (given) to find max (required)
|
||||||
*max_address += *min_address;
|
*max_address += *min_address;
|
||||||
}
|
}
|
||||||
|
@ -2537,7 +2513,7 @@ static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
duration_t duration;
|
duration_t duration;
|
||||||
char *duration_text;
|
char *duration_text;
|
||||||
|
|
||||||
int retval = parse_load_image_command_args(args, argc,
|
int retval = parse_load_image_command_args(cmd_ctx, args, argc,
|
||||||
&image, &min_address, &max_address);
|
&image, &min_address, &max_address);
|
||||||
if (ERROR_OK != retval)
|
if (ERROR_OK != retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -2642,14 +2618,9 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t address;
|
uint32_t address;
|
||||||
int retval = parse_u32(args[1], &address);
|
COMMAND_PARSE_NUMBER(u32, args[1], address);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
retval = parse_u32(args[2], &size);
|
COMMAND_PARSE_NUMBER(u32, args[2], size);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
if (fileio_open(&fileio, args[0], FILEIO_WRITE, FILEIO_BINARY) != ERROR_OK)
|
if (fileio_open(&fileio, args[0], FILEIO_WRITE, FILEIO_BINARY) != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
@ -2658,11 +2629,11 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm
|
||||||
|
|
||||||
duration_start_measure(&duration);
|
duration_start_measure(&duration);
|
||||||
|
|
||||||
|
int retval = ERROR_OK;
|
||||||
while (size > 0)
|
while (size > 0)
|
||||||
{
|
{
|
||||||
uint32_t size_written;
|
uint32_t size_written;
|
||||||
uint32_t this_run_size = (size > 560) ? 560 : size;
|
uint32_t this_run_size = (size > 560) ? 560 : size;
|
||||||
|
|
||||||
retval = target_read_buffer(target, address, this_run_size, buffer);
|
retval = target_read_buffer(target, address, this_run_size, buffer);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
{
|
{
|
||||||
|
@ -2728,9 +2699,7 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
{
|
{
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
retval = parse_u32(args[1], &addr);
|
COMMAND_PARSE_NUMBER(u32, args[1], addr);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
|
||||||
image.base_address = addr;
|
image.base_address = addr;
|
||||||
image.base_address_set = 1;
|
image.base_address_set = 1;
|
||||||
}
|
}
|
||||||
|
@ -2915,14 +2884,9 @@ static int handle_bp_command(struct command_context_s *cmd_ctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
int retval = parse_u32(args[0], &addr);
|
COMMAND_PARSE_NUMBER(u32, args[0], addr);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
uint32_t length;
|
uint32_t length;
|
||||||
retval = parse_u32(args[1], &length);
|
COMMAND_PARSE_NUMBER(u32, args[1], length);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
int hw = BKPT_SOFT;
|
int hw = BKPT_SOFT;
|
||||||
if (argc == 3)
|
if (argc == 3)
|
||||||
|
@ -2942,9 +2906,7 @@ static int handle_rbp_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
int retval = parse_u32(args[0], &addr);
|
COMMAND_PARSE_NUMBER(u32, args[0], addr);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
target_t *target = get_current_target(cmd_ctx);
|
target_t *target = get_current_target(cmd_ctx);
|
||||||
breakpoint_remove(target, addr);
|
breakpoint_remove(target, addr);
|
||||||
|
@ -2979,19 +2941,14 @@ static int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
uint32_t length = 0;
|
uint32_t length = 0;
|
||||||
uint32_t data_value = 0x0;
|
uint32_t data_value = 0x0;
|
||||||
uint32_t data_mask = 0xffffffff;
|
uint32_t data_mask = 0xffffffff;
|
||||||
int retval;
|
|
||||||
|
|
||||||
switch (argc)
|
switch (argc)
|
||||||
{
|
{
|
||||||
case 5:
|
case 5:
|
||||||
retval = parse_u32(args[4], &data_mask);
|
COMMAND_PARSE_NUMBER(u32, args[4], data_mask);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
// fall through
|
// fall through
|
||||||
case 4:
|
case 4:
|
||||||
retval = parse_u32(args[3], &data_value);
|
COMMAND_PARSE_NUMBER(u32, args[3], data_value);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
// fall through
|
// fall through
|
||||||
case 3:
|
case 3:
|
||||||
switch (args[2][0])
|
switch (args[2][0])
|
||||||
|
@ -3011,12 +2968,8 @@ static int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
}
|
}
|
||||||
// fall through
|
// fall through
|
||||||
case 2:
|
case 2:
|
||||||
retval = parse_u32(args[1], &length);
|
COMMAND_PARSE_NUMBER(u32, args[1], length);
|
||||||
if (ERROR_OK != retval)
|
COMMAND_PARSE_NUMBER(u32, args[0], addr);
|
||||||
return retval;
|
|
||||||
retval = parse_u32(args[0], &addr);
|
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -3025,7 +2978,7 @@ static int handle_wp_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = watchpoint_add(target, addr, length, type,
|
int retval = watchpoint_add(target, addr, length, type,
|
||||||
data_value, data_mask);
|
data_value, data_mask);
|
||||||
if (ERROR_OK != retval)
|
if (ERROR_OK != retval)
|
||||||
LOG_ERROR("Failure setting watchpoints");
|
LOG_ERROR("Failure setting watchpoints");
|
||||||
|
@ -3039,9 +2992,7 @@ static int handle_rwp_command(struct command_context_s *cmd_ctx, char *cmd, char
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
int retval = parse_u32(args[0], &addr);
|
COMMAND_PARSE_NUMBER(u32, args[0], addr);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
target_t *target = get_current_target(cmd_ctx);
|
target_t *target = get_current_target(cmd_ctx);
|
||||||
watchpoint_remove(target, addr);
|
watchpoint_remove(target, addr);
|
||||||
|
@ -3063,13 +3014,11 @@ static int handle_virt2phys_command(command_context_t *cmd_ctx,
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
|
||||||
uint32_t va;
|
uint32_t va;
|
||||||
int retval = parse_u32(args[0], &va);
|
COMMAND_PARSE_NUMBER(u32, args[0], va);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
uint32_t pa;
|
uint32_t pa;
|
||||||
|
|
||||||
target_t *target = get_current_target(cmd_ctx);
|
target_t *target = get_current_target(cmd_ctx);
|
||||||
retval = target->type->virt2phys(target, va, &pa);
|
int retval = target->type->virt2phys(target, va, &pa);
|
||||||
if (retval == ERROR_OK)
|
if (retval == ERROR_OK)
|
||||||
command_print(cmd_ctx, "Physical address 0x%08" PRIx32 "", pa);
|
command_print(cmd_ctx, "Physical address 0x%08" PRIx32 "", pa);
|
||||||
|
|
||||||
|
@ -3204,9 +3153,7 @@ static int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd,
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
}
|
}
|
||||||
unsigned offset;
|
unsigned offset;
|
||||||
int retval = parse_uint(args[0], &offset);
|
COMMAND_PARSE_NUMBER(uint, args[0], offset);
|
||||||
if (ERROR_OK != retval)
|
|
||||||
return retval;
|
|
||||||
|
|
||||||
timeval_add_time(&timeout, offset, 0);
|
timeval_add_time(&timeout, offset, 0);
|
||||||
|
|
||||||
|
@ -3223,6 +3170,7 @@ static int handle_profile_command(struct command_context_s *cmd_ctx, char *cmd,
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
int retval;
|
||||||
target_poll(target);
|
target_poll(target);
|
||||||
if (target->state == TARGET_HALTED)
|
if (target->state == TARGET_HALTED)
|
||||||
{
|
{
|
||||||
|
@ -4726,7 +4674,7 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha
|
||||||
duration_t duration;
|
duration_t duration;
|
||||||
char *duration_text;
|
char *duration_text;
|
||||||
|
|
||||||
int retval = parse_load_image_command_args(args, argc,
|
int retval = parse_load_image_command_args(cmd_ctx, args, argc,
|
||||||
&image, &min_address, &max_address);
|
&image, &min_address, &max_address);
|
||||||
if (ERROR_OK != retval)
|
if (ERROR_OK != retval)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
Loading…
Reference in New Issue