{ .value = TARGET_EVENT_OLD_gdb_program_config , .name = "old-gdb_program_config" },
{ .value = TARGET_EVENT_OLD_pre_resume , .name = "old-pre_resume" },
- { .value = TARGET_EVENT_EARLY_HALTED, .name = "early-halted" },
+ { .value = TARGET_EVENT_GDB_HALT, .name = "gdb-halt" },
{ .value = TARGET_EVENT_HALTED, .name = "halted" },
{ .value = TARGET_EVENT_RESUMED, .name = "resumed" },
{ .value = TARGET_EVENT_RESUME_START, .name = "resume-start" },
if (event == TARGET_EVENT_HALTED)
{
/* execute early halted first */
- target_call_event_callbacks(target, TARGET_EVENT_EARLY_HALTED);
+ target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
}
LOG_DEBUG("target event %i (%s)",
return ERROR_OK;
}
+static void target_call_event_callbacks_all(enum target_event e) {
+ target_t *target;
+ target = all_targets;
+ while (target) {
+ target_call_event_callbacks(target, e);
+ target = target->next;
+ }
+}
+
/* process target state changes */
int handle_target(void *priv)
{
int did_something = 0;
if (runSrstAsserted)
{
+ target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT);
Jim_Eval(interp, "srst_asserted");
did_something = 1;
}
}
if (runPowerDropout)
{
+ target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT);
Jim_Eval(interp, "power_dropout");
did_something = 1;
}
{
/* polling may fail silently until the target has been examined */
if ((retval = target_poll(target)) != ERROR_OK)
+ {
+ target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
return retval;
+ }
}
}
/* allow GDB to do stuff before others handle the halted event,
* this is in lieu of defining ordering of invocation of events,
- * which would be more complicated */
- TARGET_EVENT_EARLY_HALTED,
+ * which would be more complicated
+ *
+ * Telling GDB to halt does not mean that the target stopped running,
+ * simply that we're dropping out of GDB's waiting for step or continue.
+ *
+ * This can be useful when e.g. detecting power dropout.
+ */
+ TARGET_EVENT_GDB_HALT,
TARGET_EVENT_HALTED, /* target entered debug state from normal execution or reset */
TARGET_EVENT_RESUMED, /* target resumed to normal execution */
TARGET_EVENT_RESUME_START,