extern struct target_type riscv_target;
extern struct target_type mem_ap_target;
extern struct target_type esirisc_target;
+extern struct target_type arcv2_target;
static struct target_type *target_types[] = {
&arm7tdmi_target,
&riscv_target,
&mem_ap_target,
&esirisc_target,
+ &arcv2_target,
#if BUILD_TARGET64
&aarch64_target,
&mips_mips64_target,
{ .value = TARGET_EVENT_RESUMED, .name = "resumed" },
{ .value = TARGET_EVENT_RESUME_START, .name = "resume-start" },
{ .value = TARGET_EVENT_RESUME_END, .name = "resume-end" },
+ { .value = TARGET_EVENT_STEP_START, .name = "step-start" },
+ { .value = TARGET_EVENT_STEP_END, .name = "step-end" },
{ .name = "gdb-start", .value = TARGET_EVENT_GDB_START },
{ .name = "gdb-end", .value = TARGET_EVENT_GDB_END },
{ .value = TARGET_EVENT_RESET_END, .name = "reset-end" },
{ .value = TARGET_EVENT_EXAMINE_START, .name = "examine-start" },
+ { .value = TARGET_EVENT_EXAMINE_FAIL, .name = "examine-fail" },
{ .value = TARGET_EVENT_EXAMINE_END, .name = "examine-end" },
{ .value = TARGET_EVENT_DEBUG_HALTED, .name = "debug-halted" },
return ERROR_OK;
}
+/* Equvivalent Tcl code arp_examine_one is in src/target/startup.tcl
+ * Keep in sync */
int target_examine_one(struct target *target)
{
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_START);
int retval = target->type->examine(target);
- if (retval != ERROR_OK)
+ if (retval != ERROR_OK) {
+ target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_FAIL);
return retval;
+ }
target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
int target_step(struct target *target,
int current, target_addr_t address, int handle_breakpoints)
{
- return target->type->step(target, current, address, handle_breakpoints);
+ int retval;
+
+ target_call_event_callbacks(target, TARGET_EVENT_STEP_START);
+
+ retval = target->type->step(target, current, address, handle_breakpoints);
+ if (retval != ERROR_OK)
+ return retval;
+
+ target_call_event_callbacks(target, TARGET_EVENT_STEP_END);
+
+ return retval;
}
int target_get_gdb_fileio_info(struct target *target, struct gdb_fileio_info *fileio_info)
* next item; initially, that's a standalone "root of the
* list" variable. */
struct target_timer_callback **callback = &target_timer_callbacks;
- while (*callback) {
+ while (callback && *callback) {
if ((*callback)->removed) {
struct target_timer_callback *p = *callback;
*callback = (*callback)->next;
target->smp = 0;
}
+ rtos_destroy(target);
+
free(target->gdb_port_override);
free(target->type);
free(target->trace_info);
return ERROR_OK;
}
-int target_checksum_memory(struct target *target, target_addr_t address, uint32_t size, uint32_t* crc)
+int target_checksum_memory(struct target *target, target_addr_t address, uint32_t size, uint32_t *crc)
{
uint8_t *buffer;
int retval;
struct target *target = get_current_target(CMD_CTX);
- return target->type->step(target, current_pc, addr, 1);
+ return target_step(target, current_pc, addr, 1);
}
void target_handle_md_output(struct command_invocation *cmd,
if (CMD_ARGC != 1)
return ERROR_COMMAND_SYNTAX_ERROR;
- target_addr_t addr;
- COMMAND_PARSE_ADDRESS(CMD_ARGV[0], addr);
-
struct target *target = get_current_target(CMD_CTX);
- breakpoint_remove(target, addr);
+
+ if (!strcmp(CMD_ARGV[0], "all")) {
+ breakpoint_remove_all(target);
+ } else {
+ target_addr_t addr;
+ COMMAND_PARSE_ADDRESS(CMD_ARGV[0], addr);
+
+ breakpoint_remove(target, addr);
+ }
return ERROR_OK;
}
"target: %s wait %s fails (%#s) %s",
target_name(target), n->name,
eObj, target_strerror_safe(e));
- Jim_FreeNewObj(interp, eObj);
return JIM_ERR;
}
return JIM_OK;
.handler = handle_rbp_command,
.mode = COMMAND_EXEC,
.help = "remove breakpoint",
- .usage = "address",
+ .usage = "'all' | address",
},
{
.name = "wp",