diff options
-rw-r--r-- | .gitignore | 6 | ||||
-rw-r--r-- | src/helper/jim.c | 5 | ||||
-rw-r--r-- | src/server/gdb_server.c | 2 | ||||
-rw-r--r-- | src/target/target.c | 18 | ||||
-rw-r--r-- | src/target/target.h | 10 |
5 files changed, 35 insertions, 6 deletions
@@ -16,6 +16,8 @@ doc/openocd.fn doc/openocd.fns doc/openocd.html doc/openocd.info +doc/openocd.info-1 +doc/openocd.info-2 doc/openocd.ky doc/openocd.log doc/openocd.pdf @@ -47,3 +49,7 @@ stamp-h1 stamp-vti INSTALL NOTES + +# Eclipse stuff +.project + diff --git a/src/helper/jim.c b/src/helper/jim.c index c1ba0d9d..48e21e9e 100644 --- a/src/helper/jim.c +++ b/src/helper/jim.c @@ -3,11 +3,14 @@ * Copyright 2005 Salvatore Sanfilippo <antirez@invece.org> * Copyright 2005 Clemens Hintze <c.hintze@gmx.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 Duane Ellis <openocd@duaneellis.com> * Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de> * 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 * diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 44d9de83..a0077e93 100644 --- a/src/server/gdb_server.c +++ b/src/server/gdb_server.c @@ -714,7 +714,7 @@ int gdb_target_callback_event_handler(struct target_s *target, enum target_event target_handle_event(target, event); switch (event) { - case TARGET_EVENT_EARLY_HALTED: + case TARGET_EVENT_GDB_HALT: gdb_frontend_halted(target, connection); break; case TARGET_EVENT_HALTED: diff --git a/src/target/target.c b/src/target/target.c index 0040ba0a..253a7e46 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -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_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" }, @@ -821,7 +821,7 @@ int target_call_event_callbacks(target_t *target, enum target_event event) 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)", @@ -1658,6 +1658,15 @@ static int sense_handler(void) 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) { @@ -1676,6 +1685,7 @@ 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; } @@ -1686,6 +1696,7 @@ int handle_target(void *priv) } if (runPowerDropout) { + target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT); Jim_Eval(interp, "power_dropout"); did_something = 1; } @@ -1726,7 +1737,10 @@ int handle_target(void *priv) { /* 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; + } } } diff --git a/src/target/target.h b/src/target/target.h index 0ff2258a..6547d4d7 100644 --- a/src/target/target.h +++ b/src/target/target.h @@ -163,8 +163,14 @@ enum target_event /* 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, |