[PATCH 2/2] Notice architecture changes even when the register window is not open.
"Andrew Burgess" <[email protected]> Thu, 5 Sep 2013 15:27:29 +0100
| Newsgroups | gmane.comp.debugging.insight |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> * 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