* fix list/edit command in hook-stop
@ 2006-02-23 18:21 Jason Kraftcheck
2006-02-23 21:13 ` Daniel Jacobowitz
0 siblings, 1 reply; 9+ messages in thread
From: Jason Kraftcheck @ 2006-02-23 18:21 UTC (permalink / raw)
To: gdb-patches
An 'edit' or 'list' command in hook-stop doesn't work because the
current sal isn't updated until after hook-stop is run. The following
trivial change moves the invocation of hook-stop later in normal_stop.
This won't fix the problem in all cases, as the sal is apparently only
updated if print_stack_frame is called. But it doesn't hurt anything
and works more often than without the change.
2006-02-23 Jason Kraftcheck <kraftche@cae.wisc.edu>
* infrun.c (normal_stop): call hook-stop handler later, after
current sal has been set.
diff -upr gdb-6.4/gdb/infrun.c mod/gdb/infrun.c
--- gdb-6.4/gdb/infrun.c 2005-11-14 09:35:16.000000000 -0600
+++ mod/gdb/infrun.c 2006-02-23 11:55:12.469293121 -0600
@@ -3038,12 +3038,6 @@ Further execution is probably impossible
target_terminal_ours ();
- /* Look up the hook_stop and run it (CLI internally handles problem
- of stop_command's pre-hook not existing). */
- if (stop_command)
- catch_errors (hook_stop_stub, stop_command,
- "Error while running hook_stop:\n", RETURN_MASK_ALL);
-
if (!target_has_stack)
{
@@ -3140,6 +3134,12 @@ Further execution is probably impossible
select_frame (get_current_frame ());
}
+ /* Look up the hook_stop and run it (CLI internally handles problem
+ of stop_command's pre-hook not existing). */
+ if (stop_command)
+ catch_errors (hook_stop_stub, stop_command,
+ "Error while running hook_stop:\n", RETURN_MASK_ALL);
+
done:
annotate_stopped ();
observer_notify_normal_stop (stop_bpstat);
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: fix list/edit command in hook-stop 2006-02-23 18:21 fix list/edit command in hook-stop Jason Kraftcheck @ 2006-02-23 21:13 ` Daniel Jacobowitz 2006-02-23 22:52 ` Jason Kraftcheck 0 siblings, 1 reply; 9+ messages in thread From: Daniel Jacobowitz @ 2006-02-23 21:13 UTC (permalink / raw) To: Jason Kraftcheck; +Cc: gdb-patches On Thu, Feb 23, 2006 at 12:20:14PM -0600, Jason Kraftcheck wrote: > An 'edit' or 'list' command in hook-stop doesn't work because the > current sal isn't updated until after hook-stop is run. The following > trivial change moves the invocation of hook-stop later in normal_stop. > This won't fix the problem in all cases, as the sal is apparently only > updated if print_stack_frame is called. But it doesn't hurt anything > and works more often than without the change. > > > 2006-02-23 Jason Kraftcheck <kraftche@cae.wisc.edu> > > * infrun.c (normal_stop): call hook-stop handler later, after > current sal has been set. From the manual: In addition, a pseudo-command, `stop' exists. Defining (`hook-stop') makes the associated commands execute every time execution stops in your program: before breakpoint commands are run, displays are printed, or the stack frame is printed. Your patch would change that; a stop hook which conditionally continued would now be noisy instead of silent, so I don't think this is a good change. Can you just update the sal explicitly, instead of moving things around? -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: fix list/edit command in hook-stop 2006-02-23 21:13 ` Daniel Jacobowitz @ 2006-02-23 22:52 ` Jason Kraftcheck 2006-02-24 7:53 ` Eli Zaretskii 0 siblings, 1 reply; 9+ messages in thread From: Jason Kraftcheck @ 2006-02-23 22:52 UTC (permalink / raw) To: Daniel Jacobowitz; +Cc: gdb-patches Daniel Jacobowitz wrote: > On Thu, Feb 23, 2006 at 12:20:14PM -0600, Jason Kraftcheck wrote: > >>An 'edit' or 'list' command in hook-stop doesn't work because the >>current sal isn't updated until after hook-stop is run. The following >>trivial change moves the invocation of hook-stop later in normal_stop. >>This won't fix the problem in all cases, as the sal is apparently only >>updated if print_stack_frame is called. But it doesn't hurt anything >>and works more often than without the change. >> >> >>2006-02-23 Jason Kraftcheck <kraftche@cae.wisc.edu> >> >> * infrun.c (normal_stop): call hook-stop handler later, after >> current sal has been set. > > >>From the manual: > > In addition, a pseudo-command, `stop' exists. Defining > (`hook-stop') makes the associated commands execute every time > execution stops in your program: before breakpoint commands are run, > displays are printed, or the stack frame is printed. > > Your patch would change that; a stop hook which conditionally continued > would now be noisy instead of silent, so I don't think this is a good > change. > > Can you just update the sal explicitly, instead of moving things around? > > Is this OK? 2006-02-23 Jason Kraftcheck <kraftche@cae.wisc.edu> * infrun.c (normal_stop): Set current SAL before calling hook-stop handler so edit and list commands work. * frame.h: Add delcaration of set_current_sal_from_frame * stack.c: Make set_current_sal_from_frame extern diff -urp gdb-6.4/gdb/frame.h mod/gdb/frame.h --- gdb-6.4/gdb/frame.h 2005-05-22 09:53:34.000000000 -0500 +++ mod/gdb/frame.h 2006-02-23 15:33:11.861630699 -0600 @@ -300,6 +300,14 @@ extern CORE_ADDR get_frame_func (struct extern void find_frame_sal (struct frame_info *frame, struct symtab_and_line *sal); + +/* Set the current source and line to the location given by frame + FRAME, if possible. When CENTER is true, adjust so the relevant + line is in the center of the next 'list'. */ +extern void set_current_sal_from_frame (struct frame_info * frame, + int center); + + /* Return the frame base (what ever that is) (DEPRECATED). Old code was trying to use this single method for two conflicting Only in mod/gdb: gdb-6.4.patch.4 diff -urp gdb-6.4/gdb/infrun.c mod/gdb/infrun.c --- gdb-6.4/gdb/infrun.c 2005-11-14 09:35:16.000000000 -0600 +++ mod/gdb/infrun.c 2006-02-23 15:28:44.485723627 -0600 @@ -3041,8 +3041,12 @@ Further execution is probably impossible /* Look up the hook_stop and run it (CLI internally handles problem of stop_command's pre-hook not existing). */ if (stop_command) - catch_errors (hook_stop_stub, stop_command, - "Error while running hook_stop:\n", RETURN_MASK_ALL); + { + if (target_has_stack) + set_current_sal_from_frame (get_current_frame (), 1); + catch_errors (hook_stop_stub, stop_command, + "Error while running hook_stop:\n", RETURN_MASK_ALL); + } if (!target_has_stack) { diff -urp gdb-6.4/gdb/stack.c mod/gdb/stack.c --- gdb-6.4/gdb/stack.c 2005-08-18 08:26:41.000000000 -0500 +++ mod/gdb/stack.c 2006-02-23 15:36:40.575237163 -0600 @@ -61,8 +61,6 @@ static void print_frame (struct frame_in enum print_what print_what, int print_args, struct symtab_and_line sal); -static void set_current_sal_from_frame (struct frame_info *, int); - /* Zero means do things normally; we are interacting directly with the user. One means print the full filename and linenumber when a frame is printed, and do so in a format emacs18/emacs19.22 can @@ -373,7 +371,7 @@ print_args_stub (void *args) FRAME, if possible. When CENTER is true, adjust so the relevant line is in the center of the next 'list'. */ -static void +void set_current_sal_from_frame (struct frame_info *frame, int center) { struct symtab_and_line sal; ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: fix list/edit command in hook-stop 2006-02-23 22:52 ` Jason Kraftcheck @ 2006-02-24 7:53 ` Eli Zaretskii 2006-02-28 18:49 ` Jason Kraftcheck 0 siblings, 1 reply; 9+ messages in thread From: Eli Zaretskii @ 2006-02-24 7:53 UTC (permalink / raw) To: Jason Kraftcheck; +Cc: drow, gdb-patches > Date: Thu, 23 Feb 2006 16:13:01 -0600 > From: Jason Kraftcheck <kraftche@cae.wisc.edu> > CC: gdb-patches@sources.redhat.com > > --- gdb-6.4/gdb/infrun.c 2005-11-14 09:35:16.000000000 -0600 > +++ mod/gdb/infrun.c 2006-02-23 15:28:44.485723627 -0600 > @@ -3041,8 +3041,12 @@ Further execution is probably impossible > /* Look up the hook_stop and run it (CLI internally handles problem > of stop_command's pre-hook not existing). */ > if (stop_command) > - catch_errors (hook_stop_stub, stop_command, > - "Error while running hook_stop:\n", RETURN_MASK_ALL); > + { > + if (target_has_stack) > + set_current_sal_from_frame (get_current_frame (), 1); > + catch_errors (hook_stop_stub, stop_command, > + "Error while running hook_stop:\n", RETURN_MASK_ALL); > + } > I'd suggest a comment here explaining why set_current_sal_from_frame is called. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: fix list/edit command in hook-stop 2006-02-24 7:53 ` Eli Zaretskii @ 2006-02-28 18:49 ` Jason Kraftcheck 2006-02-28 22:33 ` Eli Zaretskii 0 siblings, 1 reply; 9+ messages in thread From: Jason Kraftcheck @ 2006-02-28 18:49 UTC (permalink / raw) To: gdb-patches; +Cc: Eli Zaretskii Eli Zaretskii wrote: ... > > I'd suggest a comment here explaining why set_current_sal_from_frame > is called. OK. 2006-02-23 Jason Kraftcheck <kraftche@cae.wisc.edu> * infrun.c (normal_stop): Set current SAL before calling hook-stop handler so edit and list commands work. * frame.h: Add delcaration of set_current_sal_from_frame * stack.c: Make set_current_sal_from_frame extern diff -urp gdb-6.4/gdb/frame.h mod/gdb/frame.h --- gdb-6.4/gdb/frame.h 2005-05-22 09:53:34.000000000 -0500 +++ mod/gdb/frame.h 2006-02-28 10:27:00.165163260 -0600 @@ -300,6 +300,14 @@ extern CORE_ADDR get_frame_func (struct extern void find_frame_sal (struct frame_info *frame, struct symtab_and_line *sal); + +/* Set the current source and line to the location given by frame + FRAME, if possible. When CENTER is true, adjust so the relevant + line is in the center of the next 'list'. */ +extern void set_current_sal_from_frame (struct frame_info * frame, + int center); + + /* Return the frame base (what ever that is) (DEPRECATED). Old code was trying to use this single method for two conflicting diff -urp gdb-6.4/gdb/infrun.c mod/gdb/infrun.c --- gdb-6.4/gdb/infrun.c 2005-11-14 09:35:16.000000000 -0600 +++ mod/gdb/infrun.c 2006-02-28 10:27:53.734132365 -0600 @@ -3041,8 +3041,14 @@ Further execution is probably impossible /* Look up the hook_stop and run it (CLI internally handles problem of stop_command's pre-hook not existing). */ if (stop_command) - catch_errors (hook_stop_stub, stop_command, - "Error while running hook_stop:\n", RETURN_MASK_ALL); + { + /* Set current sal for use by edit or list commands if + called from within hook-stop */ + if (target_has_stack) + set_current_sal_from_frame (get_current_frame (), 1); + catch_errors (hook_stop_stub, stop_command, + "Error while running hook_stop:\n", RETURN_MASK_ALL); + } if (!target_has_stack) { diff -urp gdb-6.4/gdb/stack.c mod/gdb/stack.c --- gdb-6.4/gdb/stack.c 2005-08-18 08:26:41.000000000 -0500 +++ mod/gdb/stack.c 2006-02-28 10:27:00.205158011 -0600 @@ -61,8 +61,6 @@ static void print_frame (struct frame_in enum print_what print_what, int print_args, struct symtab_and_line sal); -static void set_current_sal_from_frame (struct frame_info *, int); - /* Zero means do things normally; we are interacting directly with the user. One means print the full filename and linenumber when a frame is printed, and do so in a format emacs18/emacs19.22 can @@ -373,7 +371,7 @@ print_args_stub (void *args) FRAME, if possible. When CENTER is true, adjust so the relevant line is in the center of the next 'list'. */ -static void +void set_current_sal_from_frame (struct frame_info *frame, int center) { struct symtab_and_line sal; ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: fix list/edit command in hook-stop 2006-02-28 18:49 ` Jason Kraftcheck @ 2006-02-28 22:33 ` Eli Zaretskii 2006-03-01 17:58 ` Daniel Jacobowitz 0 siblings, 1 reply; 9+ messages in thread From: Eli Zaretskii @ 2006-02-28 22:33 UTC (permalink / raw) To: Jason Kraftcheck; +Cc: gdb-patches > Date: Tue, 28 Feb 2006 10:30:35 -0600 > From: Jason Kraftcheck <kraftche@cae.wisc.edu> > CC: Eli Zaretskii <eliz@gnu.org> > > Eli Zaretskii wrote: > ... > > > > I'd suggest a comment here explaining why set_current_sal_from_frame > > is called. > > OK. > [...] > + /* Set current sal for use by edit or list commands if > + called from within hook-stop */ > + if (target_has_stack) > + set_current_sal_from_frame (get_current_frame (), 1); > + catch_errors (hook_stop_stub, stop_command, > + "Error while running hook_stop:\n", RETURN_MASK_ALL); > + } Thanks. However, I thought we should explain why set_current_sal_from_frame is called here. I believe the reason is that without the call, the current sal will not be up to date if `edit' or `list' are called inside a hook-stop. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: fix list/edit command in hook-stop 2006-02-28 22:33 ` Eli Zaretskii @ 2006-03-01 17:58 ` Daniel Jacobowitz 2006-03-01 19:19 ` Eli Zaretskii 2006-03-30 16:48 ` Daniel Jacobowitz 0 siblings, 2 replies; 9+ messages in thread From: Daniel Jacobowitz @ 2006-03-01 17:58 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Jason Kraftcheck, gdb-patches On Tue, Feb 28, 2006 at 10:08:41PM +0200, Eli Zaretskii wrote: > Thanks. However, I thought we should explain why > set_current_sal_from_frame is called here. I believe the reason is > that without the call, the current sal will not be up to date if > `edit' or `list' are called inside a hook-stop. I think the patch ought to set the sal regardless of whether a stop hook is defined. However, there's something more complicated going on. The obvious patch from my description causes lots of test failures like this one: (gdb) PASS: gdb.base/call-ar-st.exp: run until breakpoint set at a line print print_double_array(double_array) array_d : ========= 0.000000 23.456700 46.913400 70.370100 93.826800 117.283500 140.740200 164.196900 187.653600 $1 = void (gdb) PASS: gdb.base/call-ar-st.exp: print print_double_array(double_array) print print_char_array(char_array) array_c : ========= Z aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ aZaZaZaZaZaZaZaZaZa $2 = void (gdb) PASS: gdb.base/call-ar-st.exp: print print_char_array(char_array) tbreak 1216 No line 1216 in file "../sysdeps/x86_64/elf/start.S". (gdb) FAIL: gdb.base/call-ar-st.exp: tbreakpoint line 1216 The reason we're suddenly in start.S is that the breakpoint we hit after calling print_double_array is in _start. So the right patch would actually look like the attached. Is this better? -- Daniel Jacobowitz CodeSourcery 2006-03-01 Daniel Jacobowitz <dan@codesourcery.com> * frame.h (set_current_sal_from_frame): New prototype. * stack.c (set_current_sal_from_frame): Make global. * infrun.c (normal_stop): Call set_current_sal_from_frame. Index: frame.h =================================================================== RCS file: /cvs/src/src/gdb/frame.h,v retrieving revision 1.147 diff -u -p -r1.147 frame.h --- frame.h 17 Dec 2005 22:33:59 -0000 1.147 +++ frame.h 1 Mar 2006 17:53:12 -0000 @@ -300,6 +300,12 @@ extern CORE_ADDR get_frame_func (struct extern void find_frame_sal (struct frame_info *frame, struct symtab_and_line *sal); +/* Set the current source and line to the location given by frame + FRAME, if possible. When CENTER is true, adjust so the relevant + line is in the center of the next 'list'. */ + +void set_current_sal_from_frame (struct frame_info *, int); + /* Return the frame base (what ever that is) (DEPRECATED). Old code was trying to use this single method for two conflicting Index: infrun.c =================================================================== RCS file: /cvs/src/src/gdb/infrun.c,v retrieving revision 1.209 diff -u -p -r1.209 infrun.c --- infrun.c 4 Jan 2006 19:34:58 -0000 1.209 +++ infrun.c 1 Mar 2006 17:53:13 -0000 @@ -3044,6 +3044,12 @@ Further execution is probably impossible target_terminal_ours (); + /* Set the current source location. This will also happen if we + display the frame below, but the current SAL will be incorrect + during a user hook-stop function. */ + if (target_has_stack && !stop_stack_dummy) + set_current_sal_from_frame (get_current_frame (), 1); + /* Look up the hook_stop and run it (CLI internally handles problem of stop_command's pre-hook not existing). */ if (stop_command) Index: stack.c =================================================================== RCS file: /cvs/src/src/gdb/stack.c,v retrieving revision 1.137 diff -u -p -r1.137 stack.c --- stack.c 17 Dec 2005 22:34:03 -0000 1.137 +++ stack.c 1 Mar 2006 17:53:14 -0000 @@ -61,8 +61,6 @@ static void print_frame (struct frame_in enum print_what print_what, int print_args, struct symtab_and_line sal); -static void set_current_sal_from_frame (struct frame_info *, int); - /* Zero means do things normally; we are interacting directly with the user. One means print the full filename and linenumber when a frame is printed, and do so in a format emacs18/emacs19.22 can @@ -373,7 +371,7 @@ print_args_stub (void *args) FRAME, if possible. When CENTER is true, adjust so the relevant line is in the center of the next 'list'. */ -static void +void set_current_sal_from_frame (struct frame_info *frame, int center) { struct symtab_and_line sal; ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: fix list/edit command in hook-stop 2006-03-01 17:58 ` Daniel Jacobowitz @ 2006-03-01 19:19 ` Eli Zaretskii 2006-03-30 16:48 ` Daniel Jacobowitz 1 sibling, 0 replies; 9+ messages in thread From: Eli Zaretskii @ 2006-03-01 19:19 UTC (permalink / raw) To: Jason Kraftcheck, gdb-patches > Date: Wed, 1 Mar 2006 12:58:14 -0500 > From: Daniel Jacobowitz <drow@false.org> > Cc: Jason Kraftcheck <kraftche@cae.wisc.edu>, > gdb-patches@sources.redhat.com > > Is this better? Yes, thanks. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: fix list/edit command in hook-stop 2006-03-01 17:58 ` Daniel Jacobowitz 2006-03-01 19:19 ` Eli Zaretskii @ 2006-03-30 16:48 ` Daniel Jacobowitz 1 sibling, 0 replies; 9+ messages in thread From: Daniel Jacobowitz @ 2006-03-30 16:48 UTC (permalink / raw) To: Eli Zaretskii, Jason Kraftcheck, gdb-patches On Wed, Mar 01, 2006 at 12:58:14PM -0500, Daniel Jacobowitz wrote: > 2006-03-01 Daniel Jacobowitz <dan@codesourcery.com> > > * frame.h (set_current_sal_from_frame): New prototype. > * stack.c (set_current_sal_from_frame): Make global. > * infrun.c (normal_stop): Call set_current_sal_from_frame. I have belatedly checked this in. Thanks for the report. -- Daniel Jacobowitz CodeSourcery ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2006-03-30 16:37 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2006-02-23 18:21 fix list/edit command in hook-stop Jason Kraftcheck 2006-02-23 21:13 ` Daniel Jacobowitz 2006-02-23 22:52 ` Jason Kraftcheck 2006-02-24 7:53 ` Eli Zaretskii 2006-02-28 18:49 ` Jason Kraftcheck 2006-02-28 22:33 ` Eli Zaretskii 2006-03-01 17:58 ` Daniel Jacobowitz 2006-03-01 19:19 ` Eli Zaretskii 2006-03-30 16:48 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox