Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Hui Zhu <hui_zhu@mentor.com>
To: gdb-patches ml <gdb-patches@sourceware.org>
Subject: [PATCH] Fix create pending breakpoint handle extra_string issue if not parse_condition_and_thread
Date: Sun, 24 Mar 2013 12:05:00 -0000	[thread overview]
Message-ID: <514E8D6C.2010606@mentor.com> (raw)

Hi,

I found that behavior is not right is create pending breakpoint handle extra_string issue if not parse_condition_and_thread.
This issue cannot be reproduce with normal interpreter command "b" because it create breakpoint with parse_condition_and_thread.
But mi command "-break-insert" have this issue, for example:
gdb/testsuite$ gdb -i mi gdb.base/pending
(gdb)
-break-insert -f -c k>0 "pendfunc1 if k == 0"
&"Function \"pendfunc1\" not defined.\n"
^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="<PENDING>",pending="pendfunc1 if k == 0",cond="k>0",times="0",original-location="pendfunc1 if k == 0"}
(gdb)
info b
&"info b\n"
~"Num     Type           Disp Enb Address    What\n"
~"1       breakpoint     keep y   <PENDING>  pendfunc1 if k == 0\n"
~"\tstop only if k>0\n"
^done
(gdb)
r
&"r\n"
~"Starting program: /home/teawater/gdb/bgdbno/gdb/testsuite/gdb.base/pending \n"
=thread-group-started,id="i1",pid="7861"
=thread-created,id="1",group-id="i1"
^running
*running,thread-id="all"
=library-loaded,id="/lib64/ld-linux-x86-64.so.2",target-name="/lib64/ld-linux-x86-64.so.2",host-name="/lib64/ld-linux-x86-64.so.2",symbols-loaded="0",thread-group="i1"
(gdb)
=library-loaded,id="/home/teawater/gdb/bgdbno/gdb/testsuite/gdb.base/pendshr.sl",target-name="/home/teawater/gdb/bgdbno/gdb/testsuite/gdb.base/pendshr.sl",host-name="/home/teawater/gdb/bgdbno/gdb/testsuite/gdb.base/pendshr.sl",symbols-loaded="0",thread-group="i1"
=library-loaded,id="/lib/x86_64-linux-gnu/libc.so.6",target-name="/lib/x86_64-linux-gnu/libc.so.6",host-name="/lib/x86_64-linux-gnu/libc.so.6",symbols-loaded="0",thread-group="i1"
=breakpoint-modified,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x00007ffff7bd8607",func="pendfunc1",file="../../../src/gdb/testsuite/gdb.base/pendshr.c",fullname="/home/teawater/gdb/src/gdb/testsuite/gdb.base/pendshr.c",line="22",thread-groups=["i1"],cond="k == 0",times="0",original-location="pendfunc1 if k == 0"}
=breakpoint-modified,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x00007ffff7bd8607",func="pendfunc1",file="../../../src/gdb/testsuite/gdb.base/pendshr.c",fullname="/home/teawater/gdb/src/gdb/testsuite/gdb.base/pendshr.c",line="22",thread-groups=["i1"],cond="k == 0",times="1",original-location="pendfunc1 if k == 0"}
*stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={addr="0x00007ffff7bd8607",func="pendfunc1",args=[{name="x",value="3"}],file="../../../src/gdb/testsuite/gdb.base/pendshr.c",fullname="/home/teawater/gdb/src/gdb/testsuite/gdb.base/pendshr.c",line="22"},thread-id="1",stopped-threads="all",core="6"
info b
&"info b\n"
~"Num     Type           Disp Enb Address            What\n"
~"1       breakpoint     keep y   0x00007ffff7bd8607 in pendfunc1 at ../../../src/gdb/testsuite/gdb.base/pendshr.c:22\n"
~"\tstop only if k == 0\n"
~"\tbreakpoint already hit 1 time\n"
^done
(gdb)

With 2 "info b", you can found that condition "k>0" is overwrite by "k==0".

So I post a patch to fix this issue.
Please help me review it.

Best,
Hui

2013-03-24  Hui Zhu  <hui@codesourcery.com>

	* breakpoint.c (create_breakpoint): Handle extra_string if
	parse_condition_and_thread.
	(addr_string_to_sals): Add check for pending breakpoints.

--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -9687,7 +9687,11 @@ create_breakpoint (struct gdbarch *gdbar
  
        b->addr_string = copy_arg;
        if (parse_condition_and_thread)
-	b->cond_string = NULL;
+        {
+	  b->cond_string = NULL;
+	  b->extra_string = NULL;
+	  b->condition_not_parsed = 1;
+	}
        else
  	{
  	  /* Create a private copy of condition string.  */
@@ -9697,11 +9701,17 @@ create_breakpoint (struct gdbarch *gdbar
  	      make_cleanup (xfree, cond_string);
  	    }
  	  b->cond_string = cond_string;
+	  /* Create a private copy of extra string.  */
+	  if (extra_string)
+	    {
+	      extra_string = xstrdup (extra_string);
+	      make_cleanup (xfree, extra_string);
+	    }
+	  b->extra_string = extra_string;
+	  b->condition_not_parsed = 0;
  	}
-      b->extra_string = NULL;
        b->ignore_count = ignore_count;
        b->disposition = tempflag ? disp_del : disp_donttouch;
-      b->condition_not_parsed = 1;
        b->enable_state = enabled ? bp_enabled : bp_disabled;
        if ((type_wanted != bp_breakpoint
             && type_wanted != bp_hardware_breakpoint) || thread != -1)
@@ -14166,7 +14176,8 @@ addr_string_to_sals (struct breakpoint *
  	 breakpoint being disabled, and don't want to see more
  	 errors.  */
        if (e.error == NOT_FOUND_ERROR
-	  && (b->condition_not_parsed
+	  && (b->condition_not_parsed
+	      || (b->loc == NULL || b->loc->shlib_disabled)
  	      || (b->loc && b->loc->shlib_disabled)
  	      || (b->loc && b->loc->pspace->executing_startup)
  	      || b->enable_state == bp_disabled))


             reply	other threads:[~2013-03-24  5:22 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-24 12:05 Hui Zhu [this message]
2013-03-25  0:53 ` Keith Seitz
2013-03-25  7:54   ` Hui Zhu
2013-03-25 16:14     ` Yao Qi
2013-03-25 16:27       ` Hui Zhu
2013-03-25 19:32     ` Tom Tromey
2013-03-25 19:58       ` Keith Seitz
2013-03-26 11:16         ` Hui Zhu
2013-04-05 19:18         ` Pedro Alves
2013-04-08  7:56           ` Keith Seitz
2013-04-08 17:54             ` Pedro Alves

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=514E8D6C.2010606@mentor.com \
    --to=hui_zhu@mentor.com \
    --cc=gdb-patches@sourceware.org \
    /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