From: Daniel Jacobowitz <drow@false.org>
To: Pedro Alves <pedro_alves@portugalmail.pt>
Cc: gdb-patches@sourceware.org
Subject: Re: TUI + gdbserver broken?
Date: Tue, 27 Mar 2007 20:15:00 -0000 [thread overview]
Message-ID: <20070327201536.GP28164@caradoc.them.org> (raw)
In-Reply-To: <4601EF14.4080103@portugalmail.pt>
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 <dan@codesourcery.com>
* 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;
next prev parent reply other threads:[~2007-03-27 20:15 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-19 1:53 Pedro Alves
2007-03-19 2:11 ` Daniel Jacobowitz
2007-03-19 15:58 ` Denis PILAT
2007-03-27 20:09 ` Daniel Jacobowitz
2007-04-17 15:48 ` [RFA] TUI is broken under Solaris Denis PILAT
2007-04-17 15:51 ` Daniel Jacobowitz
2007-04-18 8:24 ` Denis PILAT
2007-03-19 21:43 ` TUI + gdbserver broken? Pedro Alves
2007-03-19 22:14 ` Daniel Jacobowitz
2007-03-19 23:31 ` Pedro Alves
2007-03-19 23:41 ` Daniel Jacobowitz
2007-03-20 0:39 ` Pedro Alves
2007-03-20 2:56 ` Daniel Jacobowitz
2007-03-20 9:05 ` Pedro Alves
2007-03-20 23:21 ` Pedro Alves
2007-03-22 2:51 ` Pedro Alves
2007-03-27 20:15 ` Daniel Jacobowitz [this message]
2007-03-29 2:26 ` Pedro Alves
2007-03-29 18:55 ` Daniel Jacobowitz
[not found] <45F7480C.5010207@portugalmail.pt>
2007-03-14 8:29 ` Denis PILAT
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070327201536.GP28164@caradoc.them.org \
--to=drow@false.org \
--cc=gdb-patches@sourceware.org \
--cc=pedro_alves@portugalmail.pt \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox