This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
RE: [MI][patch v2] -break-list to specify "thread-group"
- From: Marc Khouzam <marc dot khouzam at ericsson dot com>
- To: "'Tom Tromey'" <tromey at redhat dot com>, "'gdb-patches at sourceware dot org'" <gdb-patches at sourceware dot org>
- Cc: "'Yao Qi'" <yao at codesourcery dot com>
- Date: Wed, 24 Oct 2012 14:42:40 -0400
- Subject: RE: [MI][patch v2] -break-list to specify "thread-group"
- References: <F7CE05678329534C957159168FA70DEC5E11404FDC@EUSAACMS0703.eamcs.ericsson.se> <F7CE05678329534C957159168FA70DEC5E11404FE0@EUSAACMS0703.eamcs.ericsson.se> <F7CE05678329534C957159168FA70DEC5E11B177EA@EUSAACMS0703.eamcs.ericsson.se> <505DB611.70706@codesourcery.com> <F7CE05678329534C957159168FA70DEC5E11404FE6@EUSAACMS0703.eamcs.ericsson.se> <87vceyrlyg.fsf@fleche.redhat.com> <F7CE05678329534C957159168FA70DEC5E11CD801D@EUSAACMS0703.eamcs.ericsson.se> <F7CE05678329534C957159168FA70DEC5E13D9C950@EUSAACMS0703.eamcs.ericsson.se>
Polite re-ping :)
(http://sourceware.org/ml/gdb-patches/2012-10/msg00006.html)
Turns out Eclipse is also missing the extra information this patch
is adding in the case of processing =breakpoint-create MI
notifications because it cannot tell what inferior the breakpoint
was created for.
Thanks
Marc
> -----Original Message-----
> From: gdb-patches-owner@sourceware.org
> [mailto:gdb-patches-owner@sourceware.org] On Behalf Of Marc Khouzam
> Sent: Monday, October 15, 2012 6:39 AM
> To: 'Tom Tromey'
> Cc: 'Yao Qi'; 'gdb-patches@sourceware.org'
> Subject: RE: [MI][patch v2] -break-list to specify "thread-group"
>
>
> Polite ping.
> (http://sourceware.org/ml/gdb-patches/2012-10/msg00006.html)
>
> Thanks
>
> > -----Original Message-----
> > From: gdb-patches-owner@sourceware.org
> > [mailto:gdb-patches-owner@sourceware.org] On Behalf Of Marc Khouzam
> > Sent: Monday, October 01, 2012 12:10 PM
> > To: 'Tom Tromey'
> > Cc: 'Yao Qi'; 'gdb-patches@sourceware.org'
> > Subject: RE: [MI][patch v2] -break-list to specify "thread-group"
> >
> >
> > > Marc> Here's a second stab at it using the "i" prefix for MI.
> > >
> > > I think the general idea is great.
> > >
> > > Marc> The below patch adds the new field "thread-group".
> > >
> > > My recollection, reinforced by browsing the MI docs just
> > now, is that
> > > generally the field name "thread-group" is used to
> specify a single
> > > group. However, with this patch it is actually
> list-valued. So, I
> > > think a different name would be somewhat better, maybe
> > > "thread-groups".
> >
> > I've made the field "thread-groups" for now, since the patch still
> > returns a list of inferiors.
> >
> > > Marc> or (if the bp applies to multiple inferiors, which I
> > didn't quite
> > > Marc> out how to officially trigger, so I hacked the code
> > to make sure
> > > Marc> the output was done properly in that case):
> > >
> > > Hm. I think a given location can only apply to a single inferior.
> > > I am not totally sure.
> > >
> > > So maybe making it "thread-group" and giving it a single
> > value is the
> > > right thing to do.
> >
> > I'd prefer this. And it would make things simpler for the
> > frontend code.
> >
> > > Yao> I don't know ether. I can't think of a case that
> > > Yao> multiple inferiors share a single pspace.
> > >
> > > Thinking about it more -- maybe an inferior which just vforked?
> >
> > Since we're still not sure if a list is needed or not, I kept
> > the patch returning a list, to be safe.
> >
> > > Marc> I was going to update the doc, but when I looked at it
> > > Marc> I realized it was completely out-of-date with respect to
> > > Marc> -break-list _and_ that the MI output itself does not to have
> > > Marc> the right content in the 'hdr' part. I wasn't
> sure if I can
> > > Marc> change such MI output or not due to backwards compatibility.
> > >
> > > The very best thing would be to fix the -break-list documentation.
> > >
> > > But, I understand if you don't want to do that. But
> maybe you could
> > > file a bug report in this case.
> >
> > Thanks for understanding. I've opened
> > Bug 14651 - [doc] -break-list command not documented properly
> > http://sourceware.org/bugzilla/show_bug.cgi?id=14651
> >
> > > However, I think you should still update the docs for your change.
> >
> > The below patch now does this.
> >
> > > I think changing the 'hdr' part of the MI output is ok, if it
> > > is useful to you somehow. I think it has to be done with care to
> > > avoid messing up the CLI output.
> >
> > I haven't ventured down that path :)
> >
> > > Marc> I had forgotten to update the tests to take into
> > > consideration the
> > > Marc> new parameter. Those tests use -break-list in
> > multiple places.
> > > Marc> The new patch below does update the testsuite.
> > > Marc> Only one new regression happens:
> > >
> > > Marc> FAIL: gdb.mi/mi-nsmoribund.exp: thread specific
> > > breakpoint at thread_function
> > >
> > > Marc> This was a latent problem where the unexpected 'thread'
> > > field was
> > > Marc> being sucked into a '.*' pattern, which hid the
> > error. Because
> > > Marc> the problem is in lib/mi-support.exp it is not as
> > simple to fix.
> > > Marc> Since the problem is not caused by my patch, I suggest
> > > not to fix
> > > Marc> it right away.
> > >
> > > We try not to let any regressions in.
> > > So I think it does need to be fixed before this patch can go in.
> >
> > I've updated that test and fixed the regression.
> >
> > > Marc> + /* Go through list in reverse order to print
> > inferiors ids in
> > > Marc> + increasing order. */
> > > Marc> + for (index = len - 1; index >= 0; index--)
> > >
> > > It isn't clear to me that it is reliable to assume that
> the inferior
> > > list is sorted.
> > >
> > > However, this shouldn't really matter for clients, either.
> >
> > I didn't like seeing "inf 4, 3, 2 ,1", but I agree that the order
> > is not guaranteed anyway. Besides, we still don't know how
> > to actually
> > see a list of inferior for a single breakpoint :) I therefore
> > iterate over the VEC in whatever order it is.
> >
> > > Marc> + {
> > > Marc> + char mi_group[10];
> > > Marc> + sprintf (mi_group, "i%d", inf_num[index]);
> > >
> > > Blank line between declarations and code.
> >
> > Done.
> >
> > > Marc> + int inf_num[number_of_inferiors ()];
> > >
> > > I think you'd have to use alloca here -- but it is better
> > to use a VEC
> > > anyway.
> >
> > Nice. It is the first time I use the VEC macros. Done.
> >
> > No regressions with this patch.
> >
> > Thanks!
> >
> > Marc
> >
> >
> > 2012-10-01 Marc Khouzam <marc.khouzam@ericsson.com>
> >
> > * breakpoint.c (print_one_breakpoint_location): Add MI
> > field 'thread-groups' when printing a breakpoint.
> > (output_thread_groups): New function.
> >
> > 2012-10-01 Marc Khouzam <marc.khouzam@ericsson.com>
> >
> > * gdb.mi/mi-break.exp: Expect new 'thread-groups' field.
> > * gdb.mi/mi-nsmoribund.exp: Expect new
> 'thread-groups' field.
> > Also handle 'thread' field.
> > * gdb.mi/mi-simplerun.exp: Expect new 'thread-groups' field.
> > * gdb.mi/mi-watch.exp: Ditto.
> > * gdb.mi/mi2-break.exp: Ditto.
> > * gdb.mi/mi2-simplerun.exp: Ditto.
> > * gdb.mi/mi2-watch.exp: Ditto.
> > * lib/mi-support.exp: Ditto.
> >
> > 2012-10-01 Marc Khouzam <marc.khouzam@ericsson.com>
> >
> > * gdb.texinfo (GDB/MI Breakpoint Commands): Document new
> > `thread-group' field when printing a breakpoint in MI.
> >
> > ### Eclipse Workspace Patch 1.0
> > #P src
> > Index: gdb/breakpoint.c
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/breakpoint.c,v
> > retrieving revision 1.707
> > diff -u -r1.707 breakpoint.c
> > --- gdb/breakpoint.c 26 Sep 2012 16:35:59 -0000 1.707
> > +++ gdb/breakpoint.c 1 Oct 2012 16:04:16 -0000
> > @@ -5778,6 +5778,51 @@
> > return bptypes[(int) type].description;
> > }
> >
> > +DEF_VEC_I(int);
> > +
> > +/* For MI, output a field named 'thread-groups' with a list
> > as the value.
> > + For CLI, prefix the list with the string 'inf'. */
> > +
> > +static void
> > +output_thread_groups (struct ui_out *uiout,
> > + const char *field_name,
> > + VEC(int) *inf_num,
> > + int mi_only)
> > +{
> > + struct cleanup *back_to =
> > make_cleanup_ui_out_list_begin_end (uiout,
> > +
> > field_name);
> > + int is_mi = ui_out_is_mi_like_p (uiout);
> > + int inf;
> > + int i;
> > +
> > + /* For backward compatibility, don't display inferiors in
> > CLI unless
> > + there are several. Always display them for MI. */
> > + if (!is_mi && mi_only)
> > + return;
> > +
> > + for (i = 0; VEC_iterate (int, inf_num, i, inf); ++i)
> > + {
> > + if (is_mi)
> > + {
> > + char mi_group[10];
> > +
> > + sprintf (mi_group, "i%d", inf);
> > + ui_out_field_string (uiout, NULL, mi_group);
> > + }
> > + else
> > + {
> > + if (i == 0)
> > + ui_out_text (uiout, " inf ");
> > + else
> > + ui_out_text (uiout, ", ");
> > +
> > + ui_out_text (uiout, plongest (inf));
> > + }
> > + }
> > +
> > + do_cleanups (back_to);
> > +}
> > +
> > /* Print B to gdb_stdout. */
> >
> > static void
> > @@ -5929,35 +5974,30 @@
> > }
> >
> >
> > - /* For backward compatibility, don't display inferiors
> unless there
> > - are several. */
> > - if (loc != NULL
> > - && !header_of_multiple
> > - && (allflag
> > - || (!gdbarch_has_global_breakpoints (target_gdbarch)
> > - && (number_of_program_spaces () > 1
> > - || number_of_inferiors () > 1)
> > - /* LOC is for existing B, it cannot be in
> > - moribund_locations and thus having NULL OWNER. */
> > - && loc->owner->type != bp_catchpoint)))
> > + if (loc != NULL && !header_of_multiple)
> > {
> > struct inferior *inf;
> > - int first = 1;
> > + VEC(int) *inf_num = NULL;
> > + int mi_only = 1;
> >
> > - for (inf = inferior_list; inf != NULL; inf = inf->next)
> > + ALL_INFERIORS (inf)
> > {
> > if (inf->pspace == loc->pspace)
> > - {
> > - if (first)
> > - {
> > - first = 0;
> > - ui_out_text (uiout, " inf ");
> > - }
> > - else
> > - ui_out_text (uiout, ", ");
> > - ui_out_text (uiout, plongest (inf->num));
> > - }
> > + VEC_safe_push (int, inf_num, inf->num);
> > }
> > +
> > + /* For backward compatibility, don't display inferiors
> > in CLI unless
> > + there are several. Always display for MI. */
> > + if (allflag
> > + || (!gdbarch_has_global_breakpoints (target_gdbarch)
> > + && (number_of_program_spaces () > 1
> > + || number_of_inferiors () > 1)
> > + /* LOC is for existing B, it cannot be in
> > + moribund_locations and thus having NULL OWNER. */
> > + && loc->owner->type != bp_catchpoint))
> > + mi_only = 0;
> > + output_thread_groups (uiout, "thread-groups", inf_num,
> > mi_only);
> > + VEC_free (int, inf_num);
> > }
> >
> > if (!part_of_multiple)
> > @@ -7902,8 +7942,6 @@
> > catch_load_or_unload (arg, from_tty, 0, command);
> > }
> >
> > -DEF_VEC_I(int);
> > -
> > /* An instance of this type is used to represent a syscall
> > catchpoint.
> > It includes a "struct breakpoint" as a kind of base class; users
> > downcast to "struct breakpoint *" when needed. A breakpoint is
> > Index: gdb/doc/gdb.texinfo
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
> > retrieving revision 1.1012
> > diff -u -r1.1012 gdb.texinfo
> > --- gdb/doc/gdb.texinfo 21 Sep 2012 01:46:42 -0000 1.1012
> > +++ gdb/doc/gdb.texinfo 1 Oct 2012 16:04:18 -0000
> > @@ -27763,7 +27763,8 @@
> > -> -break-insert main
> > <- ^done,bkpt=@{number="1",type="breakpoint",disp="keep",
> > enabled="y",addr="0x08048564",func="main",file="myprog.c",
> > - fullname="/home/nickrob/myprog.c",line="68",times="0"@}
> > +
> fullname="/home/nickrob/myprog.c",line="68",thread-groups=["i1"],
> > + times="0"@}
> > <- (gdb)
> > @end smallexample
> >
> > @@ -27887,7 +27888,8 @@
> > -break-insert main
> > ^done,bkpt=@{number="1",type="breakpoint",disp="keep",
> > enabled="y",addr="0x000100d0",func="main",file="hello.c",
> > -fullname="/home/foo/hello.c",line="5",times="0"@}
> > +fullname="/home/foo/hello.c",line="5",thread-groups=["i1"]
> > +,times="0"@}
> > (gdb)
> > -break-after 1 3
> > ~
> > @@ -27903,7 +27905,7 @@
> > @{width="40",alignment="2",col_name="what",colhdr="What"@}],
> > body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
> >
> > addr="0x000100d0",func="main",file="hello.c",fullname="/home/f
> > oo/hello.c",
> > -line="5",times="0",ignore="3"@}]@}
> > +line="5",thread-groups=["i1"],times="0",ignore="3"@}]@}
> > (gdb)
> > @end smallexample
> >
> > @@ -27939,7 +27941,8 @@
> > -break-insert main
> > ^done,bkpt=@{number="1",type="breakpoint",disp="keep",
> > enabled="y",addr="0x000100d0",func="main",file="hello.c",
> > -fullname="/home/foo/hello.c",line="5",times="0"@}
> > +fullname="/home/foo/hello.c",line="5",thread-groups=["i1"],
> > +times="0"@}
> > (gdb)
> > -break-commands 1 "print v" "continue"
> > ^done
> > @@ -27981,7 +27984,7 @@
> > @{width="40",alignment="2",col_name="what",colhdr="What"@}],
> > body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
> >
> > addr="0x000100d0",func="main",file="hello.c",fullname="/home/f
> > oo/hello.c",
> > -line="5",cond="1",times="0",ignore="3"@}]@}
> > +line="5",cond="1",thread-groups=["i1"],times="0",ignore="3"@}]@}
> > (gdb)
> > @end smallexample
> >
> > @@ -28053,7 +28056,7 @@
> > @{width="40",alignment="2",col_name="what",colhdr="What"@}],
> > body=[bkpt=@{number="2",type="breakpoint",disp="keep",enabled="n",
> >
> > addr="0x000100d0",func="main",file="hello.c",fullname="/home/f
> > oo/hello.c",
> > -line="5",times="0"@}]@}
> > +line="5",thread-groups=["i1"],times="0"@}]@}
> > (gdb)
> > @end smallexample
> >
> > @@ -28089,7 +28092,7 @@
> > @{width="40",alignment="2",col_name="what",colhdr="What"@}],
> > body=[bkpt=@{number="2",type="breakpoint",disp="keep",enabled="y",
> >
> > addr="0x000100d0",func="main",file="hello.c",fullname="/home/f
> > oo/hello.c",
> > -line="5",times="0"@}]@}
> > +line="5",thread-groups=["i1"],times="0"@}]@}
> > (gdb)
> > @end smallexample
> >
> > @@ -28170,14 +28173,15 @@
> >
> > ^done,bkpt=@{number="@var{number}",type="@var{type}",disp="del
> > "|"keep",
> >
> > enabled="y"|"n",addr="@var{hex}",func="@var{funcname}",file="@
> > var{filename}",
> >
> > fullname="@var{full_filename}",line="@var{lineno}",[thread="@v
> > ar{threadno},]
> > -times="@var{times}"@}
> > +thread-groups=["@var{group1}","@var{group2}"],times="@var{times}"@}
> > @end smallexample
> >
> > @noindent
> > where @var{number} is the @value{GDBN} number for this breakpoint,
> > @var{funcname} is the name of the function where the breakpoint was
> > inserted, @var{filename} is the name of the source file
> > which contains
> > -this function, @var{lineno} is the source line number within
> > that file
> > +this function, @var{lineno} is the source line number within
> > that file,
> > +@var{thread-groups} is the list of inferiors to which this
> > breakpoint applies,
> > and @var{times} the number of times that the breakpoint
> has been hit
> > (always 0 for -break-insert but may be greater for
> > -break-info or -break-list
> > which use the same output).
> > @@ -28196,11 +28200,13 @@
> > (gdb)
> > -break-insert main
> > ^done,bkpt=@{number="1",addr="0x0001072c",file="recursive2.c",
> > -fullname="/home/foo/recursive2.c,line="4",times="0"@}
> > +fullname="/home/foo/recursive2.c,line="4",thread-groups=["i1"],
> > +times="0"@}
> > (gdb)
> > -break-insert -t foo
> > ^done,bkpt=@{number="2",addr="0x00010774",file="recursive2.c",
> > -fullname="/home/foo/recursive2.c,line="11",times="0"@}
> > +fullname="/home/foo/recursive2.c,line="11",thread-groups=["i1"],
> > +times="0"@}
> > (gdb)
> > -break-list
> > ^done,BreakpointTable=@{nr_rows="2",nr_cols="6",
> > @@ -28212,15 +28218,18 @@
> > @{width="40",alignment="2",col_name="what",colhdr="What"@}],
> > body=[bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
> > addr="0x0001072c", func="main",file="recursive2.c",
> > -fullname="/home/foo/recursive2.c,"line="4",times="0"@},
> > +fullname="/home/foo/recursive2.c,"line="4",thread-groups=["i1"],
> > +times="0"@},
> > bkpt=@{number="2",type="breakpoint",disp="del",enabled="y",
> > addr="0x00010774",func="foo",file="recursive2.c",
> > -fullname="/home/foo/recursive2.c",line="11",times="0"@}]@}
> > +fullname="/home/foo/recursive2.c",line="11",thread-groups=["i1"],
> > +times="0"@}]@}
> > (gdb)
> > @c -break-insert -r foo.*
> > @c ~int foo(int, int);
> > @c ^done,bkpt=@{number="3",addr="0x00010774",file="recursive2.c,
> > -@c "fullname="/home/foo/recursive2.c",line="11",times="0"@}
> > +@c
> "fullname="/home/foo/recursive2.c",line="11",thread-groups=["i1"],
> > +@c times="0"@}
> > @c (gdb)
> > @end smallexample
> >
> > @@ -28250,6 +28259,8 @@
> > @item What
> > logical location of the breakpoint, expressed by function
> name, file
> > name, line number
> > +@item Thread-groups
> > +list of inferiors to which this breakpoint applies
> > @item Times
> > number of times the breakpoint has been hit
> > @end table
> > @@ -28277,7 +28288,7 @@
> > addr="0x000100d0",func="main",file="hello.c",line="5",times="0"@},
> > bkpt=@{number="2",type="breakpoint",disp="keep",enabled="y",
> >
> > addr="0x00010114",func="foo",file="hello.c",fullname="/home/fo
> > o/hello.c",
> > -line="13",times="0"@}]@}
> > +line="13",thread-groups=["i1"],times="0"@}]@}
> > (gdb)
> > @end smallexample
> >
> > Index: gdb/testsuite/gdb.mi/mi-break.exp
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-break.exp,v
> > retrieving revision 1.36
> > diff -u -r1.36 mi-break.exp
> > --- gdb/testsuite/gdb.mi/mi-break.exp 10 Jul 2012 15:32:51
> > -0000 1.36
> > +++ gdb/testsuite/gdb.mi/mi-break.exp 1 Oct 2012 16:04:18 -0000
> > @@ -93,7 +93,7 @@
> > "insert temp breakpoint at
> > \"<fullfilename>\":\$line_callee4_head"
> >
> > mi_gdb_test "666-break-list" \
> > -
> > "666\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr
> =\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhd
> r=> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> > olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=\"1\",type=\"breakpoint\",disp=\"del\",enabled=\"y\",addr=>
> \"$hex\",func=\"main\",file=\".*basics.c\",${fullname},line=\"
> $line_main_body\",times=\"0\",original-location=\".*\"\}.*> \\\]\}" \
> > +
> > "666\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr
> =\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhd
> r=> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> > olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=\"1\",type=\"breakpoint\",disp=\"del\",enabled=\"y\",addr=>
> \"$hex\",func=\"main\",file=\".*basics.c\",${fullname},line=\"
> $line_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0>
> \",original-location=\".*\"\}.*\\\]\}" \
> > "list of breakpoints"
> >
> > mi_gdb_test "777-break-delete" \
> > @@ -142,7 +142,7 @@
> >
> > setup_kfail "*-*-*" mi/14270
> > mi_gdb_test "166-break-list" \
> > -
> > "1\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\
> \\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=
> > \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=> \"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$
> > hex\",func=\"main\",file=\".*basics.c\",line=\"$line_main_body
> > \",times=\"0\"\},.*\}\\\]\}" \
> > +
> > "1\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\
> \\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=
> > \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=> \"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$
> > hex\",func=\"main\",file=\".*basics.c\",line=\"$line_main_body
> > \",thread-groups=\\\[\"i1\"\\\],times=\"0\"\},.*\}\\\]\}" \
> > "list of breakpoints"
> >
> > mi_gdb_test "177-break-delete" \
> > @@ -190,7 +190,7 @@
> > global line_callee2_body
> >
> > mi_gdb_test "-break-insert -d basics.c:callee2" \
> > -
> > "\\^done,bkpt=\{number=\"6\",type=\"breakpoint\",disp=\"keep\"
> ,enabled=\"n\",addr=\"$hex\",func=\"callee2\",file=\".*basics.
> c> \",fullname=\".*\",line=\"$line_callee2_body\",times=\"0\",ori
> ginal-location=\".*\"\}" \
> > +
> > "\\^done,bkpt=\{number=\"6\",type=\"breakpoint\",disp=\"keep\"
> ,enabled=\"n\",addr=\"$hex\",func=\"callee2\",file=\".*basics.
> c> \",fullname=\".*\",line=\"$line_callee2_body\",thread-groups=\
> \\[\"i1\"\\\],times=\"0\",original-location=\".*\"\}" \
> > "test disabled creation"
> >
> > mi_gdb_test "-break-delete" \
> > @@ -211,7 +211,7 @@
> > "breakpoint commands: set commands"
> >
> > mi_gdb_test "-break-info 7" \
> > -
> > "\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\\\
> [\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=>
> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=> \"7\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$
> > hex\",func=\"callee2\",file=\".*basics.c\",${fullname},line=\"
> $line_callee2_body\",times=\"0\",script=\{\"print 10\",>
> \"continue\"\},original-location=\".*\"\}.*\\\]\}" \
> > +
> > "\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\\\
> [\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=>
> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=> \"7\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$
> > hex\",func=\"callee2\",file=\".*basics.c\",${fullname},line=\"
> $line_callee2_body\",thread-groups=\\\[\"i1\"\\\],times=\"0>
> \",script=\{\"print
> > 10\",\"continue\"\},original-location=\".*\"\}.*\\\]\}" \
> > "breakpoint commands: check that commands are set"
> >
> > mi_gdb_test "-break-commands 7" \
> > Index: gdb/testsuite/gdb.mi/mi-nsmoribund.exp
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-nsmoribund.exp,v
> > retrieving revision 1.17
> > diff -u -r1.17 mi-nsmoribund.exp
> > --- gdb/testsuite/gdb.mi/mi-nsmoribund.exp 10 Jul 2012
> > 15:32:51 -0000 1.17
> > +++ gdb/testsuite/gdb.mi/mi-nsmoribund.exp 1 Oct 2012
> > 16:04:18 -0000
> > @@ -79,8 +79,11 @@
> > mi_delete_breakpoints
> >
> > # Recreate the same breakpoint, but this time, specific to
> thread 5.
> > -mi_create_breakpoint "-p 5 $srcfile:$bkpt_line" 3 keep
> > thread_function .* .* .* \
> > - "thread specific breakpoint at thread_function"
> > +mi_gdb_test "234-break-insert -p 5 $srcfile:$bkpt_line" \
> > +
> > "234\\^done,bkpt=\{number=\"3\",type=\"breakpoint\",disp=\"kee
> p\",enabled=\"y\",addr=\".*\",\
> > +
> > func=\"thread_function\",file=\".*\",fullname=\".*\",line=\".*
> > \",thread-groups=\\\[\".*\"\\\],\
> > +
> > thread=\"5\",thread=\"5\",times=\"0\",original-location=\".*\"\}" \
> > + "thread specific breakpoint at thread_function"
> >
> > # Resume all threads. Only thread 5 should report a stop.
> >
> > Index: gdb/testsuite/gdb.mi/mi-simplerun.exp
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-simplerun.exp,v
> > retrieving revision 1.29
> > diff -u -r1.29 mi-simplerun.exp
> > --- gdb/testsuite/gdb.mi/mi-simplerun.exp 10 Jul 2012
> > 15:32:51 -0000 1.29
> > +++ gdb/testsuite/gdb.mi/mi-simplerun.exp 1 Oct 2012
> > 16:04:18 -0000
> > @@ -79,7 +79,7 @@
> > "insert breakpoint at
> > \"<fullfilename>\":\$line_callee4_head"
> >
> > mi_gdb_test "204-break-list" \
> > -
> > "204\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\"
> ,addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",times=\"0\",original-location=\".*\"\},.*\
> }\\\]\}" \
> > +
> > "204\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\"
> ,addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0\",o
> riginal-location=\".*\"\},.*\}\\\]\}" \
> > "list of breakpoints"
> >
> > mi_gdb_test "205-break-disable 2 3 4" \
> > Index: gdb/testsuite/gdb.mi/mi-watch.exp
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-watch.exp,v
> > retrieving revision 1.32
> > diff -u -r1.32 mi-watch.exp
> > --- gdb/testsuite/gdb.mi/mi-watch.exp 10 Jul 2012 15:32:52
> > -0000 1.32
> > +++ gdb/testsuite/gdb.mi/mi-watch.exp 1 Oct 2012 16:04:18 -0000
> > @@ -58,7 +58,7 @@
> > "break-watch operation"
> >
> > mi_gdb_test "222-break-list" \
> > -
> > "222\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr
> =\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhd
> r=> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> > olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=\"2\",type=\".*watchpoint\",disp=\"keep\",enabled=\"y\",what
> => \"C\",times=\"0\",original-location=\"C\"\}\\\]\}" \
> > +
> > "222\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr
> =\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhd
> r=> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> > olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=\"2\",type=\".*watchpoint\",disp=\"keep\",enabled=\"y\",what
> => \"C\",thread-groups=\\\[\"i1\"\\\],times=\"0\",original-locati
> on=\"C\"\}\\\]\}" \
> > "list of watchpoints"
> >
> > }
> > @@ -82,7 +82,7 @@
> > "break-watch -a operation"
> >
> > mi_gdb_test "444-break-list" \
> > -
> > "444\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"3\",type=\"watchpoint\",disp=\"del\",enabled=\"y\",
> addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",times=\"0\"\},.*\}\\\]\}" \
> > +
> > "444\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"3\",type=\"watchpoint\",disp=\"del\",enabled=\"y\",
> addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0\"\}
> > ,.*\}\\\]\}" \
> > "list of watchpoints awatch"
> >
> > mi_gdb_test "777-break-delete 3" \
> > @@ -109,7 +109,7 @@
> > "break-insert -r operation"
> >
> > mi_gdb_test "300-break-list" \
> > -
> > "300\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\"
> ,addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",times=\"0\"\},.*\}\\\}\}" \
> > +
> > "300\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\"
> ,addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0\"\}
> > ,.*\}\\\}\}" \
> > "list of breakpoints"
> >
> > mi_gdb_test "177-break-delete 4" \
> > Index: gdb/testsuite/gdb.mi/mi2-break.exp
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi2-break.exp,v
> > retrieving revision 1.18
> > diff -u -r1.18 mi2-break.exp
> > --- gdb/testsuite/gdb.mi/mi2-break.exp 10 Jul 2012 15:32:52
> > -0000 1.18
> > +++ gdb/testsuite/gdb.mi/mi2-break.exp 1 Oct 2012 16:04:18 -0000
> > @@ -92,7 +92,7 @@
> > "insert temp breakpoint at
> > \"<fullfilename>\":\$line_callee4_head"
> >
> > mi_gdb_test "666-break-list" \
> > -
> > "666\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr
> =\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhd
> r=> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> > olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=\"1\",type=\"breakpoint\",disp=\"del\",enabled=\"y\",addr=>
> \"$hex\",func=\"main\",file=\".*basics.c\",${fullname},line=\"
> $line_main_body\",times=\"0\",original-location=\".*\"\}.*> \\\]\}" \
> > +
> > "666\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr
> =\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhd
> r=> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> > olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=\"1\",type=\"breakpoint\",disp=\"del\",enabled=\"y\",addr=>
> \"$hex\",func=\"main\",file=\".*basics.c\",${fullname},line=\"
> $line_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0>
> \",original-location=\".*\"\}.*\\\]\}" \
> > "list of breakpoints"
> >
> > mi_gdb_test "777-break-delete" \
> > @@ -142,7 +142,7 @@
> >
> > setup_xfail "*-*-*"
> > mi_gdb_test "166-break-list" \
> > -
> > "1\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\
> \\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=
> > \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=> \"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$
> > hex\",func=\"main\",file=\".*basics.c\",${fullname},line=\"$li
> ne_main_body\",times=\"0\"\},.*\}\\\]\}" \
> > +
> > "1\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr=\
> \\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhdr=
> > \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=> \"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$
> > hex\",func=\"main\",file=\".*basics.c\",${fullname},line=\"$li
> ne_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0\"\},.*>
> \}\\\]\}" \
> > "list of breakpoints"
> >
> > mi_gdb_test "177-break-delete" \
> > Index: gdb/testsuite/gdb.mi/mi2-simplerun.exp
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi2-simplerun.exp,v
> > retrieving revision 1.20
> > diff -u -r1.20 mi2-simplerun.exp
> > --- gdb/testsuite/gdb.mi/mi2-simplerun.exp 10 Jul 2012
> > 15:32:52 -0000 1.20
> > +++ gdb/testsuite/gdb.mi/mi2-simplerun.exp 1 Oct 2012
> > 16:04:18 -0000
> > @@ -79,7 +79,7 @@
> > "insert breakpoint at
> > \"<fullfilename>\":\$line_callee4_head"
> >
> > mi_gdb_test "204-break-list" \
> > -
> > "204\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\"
> ,addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",times=\"0\",original-location=\".*\"\},.*\
> }\\\]\}" \
> > +
> > "204\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\"
> ,addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0\",o
> riginal-location=\".*\"\},.*\}\\\]\}" \
> > "list of breakpoints"
> >
> > mi_gdb_test "205-break-disable 2 3 4" \
> > Index: gdb/testsuite/gdb.mi/mi2-watch.exp
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi2-watch.exp,v
> > retrieving revision 1.23
> > diff -u -r1.23 mi2-watch.exp
> > --- gdb/testsuite/gdb.mi/mi2-watch.exp 10 Jul 2012 15:32:52
> > -0000 1.23
> > +++ gdb/testsuite/gdb.mi/mi2-watch.exp 1 Oct 2012 16:04:18 -0000
> > @@ -57,7 +57,7 @@
> > "break-watch operation"
> >
> > mi_gdb_test "222-break-list" \
> > -
> > "222\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr
> =\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhd
> r=> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> > olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=\"2\",type=\".*watchpoint\",disp=\"keep\",enabled=\"y\",what
> => \"C\",times=\"0\",original-location=\"C\"\}\\\]\}" \
> > +
> > "222\\\^done,BreakpointTable=\{nr_rows=\".\",nr_cols=\".\",hdr
> =\\\[\{width=\".*\",alignment=\".*\",col_name=\"number\",colhd
> r=> \"Num\"\}.*colhdr=\"Type\".*colhdr=\"Disp\".*colhdr=\"Enb\".*c
> > olhdr=\"Address\".*colhdr=\"What\".*\\\],body=\\\[bkpt=\{numbe
> r=\"2\",type=\".*watchpoint\",disp=\"keep\",enabled=\"y\",what
> => \"C\",thread-groups=\\\[\"i1\"\\\],times=\"0\",original-locati
> on=\"C\"\}\\\]\}" \
> > "list of watchpoints"
> >
> > }
> > @@ -81,7 +81,7 @@
> > "break-watch -a operation"
> >
> > mi_gdb_test "444-break-list" \
> > -
> > "444\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"3\",type=\"watchpoint\",disp=\"del\",enabled=\"y\",
> addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",times=\"0\"\},.*\}\\\]\}" \
> > +
> > "444\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"3\",type=\"watchpoint\",disp=\"del\",enabled=\"y\",
> addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0\"\}
> > ,.*\}\\\]\}" \
> > "list of watchpoints awatch"
> >
> > mi_gdb_test "777-break-delete 3" \
> > @@ -108,7 +108,7 @@
> > "break-insert -r operation"
> >
> > mi_gdb_test "300-break-list" \
> > -
> > "300\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\"
> ,addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",times=\"0\"\},.*\}\\\}\}" \
> > +
> > "300\\^done,BreakpointTable=\{.*,hdr=\\\[.*\\\],body=\\\[bkpt=
> > \{number=\"5\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\"
> ,addr=\"$hex\",func=\"main\",file=\".*basics.c\",line=>
> \"$line_main_body\",thread-groups=\\\[\"i1\"\\\],times=\"0\"\}
> > ,.*\}\\\}\}" \
> > "list of breakpoints"
> >
> > mi_gdb_test "177-break-delete 4" \
> > Index: gdb/testsuite/lib/mi-support.exp
> > ===================================================================
> > RCS file: /cvs/src/src/gdb/testsuite/lib/mi-support.exp,v
> > retrieving revision 1.112
> > diff -u -r1.112 mi-support.exp
> > --- gdb/testsuite/lib/mi-support.exp 25 Jul 2012 20:19:56
> > -0000 1.112
> > +++ gdb/testsuite/lib/mi-support.exp 1 Oct 2012 16:04:18 -0000
> > @@ -923,7 +923,7 @@
> >
> > set test "mi runto $func"
> > mi_gdb_test "200-break-insert -t $func" \
> > -
> > "200\\^done,bkpt=\{number=\"\[0-9\]+\",type=\"breakpoint\",dis
> p=\"del\",enabled=\"y\",addr=\"$hex\",func=\"$func\(\\\(.*>
> \\\)\)?\",file=\".*\",line=\"\[0-9\]*\",times=\"0\",original-l
> ocation=\".*\"\}" \
> > +
> > "200\\^done,bkpt=\{number=\"\[0-9\]+\",type=\"breakpoint\",dis
> p=\"del\",enabled=\"y\",addr=\"$hex\",func=\"$func\(\\\(.*>
> \\\)\)?\",file=\".*\",line=\"\[0-9\]*\",thread-groups=\\\[\"i1
> > \"\\\],times=\"0\",original-location=\".*\"\}" \
> > "breakpoint at $func"
> >
> > if {![regexp {number="[0-9]+"} $expect_out(buffer) str]
> > @@ -1205,9 +1205,9 @@
> >
> > # Creates a breakpoint and checks the reported fields are
> as expected
> > proc mi_create_breakpoint { location number disp func file
> > line address test } {
> > - verbose -log "Expecting:
> > 222\\^done,bkpt=\{number=\"$number\",type=\"breakpoint\",disp=
> > \"$disp\",enabled=\"y\",addr=\"$address\",func=\"$func\",file=
> > \"$file\",fullname=\".*\",line=\"$line\",times=\"0\",original-
> > location=\".*\"\}"
> > + verbose -log "Expecting:
> > 222\\^done,bkpt=\{number=\"$number\",type=\"breakpoint\",disp=
> > \"$disp\",enabled=\"y\",addr=\"$address\",func=\"$func\",file=
> > \"$file\",fullname=\".*\",line=\"$line\",thread-groups=\\\[\".
> > *\"\\\],times=\"0\",original-location=\".*\"\}"
> > mi_gdb_test "222-break-insert $location" \
> > -
> > "222\\^done,bkpt=\{number=\"$number\",type=\"breakpoint\",disp
> =\"$disp\",enabled=\"y\",addr=\"$address\",func=\"$func\",file
> => \"$file\",fullname=\".*\",line=\"$line\",times=\"0\",original-
> > location=\".*\"\}" \
> > +
> > "222\\^done,bkpt=\{number=\"$number\",type=\"breakpoint\",disp
> =\"$disp\",enabled=\"y\",addr=\"$address\",func=\"$func\",file
> => \"$file\",fullname=\".*\",line=\"$line\",thread-groups=\\\[\".
> > *\"\\\],times=\"0\",original-location=\".*\"\}" \
> > $test
> > }
> >
> > @@ -1228,7 +1228,7 @@
> > set file [lindex $item 3]
> > set line [lindex $item 4]
> > set address [lindex $item 5]
> > - set body
> > "${body}bkpt=\{number=\"$number\",type=\"breakpoint\",disp=\"$
> disp\",enabled=\"y\",addr=\"$address\",func=\"$func\",file=\".
> *> $file\",${fullname},line=\"$line\",times=\"0\",original-locati
> on=\".*\"\}"
> > + set body
> > "${body}bkpt=\{number=\"$number\",type=\"breakpoint\",disp=\"$
> disp\",enabled=\"y\",addr=\"$address\",func=\"$func\",file=\".
> *> $file\",${fullname},line=\"$line\",thread-groups=\\\[\"i1\"\\\
> ],times=\"0\",original-location=\".*\"\}"
> > set first 0
> > }
> >
>