@@ -16,6 +16,8 @@ doc/openocd.fn | |||||
doc/openocd.fns | doc/openocd.fns | ||||
doc/openocd.html | doc/openocd.html | ||||
doc/openocd.info | doc/openocd.info | ||||
doc/openocd.info-1 | |||||
doc/openocd.info-2 | |||||
doc/openocd.ky | doc/openocd.ky | ||||
doc/openocd.log | doc/openocd.log | ||||
doc/openocd.pdf | doc/openocd.pdf | ||||
@@ -47,3 +49,7 @@ stamp-h1 | |||||
stamp-vti | stamp-vti | ||||
INSTALL | INSTALL | ||||
NOTES | NOTES | ||||
# Eclipse stuff | |||||
.project | |||||
@@ -3,11 +3,14 @@ | |||||
* Copyright 2005 Salvatore Sanfilippo <antirez@invece.org> | * Copyright 2005 Salvatore Sanfilippo <antirez@invece.org> | ||||
* Copyright 2005 Clemens Hintze <c.hintze@gmx.net> | * Copyright 2005 Clemens Hintze <c.hintze@gmx.net> | ||||
* Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net> | * Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net> | ||||
* Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com | |||||
* Copyright 2008,2009 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com | |||||
* Copyright 2008 Andrew Lunn <andrew@lunn.ch> | * Copyright 2008 Andrew Lunn <andrew@lunn.ch> | ||||
* Copyright 2008 Duane Ellis <openocd@duaneellis.com> | * Copyright 2008 Duane Ellis <openocd@duaneellis.com> | ||||
* Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de> | * Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de> | ||||
* Copyright 2008 Steve Bennett <steveb@workware.net.au> | * Copyright 2008 Steve Bennett <steveb@workware.net.au> | ||||
* Copyright 2009 Nico Coesel <ncoesel@dealogic.nl> | |||||
* Copyright 2009 Zachary T Welch zw@superlucidity.net | |||||
* Copyright 2009 David Brownell | |||||
* | * | ||||
* The FreeBSD license | * The FreeBSD license | ||||
* | * | ||||
@@ -714,7 +714,7 @@ int gdb_target_callback_event_handler(struct target_s *target, enum target_event | |||||
target_handle_event(target, event); | target_handle_event(target, event); | ||||
switch (event) | switch (event) | ||||
{ | { | ||||
case TARGET_EVENT_EARLY_HALTED: | |||||
case TARGET_EVENT_GDB_HALT: | |||||
gdb_frontend_halted(target, connection); | gdb_frontend_halted(target, connection); | ||||
break; | break; | ||||
case TARGET_EVENT_HALTED: | case TARGET_EVENT_HALTED: | ||||
@@ -157,7 +157,7 @@ static const Jim_Nvp nvp_target_event[] = { | |||||
{ .value = TARGET_EVENT_OLD_gdb_program_config , .name = "old-gdb_program_config" }, | { .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_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_HALTED, .name = "halted" }, | ||||
{ .value = TARGET_EVENT_RESUMED, .name = "resumed" }, | { .value = TARGET_EVENT_RESUMED, .name = "resumed" }, | ||||
{ .value = TARGET_EVENT_RESUME_START, .name = "resume-start" }, | { .value = TARGET_EVENT_RESUME_START, .name = "resume-start" }, | ||||
@@ -821,7 +821,7 @@ int target_call_event_callbacks(target_t *target, enum target_event event) | |||||
if (event == TARGET_EVENT_HALTED) | if (event == TARGET_EVENT_HALTED) | ||||
{ | { | ||||
/* execute early halted first */ | /* 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)", | LOG_DEBUG("target event %i (%s)", | ||||
@@ -1658,6 +1658,15 @@ static int sense_handler(void) | |||||
return ERROR_OK; | 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 */ | /* process target state changes */ | ||||
int handle_target(void *priv) | int handle_target(void *priv) | ||||
{ | { | ||||
@@ -1676,6 +1685,7 @@ int handle_target(void *priv) | |||||
int did_something = 0; | int did_something = 0; | ||||
if (runSrstAsserted) | if (runSrstAsserted) | ||||
{ | { | ||||
target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT); | |||||
Jim_Eval(interp, "srst_asserted"); | Jim_Eval(interp, "srst_asserted"); | ||||
did_something = 1; | did_something = 1; | ||||
} | } | ||||
@@ -1686,6 +1696,7 @@ int handle_target(void *priv) | |||||
} | } | ||||
if (runPowerDropout) | if (runPowerDropout) | ||||
{ | { | ||||
target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT); | |||||
Jim_Eval(interp, "power_dropout"); | Jim_Eval(interp, "power_dropout"); | ||||
did_something = 1; | did_something = 1; | ||||
} | } | ||||
@@ -1726,7 +1737,10 @@ int handle_target(void *priv) | |||||
{ | { | ||||
/* polling may fail silently until the target has been examined */ | /* polling may fail silently until the target has been examined */ | ||||
if ((retval = target_poll(target)) != ERROR_OK) | if ((retval = target_poll(target)) != ERROR_OK) | ||||
{ | |||||
target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT); | |||||
return retval; | return retval; | ||||
} | |||||
} | } | ||||
} | } | ||||
@@ -163,8 +163,14 @@ enum target_event | |||||
/* allow GDB to do stuff before others handle the halted event, | /* allow GDB to do stuff before others handle the halted event, | ||||
* this is in lieu of defining ordering of invocation of events, | * 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_HALTED, /* target entered debug state from normal execution or reset */ | ||||
TARGET_EVENT_RESUMED, /* target resumed to normal execution */ | TARGET_EVENT_RESUMED, /* target resumed to normal execution */ | ||||
TARGET_EVENT_RESUME_START, | TARGET_EVENT_RESUME_START, | ||||