Factor handle_bp_command into pieces:

- Bug fix: return a syntax error if the wrong number of arguments are given.
- Add handle_bp_command_list() and handle_bp_command_set().
- Use temporary addr variable to eliminate redundant strtoul() calls.
- Place variable declarations at their point of first use.


git-svn-id: svn://svn.berlios.de/openocd/trunk@2196 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
zwelch 2009-06-11 11:43:07 +00:00
parent 8e899d43ef
commit 538050c146
1 changed files with 49 additions and 37 deletions

View File

@ -2449,57 +2449,69 @@ static int handle_test_image_command(struct command_context_s *cmd_ctx, char *cm
return handle_verify_image_command_internal(cmd_ctx, cmd, args, argc, 0); return handle_verify_image_command_internal(cmd_ctx, cmd, args, argc, 0);
} }
static int handle_bp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) static int handle_bp_command_list(struct command_context_s *cmd_ctx)
{ {
int retval;
target_t *target = get_current_target(cmd_ctx); target_t *target = get_current_target(cmd_ctx);
if (argc == 0)
{
breakpoint_t *breakpoint = target->breakpoints; breakpoint_t *breakpoint = target->breakpoints;
while (breakpoint) while (breakpoint)
{ {
if (breakpoint->type == BKPT_SOFT) if (breakpoint->type == BKPT_SOFT)
{ {
char* buf = buf_to_str(breakpoint->orig_instr, breakpoint->length, 16); char* buf = buf_to_str(breakpoint->orig_instr,
command_print(cmd_ctx, "0x%8.8x, 0x%x, %i, 0x%s", breakpoint->address, breakpoint->length, breakpoint->set, buf); breakpoint->length, 16);
command_print(cmd_ctx, "0x%8.8x, 0x%x, %i, 0x%s",
breakpoint->address, breakpoint->length,
breakpoint->set, buf);
free(buf); free(buf);
} }
else else
{ {
command_print(cmd_ctx, "0x%8.8x, 0x%x, %i", breakpoint->address, breakpoint->length, breakpoint->set); command_print(cmd_ctx, "0x%8.8x, 0x%x, %i",
breakpoint->address, breakpoint->length, breakpoint->set);
} }
breakpoint = breakpoint->next; breakpoint = breakpoint->next;
} }
} return ERROR_OK;
else if (argc >= 2) }
{
int hw = BKPT_SOFT;
u32 length = 0;
length = strtoul(args[1], NULL, 0); static int handle_bp_command_set(struct command_context_s *cmd_ctx,
u32 addr, u32 length, int hw)
if (argc >= 3) {
if (strcmp(args[2], "hw") == 0) target_t *target = get_current_target(cmd_ctx);
hw = BKPT_HARD; int retval = breakpoint_add(target, addr, length, hw);
if (ERROR_OK == retval)
if ((retval = breakpoint_add(target, strtoul(args[0], NULL, 0), length, hw)) != ERROR_OK) command_print(cmd_ctx, "breakpoint set at 0x%8.8x", addr);
{
LOG_ERROR("Failure setting breakpoints");
}
else
{
command_print(cmd_ctx, "breakpoint added at address 0x%8.8lx",
strtoul(args[0], NULL, 0));
}
}
else else
LOG_ERROR("Failure setting breakpoint");
return retval;
}
static int handle_bp_command(struct command_context_s *cmd_ctx,
char *cmd, char **args, int argc)
{
if (argc == 0)
return handle_bp_command_list(cmd_ctx);
if (argc < 2 || argc > 3)
{ {
command_print(cmd_ctx, "usage: bp <address> <length> ['hw']"); command_print(cmd_ctx, "usage: bp <address> <length> ['hw']");
return ERROR_COMMAND_SYNTAX_ERROR;
} }
return ERROR_OK; u32 addr = strtoul(args[0], NULL, 0);
u32 length = strtoul(args[1], NULL, 0);
int hw = BKPT_SOFT;
if (argc == 3)
{
if (strcmp(args[2], "hw") == 0)
hw = BKPT_HARD;
else
return ERROR_COMMAND_SYNTAX_ERROR;
}
return handle_bp_command_set(cmd_ctx, addr, length, hw);
} }
static int handle_rbp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) static int handle_rbp_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)