X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Ftarget%2Ftarget.c;h=670b4ba8b5921e3230e48cddc34ab5562fd82fd7;hb=8b994145b849c40b0a195c3fb332b9770b2f9097;hp=f95e360fb1b0da48c0b4d2cec5dea2481f0c4a71;hpb=2e779198535580515dfa9c8bfe1f3fe08abdb84b;p=openocd.git diff --git a/src/target/target.c b/src/target/target.c index f95e360fb1..670b4ba8b5 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -2,7 +2,7 @@ * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * - * Copyright (C) 2007,2008 Øyvind Harboe * + * Copyright (C) 2007,2008 Øyvind Harboe * * oyvind.harboe@zylin.com * * * * Copyright (C) 2008, Duane Ellis * @@ -237,6 +237,18 @@ const Jim_Nvp nvp_reset_modes[] = { { .name = NULL , .value = -1 }, }; +const char * +target_state_name( target_t *t ) +{ + const char *cp; + cp = Jim_Nvp_value2name_simple(nvp_target_state, t->state)->name; + if( !cp ){ + LOG_ERROR("Invalid target state: %d", (int)(t->state)); + cp = "(*BUG*unknown*BUG*)"; + } + return cp; +} + static int max_target_number(void) { target_t *t; @@ -1085,8 +1097,7 @@ int target_arch_state(struct target_s *target) return ERROR_OK; } - LOG_USER("target state: %s", - Jim_Nvp_value2name_simple(nvp_target_state,target->state)->name); + LOG_USER("target state: %s", target_state_name( target )); if (target->state != TARGET_HALTED) return ERROR_OK; @@ -1544,8 +1555,7 @@ DumpTargets: char marker = ' '; if (target->tap->enabled) - state = Jim_Nvp_value2name_simple(nvp_target_state, - target->state)->name; + state = target_state_name( target ); else state = "tap-disabled"; @@ -2029,15 +2039,18 @@ static int handle_step_command(struct command_context_s *cmd_ctx, char *cmd, cha * with one argument addr = args[0], * handle breakpoints, debugging */ uint32_t addr = 0; + int current_pc = 1; if (argc == 1) { int retval = parse_u32(args[0], &addr); if (ERROR_OK != retval) return retval; + current_pc = 0; } target_t *target = get_current_target(cmd_ctx); - return target->type->step(target, 0, addr, 1); + + return target->type->step(target, current_pc, addr, 1); } static void handle_md_output(struct command_context_s *cmd_ctx, @@ -3381,7 +3394,7 @@ void target_handle_event(target_t *target, enum target_event e) while (teap) { if (teap->event == e) { done = 1; - LOG_DEBUG("target: (%d) %s (%s) event: %d (%s) action: %s\n", + LOG_DEBUG("target: (%d) %s (%s) event: %d (%s) action: %s", target->target_number, target->cmd_name, target_get_name(target), @@ -4079,7 +4092,8 @@ static int tcl_target_func(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return JIM_ERR; } Jim_SetResultString(goi.interp, - Jim_Nvp_value2name_simple(nvp_target_state,target->state)->name,-1); + target_state_name( target ), + -1); return JIM_OK; case TS_CMD_INVOKE_EVENT: if (goi.argc != 1) {