aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2018-05-23 17:06:02 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2018-06-12 21:15:33 +0100
commit1840d81a201932a2d5ad5b089aad85943a5a0a82 (patch)
tree6ca4da94d4907f27d462b52ad5ae42e46e4696e2
parent9516f85aea1d9a34d1cd3f59b7b9eeb590e58c70 (diff)
downloadgdb-1840d81a201932a2d5ad5b089aad85943a5a0a82.zip
gdb-1840d81a201932a2d5ad5b089aad85943a5a0a82.tar.gz
gdb-1840d81a201932a2d5ad5b089aad85943a5a0a82.tar.bz2
gdb: Run INF_EXEC_COMPLETE handler for additional cases
When making an inferior call, and non-stop mode is off, then, once the inferior call is complete all threads will be stopped, and we should run the INF_EXEC_COMPLETE handler. This will result in a call to 'target_async(0)' to remove the event handlers for the target. This was discussed by Yao Qi in this mailing list thread: https://sourceware.org/ml/gdb/2017-10/msg00032.html Without this then the target event handlers are left in place even when the target is stopped, which is different to what happens during a standard stop proceedure (for example when one thread hits a breakpoint). gdb/ChangeLog: PR gdb/22882 * infrun.c (fetch_inferior_event): If GDB is not proceeding then run INF_EXEC_COMPLETE handler, even when not calling normal_stop. Move should_notify_stop local into more inner scope.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/infrun.c16
2 files changed, 16 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 692bb5a..edb60f7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -2,6 +2,14 @@
Stephen Roberts <stephen.roberts@arm.com>
PR gdb/22882
+ * infrun.c (fetch_inferior_event): If GDB is not proceeding then
+ run INF_EXEC_COMPLETE handler, even when not calling normal_stop.
+ Move should_notify_stop local into more inner scope.
+
+2018-06-12 Andrew Burgess <andrew.burgess@embecosm.com>
+ Stephen Roberts <stephen.roberts@arm.com>
+
+ PR gdb/22882
* infrun.c (resume_1): Add call to mark_async_event_handler.
2018-06-12 Andrew Burgess <andrew.burgess@embecosm.com>
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 6f5338c..f455af2 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -3932,7 +3932,6 @@ fetch_inferior_event (void *client_data)
struct inferior *inf = find_inferior_ptid (ecs->ptid);
int should_stop = 1;
struct thread_info *thr = ecs->event_thread;
- int should_notify_stop = 1;
delete_just_stopped_threads_infrun_breakpoints ();
@@ -3950,6 +3949,9 @@ fetch_inferior_event (void *client_data)
}
else
{
+ int should_notify_stop = 1;
+ int proceeded = 0;
+
clean_up_just_stopped_threads_fsms (ecs);
if (thr != NULL && thr->thread_fsm != NULL)
@@ -3960,17 +3962,15 @@ fetch_inferior_event (void *client_data)
if (should_notify_stop)
{
- int proceeded = 0;
-
/* We may not find an inferior if this was a process exit. */
if (inf == NULL || inf->control.stop_soon == NO_STOP_QUIETLY)
proceeded = normal_stop ();
+ }
- if (!proceeded)
- {
- inferior_event_handler (INF_EXEC_COMPLETE, NULL);
- cmd_done = 1;
- }
+ if (!proceeded)
+ {
+ inferior_event_handler (INF_EXEC_COMPLETE, NULL);
+ cmd_done = 1;
}
}
}