target: print reason why GDB halts
authorØyvind Harboe <oyvind.harboe@zylin.com>
Thu, 21 Jan 2010 09:16:42 +0000 (10:16 +0100)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Thu, 21 Jan 2010 15:20:58 +0000 (16:20 +0100)
If GDB halts unexpectedly, print reason: srst assert or power
out detected.

If polling fails, then things are a bit trickier. We do not
want to spam telnet or the log with polling failed messages.
Leave that case be w/a comment in a code for now.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
src/target/target.c

index ff5aef34c9bd0dd6fd31427284eb5abdb4a9161c..1eb65a62e0f40f3938062a03b2957e0be955f4da 100644 (file)
@@ -1767,6 +1767,7 @@ static int handle_target(void *priv)
                int did_something = 0;
                if (runSrstAsserted)
                {
+                       LOG_INFO("Waking up GDB, srst asserted detected.");
                        target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT);
                        Jim_Eval(interp, "srst_asserted");
                        did_something = 1;
@@ -1778,6 +1779,7 @@ static int handle_target(void *priv)
                }
                if (runPowerDropout)
                {
+                       LOG_INFO("Waking up GDB, power dropout detected.");
                        target_call_event_callbacks_all(TARGET_EVENT_GDB_HALT);
                        Jim_Eval(interp, "power_dropout");
                        did_something = 1;
@@ -1820,6 +1822,14 @@ static int handle_target(void *priv)
                        /* polling may fail silently until the target has been examined */
                        if ((retval = target_poll(target)) != ERROR_OK)
                        {
+                               /* FIX!!!!! If we add a LOG_INFO() here to output a line in GDB
+                                * *why* we are aborting GDB, then we'll spam telnet when the
+                                * poll is failing persistently.
+                                *
+                                * If we could implement an event that detected the
+                                * target going from non-pollable to pollable, we could issue
+                                * an error only upon the transition.
+                                */
                                target_call_event_callbacks(target, TARGET_EVENT_GDB_HALT);
                                return retval;
                        }