From 041274d86dbad1e84b5c09c236b9d68952406aea Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 4 Feb 2011 15:46:49 +0000 Subject: [PATCH] * regcache.c (registers_changed_ptid): Don't explictly always clear `current_regcache'. Only clear current_thread_ptid and current_thread_arch when PTID matches. Only reinit the frame cache if PTID matches the current inferior_ptid. Move alloca(0) call to ... (registers_changed): ... here. --- gdb/ChangeLog | 9 +++++++++ gdb/regcache.c | 28 +++++++++++++++++----------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ba2512d..5d251d1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2011-02-04 Pedro Alves + + * regcache.c (registers_changed_ptid): Don't explictly always + clear `current_regcache'. Only clear current_thread_ptid and + current_thread_arch when PTID matches. Only reinit the frame + cache if PTID matches the current inferior_ptid. Move alloca(0) + call to ... + (registers_changed): ... here. + 2011-02-03 Ulrich Weigand * arm-tdep.c (arm_skip_stack_protector): Accept any symbol that diff --git a/gdb/regcache.c b/gdb/regcache.c index 53e0c59..286f1d1 100644 --- a/gdb/regcache.c +++ b/gdb/regcache.c @@ -530,6 +530,7 @@ void registers_changed_ptid (ptid_t ptid) { struct regcache_list *list, **list_link; + int wildcard = ptid_equal (ptid, minus_one_ptid); list = current_regcache; list_link = ¤t_regcache; @@ -550,13 +551,24 @@ registers_changed_ptid (ptid_t ptid) list = *list_link; } - current_regcache = NULL; + if (wildcard || ptid_equal (ptid, current_thread_ptid)) + { + current_thread_ptid = null_ptid; + current_thread_arch = NULL; + } - current_thread_ptid = null_ptid; - current_thread_arch = NULL; + if (wildcard || ptid_equal (ptid, inferior_ptid)) + { + /* We just deleted the regcache of the current thread. Need to + forget about any frames we have cached, too. */ + reinit_frame_cache (); + } +} - /* Need to forget about any frames we have cached, too. */ - reinit_frame_cache (); +void +registers_changed (void) +{ + registers_changed_ptid (minus_one_ptid); /* Force cleanup of any alloca areas if using C alloca instead of a builtin alloca. This particular call is used to clean up @@ -567,12 +579,6 @@ registers_changed_ptid (ptid_t ptid) } void -registers_changed (void) -{ - registers_changed_ptid (minus_one_ptid); -} - -void regcache_raw_read (struct regcache *regcache, int regnum, gdb_byte *buf) { gdb_assert (regcache != NULL && buf != NULL); -- 2.7.4