From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9734 invoked by alias); 27 Mar 2007 20:15:44 -0000 Received: (qmail 9723 invoked by uid 22791); 27 Mar 2007 20:15:43 -0000 X-Spam-Check-By: sourceware.org Received: from return.false.org (HELO return.false.org) (66.207.162.98) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 27 Mar 2007 21:15:38 +0100 Received: from return.false.org (localhost [127.0.0.1]) by return.false.org (Postfix) with ESMTP id 43B0C4B267; Tue, 27 Mar 2007 15:15:37 -0500 (CDT) Received: from caradoc.them.org (dsl093-172-095.pit1.dsl.speakeasy.net [66.93.172.95]) by return.false.org (Postfix) with ESMTP id C461D4B262; Tue, 27 Mar 2007 15:15:36 -0500 (CDT) Received: from drow by caradoc.them.org with local (Exim 4.63) (envelope-from ) id 1HWI4u-0005eb-AA; Tue, 27 Mar 2007 16:15:36 -0400 Date: Tue, 27 Mar 2007 20:15:00 -0000 From: Daniel Jacobowitz To: Pedro Alves Cc: gdb-patches@sourceware.org Subject: Re: TUI + gdbserver broken? Message-ID: <20070327201536.GP28164@caradoc.them.org> Mail-Followup-To: Pedro Alves , gdb-patches@sourceware.org References: <20070319021145.GA25872@caradoc.them.org> <45FEF7B0.9070209@portugalmail.pt> <20070319221430.GA24326@caradoc.them.org> <45FF1571.2080401@portugalmail.pt> <20070319234141.GA29137@caradoc.them.org> <45FF2D16.6030501@portugalmail.pt> <20070320025548.GA6238@caradoc.them.org> <4053daab0703200205r462e7501x771fa8a0d1a91ebf@mail.gmail.com> <46006BF5.8020907@portugalmail.pt> <4601EF14.4080103@portugalmail.pt> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4601EF14.4080103@portugalmail.pt> User-Agent: Mutt/1.5.14+cvs20070313 (2007-03-13) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2007-03/txt/msg00279.txt.bz2 On Thu, Mar 22, 2007 at 02:51:00AM +0000, Pedro Alves wrote: > I've been trying to understand why doing as you suggested doesn't > work, and what I see makes me believe that the current frame hook > handling is not safe - that is, as I said before, I believe that > calling: > get_selected_frame -> select_frame -> > deprecated_selected_frame_level_changed_hook > inside a deprecated_selected_frame_level_changed_hook is a bad > idea. I believe those hooks should be pure observers. The problem, really, is that these are silly places for hooks when GDB's internal state is inconsistent. The registers_changed hook is getting you in trouble because it is called when we invalidate registers - having it immediately fetch new registers is very bad! See the comment in infrun.c right before this call to registers_changed for more. Fortunately TUI's registers_changed hook hasn't done anything in a long time. Insight doesn't even use it. We can delete it. Could you see if the attached works for you? -- Daniel Jacobowitz CodeSourcery 2007-03-27 Daniel Jacobowitz * defs.h (deprecated_registers_changed_hook): Delete declaration. * interps.c (clear_interpreter_hooks): Do not clear deprecated_registers_changed_hook. * regcache.c (registers_changed): Do not call it. * top.c (deprecated_registers_changed_hook): Do not define it. * mi/mi-interp.c (mi_command_loop): Do not clear it. * tui/tui-hooks.c (tui_install_hooks): Do not install it. (tui_remove_hooks): Do not remove it. (tui_selected_frame_level_changed_hook): Check for negative level. Use get_selected_frame. (tui_registers_changed_hook): Deleted. Index: defs.h =================================================================== RCS file: /cvs/src/src/gdb/defs.h,v retrieving revision 1.202 diff -u -p -r1.202 defs.h --- defs.h 8 Feb 2007 16:18:56 -0000 1.202 +++ defs.h 27 Mar 2007 20:12:13 -0000 @@ -1135,7 +1135,6 @@ extern void (*deprecated_create_breakpoi extern void (*deprecated_delete_breakpoint_hook) (struct breakpoint * bpt); extern void (*deprecated_modify_breakpoint_hook) (struct breakpoint * bpt); extern void (*deprecated_interactive_hook) (void); -extern void (*deprecated_registers_changed_hook) (void); extern void (*deprecated_readline_begin_hook) (char *, ...) ATTRIBUTE_FPTR_PRINTF_1; extern char *(*deprecated_readline_hook) (char *); Index: interps.c =================================================================== RCS file: /cvs/src/src/gdb/interps.c,v retrieving revision 1.19 diff -u -p -r1.19 interps.c --- interps.c 9 Jan 2007 17:58:51 -0000 1.19 +++ interps.c 27 Mar 2007 20:12:13 -0000 @@ -329,7 +329,6 @@ clear_interpreter_hooks (void) deprecated_delete_breakpoint_hook = 0; deprecated_modify_breakpoint_hook = 0; deprecated_interactive_hook = 0; - deprecated_registers_changed_hook = 0; deprecated_readline_begin_hook = 0; deprecated_readline_hook = 0; deprecated_readline_end_hook = 0; Index: regcache.c =================================================================== RCS file: /cvs/src/src/gdb/regcache.c,v retrieving revision 1.142 diff -u -p -r1.142 regcache.c --- regcache.c 13 Jan 2007 23:24:43 -0000 1.142 +++ regcache.c 27 Mar 2007 20:12:14 -0000 @@ -464,9 +464,6 @@ registers_changed (void) for (i = 0; i < current_regcache->descr->nr_raw_registers; i++) set_register_cached (i, 0); - - if (deprecated_registers_changed_hook) - deprecated_registers_changed_hook (); } /* DEPRECATED_REGISTERS_FETCHED () Index: top.c =================================================================== RCS file: /cvs/src/src/gdb/top.c,v retrieving revision 1.119 diff -u -p -r1.119 top.c --- top.c 28 Feb 2007 15:55:54 -0000 1.119 +++ top.c 27 Mar 2007 20:12:14 -0000 @@ -271,11 +271,6 @@ void (*deprecated_detach_hook) (void); void (*deprecated_interactive_hook) (void); -/* Called when the registers have changed, as a hint to a GUI - to minimize window update. */ - -void (*deprecated_registers_changed_hook) (void); - /* Tell the GUI someone changed the register REGNO. -1 means that the caller does not know which register changed or that several registers have changed (see value_assign). */ Index: mi/mi-interp.c =================================================================== RCS file: /cvs/src/src/gdb/mi/mi-interp.c,v retrieving revision 1.18 diff -u -p -r1.18 mi-interp.c --- mi/mi-interp.c 9 Jan 2007 17:59:08 -0000 1.18 +++ mi/mi-interp.c 27 Mar 2007 20:12:14 -0000 @@ -349,7 +349,6 @@ mi_command_loop (int mi_version) deprecated_delete_breakpoint_hook = 0; deprecated_modify_breakpoint_hook = 0; deprecated_interactive_hook = 0; - deprecated_registers_changed_hook = 0; deprecated_readline_begin_hook = 0; deprecated_readline_hook = 0; deprecated_readline_end_hook = 0; Index: tui/tui-hooks.c =================================================================== RCS file: /cvs/src/src/gdb/tui/tui-hooks.c,v retrieving revision 1.30 diff -u -p -r1.30 tui-hooks.c --- tui/tui-hooks.c 7 Mar 2007 10:29:47 -0000 1.30 +++ tui/tui-hooks.c 27 Mar 2007 20:12:14 -0000 @@ -124,26 +124,10 @@ tui_query_hook (const char * msg, va_lis return retval; } -/* Prevent recursion of deprecated_registers_changed_hook(). */ +/* Prevent recursion of deprecated_register_changed_hook(). */ static int tui_refreshing_registers = 0; static void -tui_registers_changed_hook (void) -{ - struct frame_info *fi; - - fi = get_selected_frame (NULL); - if (tui_refreshing_registers == 0) - { - tui_refreshing_registers = 1; -#if 0 - tui_check_data_values (fi); -#endif - tui_refreshing_registers = 0; - } -} - -static void tui_register_changed_hook (int regno) { struct frame_info *fi; @@ -230,7 +214,11 @@ tui_selected_frame_level_changed_hook (i { struct frame_info *fi; - fi = deprecated_safe_get_selected_frame (); + /* Negative level means that the selected frame was cleared. */ + if (level < 0) + return; + + fi = get_selected_frame (NULL); /* Ensure that symbols for this frame are read in. Also, determine the source language of this frame, and switch to it if desired. */ if (fi) @@ -289,7 +277,6 @@ tui_install_hooks (void) /* Install the event hooks. */ tui_old_event_hooks = deprecated_set_gdb_event_hooks (&tui_event_hooks); - deprecated_registers_changed_hook = tui_registers_changed_hook; deprecated_register_changed_hook = tui_register_changed_hook; deprecated_detach_hook = tui_detach_hook; } @@ -302,7 +289,6 @@ tui_remove_hooks (void) deprecated_selected_frame_level_changed_hook = 0; deprecated_print_frame_info_listing_hook = 0; deprecated_query_hook = 0; - deprecated_registers_changed_hook = 0; deprecated_register_changed_hook = 0; deprecated_detach_hook = 0;