public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Johnson Sun <j3.soon777@gmail.com>
To: gdb-patches@sourceware.org
Cc: j3.soon777@gmail.com
Subject: [PATCH 2/3] [gdb/python] Fix gdb.python/py-finish-breakpoint-deletion.exp for Bug 18655
Date: Wed, 21 Sep 2022 01:24:27 +0800	[thread overview]
Message-ID: <20220920172426.90659-3-j3.soon777@gmail.com> (raw)
In-Reply-To: <20220920172426.90659-1-j3.soon777@gmail.com>

This removes the KFAIL in the testcase, and fixes the bug by setting the
correct disposition type for deletion.

The original code fails since it does not correctly delete the temporary
FinishBreakpoints in `gdb/python/py-finishbreakpoint.c':

	/* Can't delete it here, but it will be removed at the next stop.  */
	disable_breakpoint (bp_obj->bp);
	gdb_assert (bp_obj->bp->disposition == disp_del);

The code above aims to delete the breakpoint on the next hit by setting the
disposition to `disp_del'. However, the FinishBreakpoint is disabled, so it
will never be hit (thus never be deleted before the program stops).

The fix only consists of a single line, setting the disposition to
`disp_del_at_next_stop':

	bp_obj->bp->disposition = disp_del_at_next_stop;

The code above allows the breakpoint to be deleted in `breakpoint_auto_delete':

	for (breakpoint *b : all_breakpoints_safe ())
	  if (b->disposition == disp_del_at_next_stop)
	    delete_breakpoint (b);

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18655
---
 gdb/python/py-finishbreakpoint.c                           | 1 +
 gdb/testsuite/gdb.python/py-finish-breakpoint-deletion.exp | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/python/py-finishbreakpoint.c b/gdb/python/py-finishbreakpoint.c
index c80096f6810..a219bc82f15 100644
--- a/gdb/python/py-finishbreakpoint.c
+++ b/gdb/python/py-finishbreakpoint.c
@@ -146,6 +146,7 @@ bpfinishpy_post_stop_hook (struct gdbpy_breakpoint_object *bp_obj)
       /* Can't delete it here, but it will be removed at the next stop.  */
       disable_breakpoint (bp_obj->bp);
       gdb_assert (bp_obj->bp->disposition == disp_del);
+      bp_obj->bp->disposition = disp_del_at_next_stop;
     }
   catch (const gdb_exception &except)
     {
diff --git a/gdb/testsuite/gdb.python/py-finish-breakpoint-deletion.exp b/gdb/testsuite/gdb.python/py-finish-breakpoint-deletion.exp
index 778b53fbeda..ac5e5d8ac2e 100644
--- a/gdb/testsuite/gdb.python/py-finish-breakpoint-deletion.exp
+++ b/gdb/testsuite/gdb.python/py-finish-breakpoint-deletion.exp
@@ -43,5 +43,4 @@ gdb_test "source $pyfile" ".*Python script imported.*" \
          "import python scripts"
 gdb_test "python print (len(gdb.breakpoints()))" "2" "check modified BP count"
 gdb_test "continue" "Breakpoint.*at.*" "run until FinishBreakpoint stops"
-setup_kfail "gdb/18655" "*-*-*"
 gdb_test "python print (len(gdb.breakpoints()))" "2" "check BP count"
-- 
2.34.1


  parent reply	other threads:[~2022-09-20 17:29 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-20 17:24 [PATCH 0/3] [PR gdb/18655] Fix Python FinishBreakpoints not deleted bug Johnson Sun
2022-09-20 17:24 ` [PATCH 1/3] [gdb/testsuite] Add gdb.python/py-finish-breakpoint-deletion.exp for Bug 18655 Johnson Sun
2022-09-21 13:44   ` Bruno Larsen
2022-09-23  5:16     ` Johnson Sun
2022-09-20 17:24 ` Johnson Sun [this message]
2022-09-21 14:02   ` [PATCH 2/3] [gdb/python] Fix " Bruno Larsen
2022-09-20 17:24 ` [PATCH 3/3] [gdb/python] Replace gdbpy_should_stop with gdbpy_breakpoint_cond_says_stop Johnson Sun
2022-09-21 14:09   ` Bruno Larsen
2022-09-23  5:41 ` [PATCH v2] [PR python/18655] Fix deletion of FinishBreakpoints Johnson Sun
2022-09-23  8:32   ` Bruno Larsen
2022-09-23 20:16     ` Johnson Sun
2022-09-23 20:27   ` [PATCH v3] " Johnson Sun
2022-10-12  1:53     ` Simon Marchi
2022-10-20 17:34       ` Johnson Sun
2022-10-20 17:49         ` [PATCH v4] " Johnson Sun
2022-11-18 12:16           ` [PING] " Johnson Sun
2022-11-18 15:56           ` Simon Marchi
2022-09-23  6:00 ` [PATCH v2] [gdb/python] Replace gdbpy_should_stop with gdbpy_breakpoint_cond_says_stop Johnson Sun
2022-10-20 18:24   ` [PING] " Johnson Sun
2022-11-18 12:14     ` [PING^2] " Johnson Sun
2022-11-25 15:10       ` [PING^3] " Johnson Sun
2022-12-04 16:45         ` [PING^4] " Johnson Sun
2022-12-12 21:44           ` [PING^5] " Johnson Sun
2022-12-13  2:34             ` Simon Marchi

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=20220920172426.90659-3-j3.soon777@gmail.com \
    --to=j3.soon777@gmail.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).