This is the mail archive of the
insight@sourceware.org
mailing list for the Insight project.
[PATCH 2/2] Notice architecture changes even when the register window is not open.
- From: "Andrew Burgess" <aburgess at broadcom dot com>
- To: insight at sourceware dot org
- Date: Thu, 5 Sep 2013 15:27:29 +0100
- Subject: [PATCH 2/2] Notice architecture changes even when the register window is not open.
- Authentication-results: sourceware.org; auth=none
- References: <5228941F dot 8080601 at broadcom dot com>
The register cache can be accessed through the TCL proc "gdb_reginfo",
which can be called from anywhere, there's currently only one other
caller in "actiondlg.tcl", but more callers could easily be added. I
believe that currently any caller to gdb_reginfo needs to (a) know if
they are accessing the reg-cache, and (b) if they are listen for arch
changed events and update the reg-cache. I think this a bad situation
to be in as, the reg-cache would ideally be hidden from the user of
"gdb_reginfo", and secondly, we only really need to update the reg-cache
once per architecture change, not many times, which could happen if many
users are all trying to keep the reg-cache upto date.
Phew! So, the patch below moves the call to "gdb_reg_arch_changed" into
the top-level tcl event handler, we need to ensure that it gets called
before any of the event-handling windows see the architecture change
event as they might access the reg-cache. I could in-theory have moved
the call to "gdb_reg_arch_changed" into the top-level window event
handler, I didn't do this for two reasons, (1) I didn't know if the top
level window always exists, though I suspect it does, but really (2) I
didn't know if there was any control on the order the windows receive
the events...
Anyway, let me know what you think, all feedback welcome.
Thanks,
Andrew
gdb/gdbtk/ChangeLog
2013-09-05 Andrew Burgess <aburgess@broadcom.com>
* library/interface.tcl (gdbtk_tcl_architecture_changed): Add call
to gdb_reg_arch_changed.
* library/regwin.itb (arch_changed): Remove call to
gdb_reg_arch_changed.
Index: ./gdb/gdbtk/library/interface.tcl
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/interface.tcl,v
retrieving revision 1.60
diff -u -p -r1.60 interface.tcl
--- ./gdb/gdbtk/library/interface.tcl 9 Oct 2009 01:23:55 -0000 1.60
+++ ./gdb/gdbtk/library/interface.tcl 5 Sep 2013 14:19:53 -0000
@@ -1815,6 +1815,9 @@ proc initialize_gdbtk {} {
# The architecture changed. Inform the UI.
proc gdbtk_tcl_architecture_changed {} {
set e [ArchChangedEvent \#auto]
+ # First perform global actions as a result of the architecture change.
+ gdb_reg_arch_changed $e
+ # Now dispatch to all the other even handlers.
GDBEventHandler::dispatch $e
delete object $e
}
Index: ./gdb/gdbtk/library/regwin.itb
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/regwin.itb,v
retrieving revision 1.30
diff -u -p -r1.30 regwin.itb
--- ./gdb/gdbtk/library/regwin.itb 25 May 2012 10:34:32 -0000 1.30
+++ ./gdb/gdbtk/library/regwin.itb 5 Sep 2013 14:19:53 -0000
@@ -932,9 +932,6 @@ itcl::body RegWin::_select_group {} {
# ------------------------------------------------------------------
itcl::body RegWin::arch_changed {event} {
- # Update internal register caches
- gdb_reg_arch_changed
-
# Relayout the table
_layout_table