summaryrefslogtreecommitdiff
path: root/gdb/regcache.c
diff options
context:
space:
mode:
authorPedro Alves <pedro@codesourcery.com>2010-04-29 16:33:15 +0000
committerPedro Alves <pedro@codesourcery.com>2010-04-29 16:33:15 +0000
commit4ae9202a91e7f35b84a64d47608010fd5acf1db5 (patch)
tree0e2724f01254b6e1284ca582d41f3d24c8871aad /gdb/regcache.c
parent41c5017cc1af5e54bd7795f9a9178dcb4bd9a97b (diff)
downloadgdb-4ae9202a91e7f35b84a64d47608010fd5acf1db5.tar.gz
PR gdb/11557
gdb/ * regcache.c (registers_changed): Rename to ... (registers_changed_ptid): ... this, and only delete register cache entries matching the ptid filter argument. (registers_changed): Reimplement on top of registers_changed_ptid. * regcache.h (registers_changed_ptid): Declare. * target.c (target_resume): Flush register caches. gdb/testsuite/ * gdb.mi/mi-ns-stale-regcache.exp, gdb.mi/ns-stale-regcache.c: New files.
Diffstat (limited to 'gdb/regcache.c')
-rw-r--r--gdb/regcache.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/gdb/regcache.c b/gdb/regcache.c
index d6f58fe9613..c3fcd9d4517 100644
--- a/gdb/regcache.c
+++ b/gdb/regcache.c
@@ -518,15 +518,27 @@ regcache_thread_ptid_changed (ptid_t old_ptid, ptid_t new_ptid)
Indicate that registers may have changed, so invalidate the cache. */
void
-registers_changed (void)
+registers_changed_ptid (ptid_t ptid)
{
- struct regcache_list *list, *next;
+ struct regcache_list *list, **list_link;
- for (list = current_regcache; list; list = next)
+ list = current_regcache;
+ list_link = &current_regcache;
+ while (list)
{
- next = list->next;
- regcache_xfree (list->regcache);
- xfree (list);
+ if (ptid_match (list->regcache->ptid, ptid))
+ {
+ struct regcache_list *dead = list;
+
+ *list_link = list->next;
+ regcache_xfree (list->regcache);
+ list = *list_link;
+ xfree (dead);
+ continue;
+ }
+
+ list_link = &list->next;
+ list = *list_link;
}
current_regcache = NULL;
@@ -545,6 +557,11 @@ registers_changed (void)
alloca (0);
}
+void
+registers_changed (void)
+{
+ registers_changed_ptid (minus_one_ptid);
+}
void
regcache_raw_read (struct regcache *regcache, int regnum, gdb_byte *buf)