diff options
author | Yao Qi <yao@codesourcery.com> | 2013-12-04 09:28:44 +0800 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2013-12-10 19:57:20 +0800 |
commit | f15cb84a84613a5017e41ae435312ddcb17877b5 (patch) | |
tree | cc0a5962af18940a174c79a0d3a78f41dde22f69 /gdb | |
parent | 036e93dfdadd23ac73d3bd7f98f1640ded740cc0 (diff) | |
download | gdb-f15cb84a84613a5017e41ae435312ddcb17877b5.zip gdb-f15cb84a84613a5017e41ae435312ddcb17877b5.tar.gz gdb-f15cb84a84613a5017e41ae435312ddcb17877b5.tar.bz2 |
Invalidate target cache before starting to handle event.
gdb:
2013-12-10 Yao Qi <yao@codesourcery.com>
* infrun.c: Include "target-dcache.h".
(prepare_for_detach): Call target_dcache_invalidate.
(wait_for_inferior): Likewise.
(fetch_inferior_event): Likewise.
(infrun_thread_stop_requested_callback): Likewise. Set
overlay_cache_invalid to 1.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/infrun.c | 24 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d9e492f..8d79661 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2013-12-10 Yao Qi <yao@codesourcery.com> + + * infrun.c: Include "target-dcache.h". + (prepare_for_detach): Call target_dcache_invalidate. + (wait_for_inferior): Likewise. + (fetch_inferior_event): Likewise. + (infrun_thread_stop_requested_callback): Likewise. Set + overlay_cache_invalid to 1. + 2013-12-10 Joel Brobecker <brobecker@adacore.com> * symtab.c (symbol_find_demangled_name): Add handling of diff --git a/gdb/infrun.c b/gdb/infrun.c index 3b55583..d8f9787 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -60,6 +60,7 @@ #include "objfiles.h" #include "completer.h" #include "target-descriptions.h" +#include "target-dcache.h" /* Prototypes for local functions */ @@ -2475,6 +2476,13 @@ infrun_thread_stop_requested_callback (struct thread_info *info, void *arg) old_chain = make_cleanup_restore_current_thread (); + overlay_cache_invalid = 1; + /* Flush target cache before starting to handle each event. + Target was running and cache could be stale. This is just a + heuristic. Running threads may modify target memory, but we + don't get any event. */ + target_dcache_invalidate (); + /* Go through handle_inferior_event/normal_stop, so we always have consistent output as if the stop event had been reported. */ @@ -2677,6 +2685,11 @@ prepare_for_detach (void) memset (ecs, 0, sizeof (*ecs)); overlay_cache_invalid = 1; + /* Flush target cache before starting to handle each event. + Target was running and cache could be stale. This is just a + heuristic. Running threads may modify target memory, but we + don't get any event. */ + target_dcache_invalidate (); if (deprecated_target_wait_hook) ecs->ptid = deprecated_target_wait_hook (pid_ptid, &ecs->ws, 0); @@ -2740,6 +2753,12 @@ wait_for_inferior (void) overlay_cache_invalid = 1; + /* Flush target cache before starting to handle each event. + Target was running and cache could be stale. This is just a + heuristic. Running threads may modify target memory, but we + don't get any event. */ + target_dcache_invalidate (); + if (deprecated_target_wait_hook) ecs->ptid = deprecated_target_wait_hook (waiton_ptid, &ecs->ws, 0); else @@ -2805,6 +2824,11 @@ fetch_inferior_event (void *client_data) make_cleanup_restore_current_thread (); overlay_cache_invalid = 1; + /* Flush target cache before starting to handle each event. Target + was running and cache could be stale. This is just a heuristic. + Running threads may modify target memory, but we don't get any + event. */ + target_dcache_invalidate (); make_cleanup_restore_integer (&execution_direction); execution_direction = target_execution_direction (); |