* Pending breakpoints in MI
@ 2007-11-08 11:12 Vladimir Prus
2007-11-19 20:42 ` Vladimir Prus
2007-12-13 14:44 ` Joel Brobecker
0 siblings, 2 replies; 10+ messages in thread
From: Vladimir Prus @ 2007-11-08 11:12 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 492 bytes --]
At the moment, it's not possible to set pending breakpoint
via MI. This patch fixed it. Now if one does
-break-insert -f symbol_in_shared_lib
GDB will create a pending breakpoint if symbol_in_shared_lib
is not yet seen. The -f stands for "future". We can't use -p
since that grabbed by thread option (which cannot be -t since that's
grabbed by temporary option). Apple branch uses -f as well,
as we might as well be compatible (even if the code is completely different).
OK?
- Volodya
[-- Attachment #2: pending_mi_3_breakpoints.diff --]
[-- Type: text/x-diff, Size: 7980 bytes --]
--- gdb/breakpoint.c (/patches/pending_mi_2_code_duplication) (revision 45)
+++ gdb/breakpoint.c (/patches/pending_mi_3_breakpoints) (revision 45)
@@ -5648,12 +5648,14 @@ enum gdb_rc
gdb_breakpoint (char *address, char *condition,
int hardwareflag, int tempflag,
int thread, int ignore_count,
+ int pending,
char **error_message)
{
return break_command_really (address, condition, thread,
0 /* condition and thread are valid. */,
tempflag, hardwareflag,
- AUTO_BOOLEAN_FALSE /* no pending. */,
+ pending
+ ? AUTO_BOOLEAN_TRUE : AUTO_BOOLEAN_FALSE,
0);
}
--- gdb/gdb.h (/patches/pending_mi_2_code_duplication) (revision 45)
+++ gdb/gdb.h (/patches/pending_mi_3_breakpoints) (revision 45)
@@ -51,6 +51,7 @@ enum gdb_rc gdb_breakpoint_query (struct
enum gdb_rc gdb_breakpoint (char *address, char *condition,
int hardwareflag, int tempflag,
int thread, int ignore_count,
+ int pending,
char **error_message);
/* Switch thread and print notification. */
--- gdb/testsuite/gdb.mi/mi-pending.exp (/patches/pending_mi_2_code_duplication) (revision 45)
+++ gdb/testsuite/gdb.mi/mi-pending.exp (/patches/pending_mi_3_breakpoints) (revision 45)
@@ -0,0 +1,75 @@
+# Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+#
+# test running programs
+#
+set prms_id 0
+set bug_id 0
+
+if {[skip_shlib_tests]} {
+ return 0
+}
+
+set testfile "mi-pending"
+set libfile "mi-pendshr"
+set srcfile $testfile.c
+set libsrc $srcdir/$subdir/$libfile.c
+set binfile $objdir/$subdir/$testfile
+set lib_sl $objdir/$subdir/$libfile.sl
+
+set lib_opts debug
+set exec_opts [list debug shlib=$lib_sl]
+
+if [get_compiler_info ${binfile}] {
+ return -1
+}
+
+if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != ""
+ || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $exec_opts] != ""} {
+ untested "Could not compile either $libsrc or $srcdir/$subdir/$srcfile."
+ return -1
+}
+
+# Start with a fresh gdb.
+
+gdb_exit
+mi_gdb_start
+mi_gdb_reinitialize_dir $srcdir/$subdir
+mi_gdb_load ${binfile}
+gdb_load_shlibs $lib_sl
+
+if [target_info exists gdb_stub] {
+ gdb_step_for_stub;
+}
+
+# Set pending breakpoint via MI
+mi_gdb_test "-break-insert -f pendfunc1" \
+ ".*\\^done,bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\\(p\\)\",addr=\"<PENDING>\",pending=\"pendfunc1\",times=\"0\"\}"\
+ "MI pending breakpoint on pendfunc1"
+
+mi_run_cmd
+
+# Make sure we hit breakpoint.
+mi_gdb_test "" \
+ ".*\\*stopped,reason=\"breakpoint-hit\",bkptno=\"1\".*func=\"pendfunc1\".*" \
+ "Run till MI pending breakpoint on pendfunc1"
\ No newline at end of file
--- gdb/testsuite/gdb.mi/mi-pending.c (/patches/pending_mi_2_code_duplication) (revision 45)
+++ gdb/testsuite/gdb.mi/mi-pending.c (/patches/pending_mi_3_breakpoints) (revision 45)
@@ -0,0 +1,34 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2004, 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Please email any bugs, comments, and/or additions to this file to:
+ bug-gdb@prep.ai.mit.edu */
+
+#include <stdio.h>
+
+int k = 0;
+
+extern void pendfunc (int x);
+
+int main()
+{
+ pendfunc (3); /* break main here */
+ pendfunc (4);
+ k = 1;
+ pendfunc (3);
+ return 0;
+}
--- gdb/testsuite/gdb.mi/mi-pendshr.c (/patches/pending_mi_2_code_duplication) (revision 45)
+++ gdb/testsuite/gdb.mi/mi-pendshr.c (/patches/pending_mi_3_breakpoints) (revision 45)
@@ -0,0 +1,32 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2004, 2007 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Please email any bugs, comments, and/or additions to this file to:
+ bug-gdb@prep.ai.mit.edu */
+
+#include <stdio.h>
+
+void pendfunc1 (int x)
+{
+ int y = x + 4;
+ printf ("in pendfunc1, x is %d\n", x);
+}
+
+void pendfunc (int x)
+{
+ pendfunc1 (x);
+}
--- gdb/mi/mi-cmd-break.c (/patches/pending_mi_2_code_duplication) (revision 45)
+++ gdb/mi/mi-cmd-break.c (/patches/pending_mi_3_breakpoints) (revision 45)
@@ -63,7 +63,10 @@ enum bp_type
breakpoint. -break-insert -t -h <location> --> insert a temporary
hw bp.
-break-insert -r <regexp> --> insert a bp at functions matching
- <regexp> */
+ <regexp>
+
+ The -f flag makes GDB create a pending breakpoint if no
+ locations for breakpoint are found now. */
enum mi_cmd_result
mi_cmd_break_insert (char *command, char **argv, int argc)
@@ -74,12 +77,13 @@ mi_cmd_break_insert (char *command, char
int thread = -1;
int ignore_count = 0;
char *condition = NULL;
+ int pending = 0;
enum gdb_rc rc;
struct gdb_events *old_hooks;
enum opt
{
HARDWARE_OPT, TEMP_OPT /*, REGEXP_OPT */ , CONDITION_OPT,
- IGNORE_COUNT_OPT, THREAD_OPT
+ IGNORE_COUNT_OPT, THREAD_OPT, PENDING_OPT
};
static struct mi_opt opts[] =
{
@@ -88,6 +92,7 @@ mi_cmd_break_insert (char *command, char
{"c", CONDITION_OPT, 1},
{"i", IGNORE_COUNT_OPT, 1},
{"p", THREAD_OPT, 1},
+ {"f", PENDING_OPT, 0},
{ 0, 0, 0 }
};
@@ -122,6 +127,9 @@ mi_cmd_break_insert (char *command, char
case THREAD_OPT:
thread = atol (optarg);
break;
+ case PENDING_OPT:
+ pending = 1;
+ break;
}
}
@@ -139,12 +147,14 @@ mi_cmd_break_insert (char *command, char
rc = gdb_breakpoint (address, condition,
0 /*hardwareflag */ , temp_p,
thread, ignore_count,
+ pending,
&mi_error_message);
break;
case HW_BP:
rc = gdb_breakpoint (address, condition,
1 /*hardwareflag */ , temp_p,
thread, ignore_count,
+ pending,
&mi_error_message);
break;
#if 0
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: Pending breakpoints in MI 2007-11-08 11:12 Pending breakpoints in MI Vladimir Prus @ 2007-11-19 20:42 ` Vladimir Prus 2007-11-26 18:03 ` Vladimir Prus 2007-12-13 14:44 ` Joel Brobecker 1 sibling, 1 reply; 10+ messages in thread From: Vladimir Prus @ 2007-11-19 20:42 UTC (permalink / raw) To: gdb-patches Vladimir Prus wrote: > > At the moment, it's not possible to set pending breakpoint > via MI. This patch fixed it. Now if one does > > -break-insert -f symbol_in_shared_lib > > GDB will create a pending breakpoint if symbol_in_shared_lib > is not yet seen. The -f stands for "future". We can't use -p > since that grabbed by thread option (which cannot be -t since that's > grabbed by temporary option). Apple branch uses -f as well, > as we might as well be compatible (even if the code is completely > different). > > OK? PING? ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Pending breakpoints in MI 2007-11-19 20:42 ` Vladimir Prus @ 2007-11-26 18:03 ` Vladimir Prus 2007-12-05 14:40 ` Vladimir Prus 0 siblings, 1 reply; 10+ messages in thread From: Vladimir Prus @ 2007-11-26 18:03 UTC (permalink / raw) To: gdb-patches Vladimir Prus wrote: > Vladimir Prus wrote: > >> >> At the moment, it's not possible to set pending breakpoint >> via MI. This patch fixed it. Now if one does >> >> -break-insert -f symbol_in_shared_lib >> >> GDB will create a pending breakpoint if symbol_in_shared_lib >> is not yet seen. The -f stands for "future". We can't use -p >> since that grabbed by thread option (which cannot be -t since that's >> grabbed by temporary option). Apple branch uses -f as well, >> as we might as well be compatible (even if the code is completely >> different). >> >> OK? > > PING? PING 2? - Volodya ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Pending breakpoints in MI 2007-11-26 18:03 ` Vladimir Prus @ 2007-12-05 14:40 ` Vladimir Prus 2007-12-12 19:21 ` Vladimir Prus 0 siblings, 1 reply; 10+ messages in thread From: Vladimir Prus @ 2007-12-05 14:40 UTC (permalink / raw) To: gdb-patches Vladimir Prus wrote: > Vladimir Prus wrote: > >> Vladimir Prus wrote: >> >>> >>> At the moment, it's not possible to set pending breakpoint >>> via MI. This patch fixed it. Now if one does >>> >>> -break-insert -f symbol_in_shared_lib >>> >>> GDB will create a pending breakpoint if symbol_in_shared_lib >>> is not yet seen. The -f stands for "future". We can't use -p >>> since that grabbed by thread option (which cannot be -t since that's >>> grabbed by temporary option). Apple branch uses -f as well, >>> as we might as well be compatible (even if the code is completely >>> different). >>> >>> OK? >> >> PING? > > PING 2? PING 3? - Volodya ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Pending breakpoints in MI 2007-12-05 14:40 ` Vladimir Prus @ 2007-12-12 19:21 ` Vladimir Prus 0 siblings, 0 replies; 10+ messages in thread From: Vladimir Prus @ 2007-12-12 19:21 UTC (permalink / raw) To: gdb-patches Vladimir Prus wrote: > Vladimir Prus wrote: > >> Vladimir Prus wrote: >> >>> Vladimir Prus wrote: >>> >>>> >>>> At the moment, it's not possible to set pending breakpoint >>>> via MI. This patch fixed it. Now if one does >>>> >>>> -break-insert -f symbol_in_shared_lib >>>> >>>> GDB will create a pending breakpoint if symbol_in_shared_lib >>>> is not yet seen. The -f stands for "future". We can't use -p >>>> since that grabbed by thread option (which cannot be -t since that's >>>> grabbed by temporary option). Apple branch uses -f as well, >>>> as we might as well be compatible (even if the code is completely >>>> different). >>>> >>>> OK? >>> >>> PING? >> >> PING 2? > > PING 3? PING 4? - Volodya ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Pending breakpoints in MI 2007-11-08 11:12 Pending breakpoints in MI Vladimir Prus 2007-11-19 20:42 ` Vladimir Prus @ 2007-12-13 14:44 ` Joel Brobecker 2007-12-13 16:03 ` Vladimir Prus 1 sibling, 1 reply; 10+ messages in thread From: Joel Brobecker @ 2007-12-13 14:44 UTC (permalink / raw) To: Vladimir Prus; +Cc: gdb-patches Volodya, You forgot to provide a ChangeLog... Here are my comments on your patch itself. It's mostly fine so we should be able to check it in soon :). > gdb_breakpoint (char *address, char *condition, > int hardwareflag, int tempflag, > int thread, int ignore_count, > + int pending, > char **error_message) I can't believe I'm saying this, since I absolutely hate tabs, but these are the coding rules: You need to use a tab instead of 8 spaces in the line above. Compare for instance how the "char **error_message" line is indented. > - AUTO_BOOLEAN_FALSE /* no pending. */, > + pending > + ? AUTO_BOOLEAN_TRUE : AUTO_BOOLEAN_FALSE, Same here. > int thread, int ignore_count, > + int pending, > char **error_message); Likewise in the .h prototype. > --- gdb/testsuite/gdb.mi/mi-pending.exp (/patches/pending_mi_2_code_duplication) (revision 45) > +++ gdb/testsuite/gdb.mi/mi-pending.exp (/patches/pending_mi_3_breakpoints) (revision 45) > @@ -0,0 +1,75 @@ > +# Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc. Shouldn't the copyright year be only 2007? > --- gdb/testsuite/gdb.mi/mi-pending.c (/patches/pending_mi_2_code_duplication) (revision 45) > +++ gdb/testsuite/gdb.mi/mi-pending.c (/patches/pending_mi_3_breakpoints) (revision 45) > @@ -0,0 +1,34 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2004, 2007 Free Software Foundation, Inc. Same question here. > --- gdb/testsuite/gdb.mi/mi-pendshr.c (/patches/pending_mi_2_code_duplication) (revision 45) > +++ gdb/testsuite/gdb.mi/mi-pendshr.c (/patches/pending_mi_3_breakpoints) (revision 45) > @@ -0,0 +1,32 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2004, 2007 Free Software Foundation, Inc. Likewise here... > --- gdb/mi/mi-cmd-break.c (/patches/pending_mi_2_code_duplication) (revision 45) > +++ gdb/mi/mi-cmd-break.c (/patches/pending_mi_3_breakpoints) (revision 45) > @@ -63,7 +63,10 @@ enum bp_type > breakpoint. -break-insert -t -h <location> --> insert a temporary > hw bp. > -break-insert -r <regexp> --> insert a bp at functions matching > - <regexp> */ > + <regexp> > + > + The -f flag makes GDB create a pending breakpoint if no > + locations for breakpoint are found now. */ Actually, I think that the entire comment needs to be rewritten in a way that the syntax is not described there at all. Just say that this function implements the -break-insert command which, as its name suggests, inserts a breakpoint. The syntax needs to be documented in the GDB manual. See http://www.sourceware.org/gdb/current/onlinedocs/gdb_25.html#SEC259 for what is currently documented. Let's use this opportunity to make sure that every option (and only the supported options) are documented. > @@ -122,6 +127,9 @@ mi_cmd_break_insert (char *command, char > case THREAD_OPT: > thread = atol (optarg); > break; > + case PENDING_OPT: > + pending = 1; > + break; The indentation is strange, could you double-check it? > @@ -139,12 +147,14 @@ mi_cmd_break_insert (char *command, char > rc = gdb_breakpoint (address, condition, > 0 /*hardwareflag */ , temp_p, > thread, ignore_count, > + pending, > &mi_error_message); > break; > case HW_BP: > rc = gdb_breakpoint (address, condition, > 1 /*hardwareflag */ , temp_p, > thread, ignore_count, > + pending, I think you need to replace some spaces with tabs here too... Thanks, -- Joel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Pending breakpoints in MI 2007-12-13 14:44 ` Joel Brobecker @ 2007-12-13 16:03 ` Vladimir Prus 2007-12-13 16:12 ` Joel Brobecker 2007-12-14 0:11 ` Eli Zaretskii 0 siblings, 2 replies; 10+ messages in thread From: Vladimir Prus @ 2007-12-13 16:03 UTC (permalink / raw) To: gdb-patches [-- Attachment #1: Type: text/plain, Size: 3089 bytes --] Joel Brobecker wrote: > Volodya, > > You forgot to provide a ChangeLog... Oops, sorry. Attached now -- there are three ChangeLog files affected, and I provide bits for each. >> gdb_breakpoint (char *address, char *condition, >> int hardwareflag, int tempflag, >> int thread, int ignore_count, >> + int pending, >> char **error_message) > > I can't believe I'm saying this, since I absolutely hate tabs, but > these are the coding rules: You need to use a tab instead of 8 spaces > in the line above. Compare for instance how the "char **error_message" > line is indented. It appears I've failed to re-configure Emacs properly after rearranging my local environment. I've fixed all instances now (and one function which got space indenting in the previous patch). >> --- gdb/testsuite/gdb.mi/mi-pending.exp >> (/patches/pending_mi_2_code_duplication) (revision 45) >> +++ gdb/testsuite/gdb.mi/mi-pending.exp >> (/patches/pending_mi_3_breakpoints) (revision 45) @@ -0,0 +1,75 @@ >> +# Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc. > > Shouldn't the copyright year be only 2007? Yes, right. >> --- gdb/mi/mi-cmd-break.c (/patches/pending_mi_2_code_duplication) >> (revision 45) >> +++ gdb/mi/mi-cmd-break.c (/patches/pending_mi_3_breakpoints) (revision >> 45) @@ -63,7 +63,10 @@ enum bp_type >> breakpoint. -break-insert -t -h <location> --> insert a temporary >> hw bp. >> -break-insert -r <regexp> --> insert a bp at functions matching >> - <regexp> */ >> + <regexp> >> + >> + The -f flag makes GDB create a pending breakpoint if no >> + locations for breakpoint are found now. */ > > Actually, I think that the entire comment needs to be rewritten > in a way that the syntax is not described there at all. Just say > that this function implements the -break-insert command which, as > its name suggests, inserts a breakpoint. The syntax needs to be > documented in the GDB manual. See > http://www.sourceware.org/gdb/current/onlinedocs/gdb_25.html#SEC259 > for what is currently documented. Let's use this opportunity to > make sure that every option (and only the supported options) are > documented. I've done so. Eli, does the manual changes in the attached patch look good to you? Thanks a lot for the review! Revised patch attached, is it OK? - Volodya gdb/ Add support for pending breakpoints in MI. * gdb.h (gdb_breakpoint): Add parameter pending. * breakpoint.c (break_command_1): Fix formatting. (gdb_breakpoint): Add parameter pending. Fix formatting. * mi/mi-cmd-break.c (mi_break_insert): Change comment to refer to manual. Add support for the -f flag, for pending breakpoint. gdb/doc * gdb.texinfo (GDB/MI Breakpoint Commands): Document the -f option for -break-insert, remove -r option, and clarify specification of location. gdb/testsuite * gdb.mi/mi-pending.exp: New. * gdb.mi/mi-pending.c: New. * gdb.mi/mi-pendshr.c: New. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: pending_mi_3_breakpoints.diff --] [-- Type: text/x-diff; name="pending_mi_3_breakpoints.diff", Size: 9934 bytes --] --- gdb/doc/gdb.texinfo (/patches/pending_mi_2_code_duplication) (revision 49) +++ gdb/doc/gdb.texinfo (/patches/pending_mi_3_breakpoints) (revision 49) @@ -18055,13 +18055,13 @@ N.A. @subsubheading Synopsis @smallexample - -break-insert [ -t ] [ -h ] [ -r ] + -break-insert [ -t ] [ -h ] [ -f ] [ -c @var{condition} ] [ -i @var{ignore-count} ] - [ -p @var{thread} ] [ @var{line} | @var{addr} ] + [ -p @var{thread} ] [ @var{location} ] @end smallexample @noindent -If specified, @var{line}, can be one of: +If specified, @var{location}, can be one of: @itemize @bullet @item function @@ -18084,10 +18084,12 @@ Insert a hardware breakpoint. Make the breakpoint conditional on @var{condition}. @item -i @var{ignore-count} Initialize the @var{ignore-count}. -@item -r -Insert a regular breakpoint in all the functions whose names match the -given regular expression. Other flags are not applicable to regular -expressions. +@item -f +If @var{location} cannot be parsed (for example if it +refers to unknown files or functions), create a pending +breakpoint. Without this flag, @value{GDBN} will report +an error, and won't create a breakpoint, if @var{location} +cannot be parsed. @end table @subsubheading Result --- gdb/breakpoint.c (/patches/pending_mi_2_code_duplication) (revision 49) +++ gdb/breakpoint.c (/patches/pending_mi_3_breakpoints) (revision 49) @@ -5638,9 +5638,9 @@ break_command_1 (char *arg, int flag, in int tempflag = flag & BP_TEMPFLAG; return break_command_really (arg, - NULL, 0, 1 /* parse arg */, - tempflag, hardwareflag, - pending_break_support, from_tty); + NULL, 0, 1 /* parse arg */, + tempflag, hardwareflag, + pending_break_support, from_tty); } @@ -5648,13 +5648,15 @@ enum gdb_rc gdb_breakpoint (char *address, char *condition, int hardwareflag, int tempflag, int thread, int ignore_count, + int pending, char **error_message) { - return break_command_really (address, condition, thread, - 0 /* condition and thread are valid. */, - tempflag, hardwareflag, - AUTO_BOOLEAN_FALSE /* no pending. */, - 0); + return break_command_really (address, condition, thread, + 0 /* condition and thread are valid. */, + tempflag, hardwareflag, + pending + ? AUTO_BOOLEAN_TRUE : AUTO_BOOLEAN_FALSE, + 0); } --- gdb/gdb.h (/patches/pending_mi_2_code_duplication) (revision 49) +++ gdb/gdb.h (/patches/pending_mi_3_breakpoints) (revision 49) @@ -51,6 +51,7 @@ enum gdb_rc gdb_breakpoint_query (struct enum gdb_rc gdb_breakpoint (char *address, char *condition, int hardwareflag, int tempflag, int thread, int ignore_count, + int pending, char **error_message); /* Switch thread and print notification. */ --- gdb/testsuite/gdb.mi/mi-pending.exp (/patches/pending_mi_2_code_duplication) (revision 49) +++ gdb/testsuite/gdb.mi/mi-pending.exp (/patches/pending_mi_3_breakpoints) (revision 49) @@ -0,0 +1,75 @@ +# Copyright 2007 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +if $tracelevel then { + strace $tracelevel +} + +# +# test running programs +# +set prms_id 0 +set bug_id 0 + +if {[skip_shlib_tests]} { + return 0 +} + +set testfile "mi-pending" +set libfile "mi-pendshr" +set srcfile $testfile.c +set libsrc $srcdir/$subdir/$libfile.c +set binfile $objdir/$subdir/$testfile +set lib_sl $objdir/$subdir/$libfile.sl + +set lib_opts debug +set exec_opts [list debug shlib=$lib_sl] + +if [get_compiler_info ${binfile}] { + return -1 +} + +if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != "" + || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $exec_opts] != ""} { + untested "Could not compile either $libsrc or $srcdir/$subdir/$srcfile." + return -1 +} + +# Start with a fresh gdb. + +gdb_exit +mi_gdb_start +mi_gdb_reinitialize_dir $srcdir/$subdir +mi_gdb_load ${binfile} +gdb_load_shlibs $lib_sl + +if [target_info exists gdb_stub] { + gdb_step_for_stub; +} + +# Set pending breakpoint via MI +mi_gdb_test "-break-insert -f pendfunc1" \ + ".*\\^done,bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\\(p\\)\",addr=\"<PENDING>\",pending=\"pendfunc1\",times=\"0\"\}"\ + "MI pending breakpoint on pendfunc1" + +mi_run_cmd + +# Make sure we hit breakpoint. +mi_gdb_test "" \ + ".*\\*stopped,reason=\"breakpoint-hit\",bkptno=\"1\".*func=\"pendfunc1\".*" \ + "Run till MI pending breakpoint on pendfunc1" \ No newline at end of file --- gdb/testsuite/gdb.mi/mi-pending.c (/patches/pending_mi_2_code_duplication) (revision 49) +++ gdb/testsuite/gdb.mi/mi-pending.c (/patches/pending_mi_3_breakpoints) (revision 49) @@ -0,0 +1,34 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + Please email any bugs, comments, and/or additions to this file to: + bug-gdb@prep.ai.mit.edu */ + +#include <stdio.h> + +int k = 0; + +extern void pendfunc (int x); + +int main() +{ + pendfunc (3); /* break main here */ + pendfunc (4); + k = 1; + pendfunc (3); + return 0; +} --- gdb/testsuite/gdb.mi/mi-pendshr.c (/patches/pending_mi_2_code_duplication) (revision 49) +++ gdb/testsuite/gdb.mi/mi-pendshr.c (/patches/pending_mi_3_breakpoints) (revision 49) @@ -0,0 +1,32 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + Please email any bugs, comments, and/or additions to this file to: + bug-gdb@prep.ai.mit.edu */ + +#include <stdio.h> + +void pendfunc1 (int x) +{ + int y = x + 4; + printf ("in pendfunc1, x is %d\n", x); +} + +void pendfunc (int x) +{ + pendfunc1 (x); +} --- gdb/mi/mi-cmd-break.c (/patches/pending_mi_2_code_duplication) (revision 49) +++ gdb/mi/mi-cmd-break.c (/patches/pending_mi_3_breakpoints) (revision 49) @@ -56,14 +56,8 @@ enum bp_type REGEXP_BP }; -/* Insert a breakpoint. The type of breakpoint is specified by the - first argument: -break-insert <location> --> insert a regular - breakpoint. -break-insert -t <location> --> insert a temporary - breakpoint. -break-insert -h <location> --> insert an hardware - breakpoint. -break-insert -t -h <location> --> insert a temporary - hw bp. - -break-insert -r <regexp> --> insert a bp at functions matching - <regexp> */ +/* Implements the -break-insert command. + See the MI manual for the list of possible options. */ enum mi_cmd_result mi_cmd_break_insert (char *command, char **argv, int argc) @@ -74,12 +68,13 @@ mi_cmd_break_insert (char *command, char int thread = -1; int ignore_count = 0; char *condition = NULL; + int pending = 0; enum gdb_rc rc; struct gdb_events *old_hooks; enum opt { HARDWARE_OPT, TEMP_OPT /*, REGEXP_OPT */ , CONDITION_OPT, - IGNORE_COUNT_OPT, THREAD_OPT + IGNORE_COUNT_OPT, THREAD_OPT, PENDING_OPT }; static struct mi_opt opts[] = { @@ -88,6 +83,7 @@ mi_cmd_break_insert (char *command, char {"c", CONDITION_OPT, 1}, {"i", IGNORE_COUNT_OPT, 1}, {"p", THREAD_OPT, 1}, + {"f", PENDING_OPT, 0}, { 0, 0, 0 } }; @@ -122,6 +118,9 @@ mi_cmd_break_insert (char *command, char case THREAD_OPT: thread = atol (optarg); break; + case PENDING_OPT: + pending = 1; + break; } } @@ -139,12 +138,14 @@ mi_cmd_break_insert (char *command, char rc = gdb_breakpoint (address, condition, 0 /*hardwareflag */ , temp_p, thread, ignore_count, + pending, &mi_error_message); break; case HW_BP: rc = gdb_breakpoint (address, condition, 1 /*hardwareflag */ , temp_p, thread, ignore_count, + pending, &mi_error_message); break; #if 0 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Pending breakpoints in MI 2007-12-13 16:03 ` Vladimir Prus @ 2007-12-13 16:12 ` Joel Brobecker 2007-12-14 0:11 ` Eli Zaretskii 1 sibling, 0 replies; 10+ messages in thread From: Joel Brobecker @ 2007-12-13 16:12 UTC (permalink / raw) To: Vladimir Prus; +Cc: gdb-patches This part: > gdb/ > Add support for pending breakpoints in MI. > * gdb.h (gdb_breakpoint): Add parameter pending. > * breakpoint.c (break_command_1): Fix formatting. > (gdb_breakpoint): Add parameter pending. Fix > formatting. > * mi/mi-cmd-break.c (mi_break_insert): Change > comment to refer to manual. Add support for > the -f flag, for pending breakpoint. ... And that part: > gdb/testsuite > * gdb.mi/mi-pending.exp: New. > * gdb.mi/mi-pending.c: New. > * gdb.mi/mi-pendshr.c: New. are now OK. > gdb/doc > * gdb.texinfo (GDB/MI Breakpoint Commands): Document > the -f option for -break-insert, remove -r option, > and clarify specification of location. That leaves the documentation update for Eli. Cheers! -- Joel ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Pending breakpoints in MI 2007-12-13 16:03 ` Vladimir Prus 2007-12-13 16:12 ` Joel Brobecker @ 2007-12-14 0:11 ` Eli Zaretskii 2007-12-14 6:27 ` Vladimir Prus 1 sibling, 1 reply; 10+ messages in thread From: Eli Zaretskii @ 2007-12-14 0:11 UTC (permalink / raw) To: Vladimir Prus; +Cc: gdb-patches > From: Vladimir Prus <ghost@cs.msu.su> > Date: Thu, 13 Dec 2007 17:42:53 +0300 > > I've done so. Eli, does the manual changes in the attached patch look > good to you? Yes, except for one minor gotcha: > +If @var{location} cannot be parsed (for example if it > +refers to unknown files or functions), create a pending > +breakpoint. It's better to say "... this command creates a pending breakpoint." Also, please put 2 spaces after the period that ends a sentence. Thanks. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Pending breakpoints in MI 2007-12-14 0:11 ` Eli Zaretskii @ 2007-12-14 6:27 ` Vladimir Prus 0 siblings, 0 replies; 10+ messages in thread From: Vladimir Prus @ 2007-12-14 6:27 UTC (permalink / raw) To: Eli Zaretskii; +Cc: gdb-patches On Thursday 13 December 2007 23:30:25 Eli Zaretskii wrote: > > From: Vladimir Prus <ghost@cs.msu.su> > > Date: Thu, 13 Dec 2007 17:42:53 +0300 > > > > I've done so. Eli, does the manual changes in the attached patch look > > good to you? > > Yes, except for one minor gotcha: > > > +If @var{location} cannot be parsed (for example if it > > +refers to unknown files or functions), create a pending > > +breakpoint. > > It's better to say "... this command creates a pending breakpoint." > > Also, please put 2 spaces after the period that ends a sentence. Thanks, I've adjusted the patch. Unfortunately, it seems that one of the prerequisite patches is still not reviewed, but I'll ping that separately. - Volodya ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2007-12-14 6:23 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2007-11-08 11:12 Pending breakpoints in MI Vladimir Prus 2007-11-19 20:42 ` Vladimir Prus 2007-11-26 18:03 ` Vladimir Prus 2007-12-05 14:40 ` Vladimir Prus 2007-12-12 19:21 ` Vladimir Prus 2007-12-13 14:44 ` Joel Brobecker 2007-12-13 16:03 ` Vladimir Prus 2007-12-13 16:12 ` Joel Brobecker 2007-12-14 0:11 ` Eli Zaretskii 2007-12-14 6:27 ` Vladimir Prus
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox