This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFA 3/3] PR python/17698 - add Breakpoint.pending
- From: Tom Tromey <tom at tromey dot com>
- To: gdb-patches at sourceware dot org
- Cc: Tom Tromey <tom at tromey dot com>
- Date: Thu, 19 May 2016 16:06:03 -0600
- Subject: [RFA 3/3] PR python/17698 - add Breakpoint.pending
- Authentication-results: sourceware.org; auth=none
- References: <1463695563-4130-1-git-send-email-tom at tromey dot com>
This patch adds a "pending" attribute to gdb.Breakpoint.
Built and regtested on x86-64 Fedora 23.
2016-05-19 Tom Tromey <tom@tromey.com>
PR python/17698:
* NEWS: Update.
* python/py-breakpoint.c (bppy_get_pending): New function.
(breakpoint_object_getset): Add entry for "pending".
* breakpoint.h (pending_breakpoint_p): Declare.
* breakpoint.c (pending_breakpoint_p): New function.
2016-05-19 Tom Tromey <tom@tromey.com>
PR python/17698:
* python.texi (Breakpoints In Python): Document
Breakpoint.pending.
2016-05-19 Tom Tromey <tom@tromey.com>
PR python/17698:
* gdb.python/py-breakpoint.exp (test_bkpt_basic): Add "pending"
test.
(test_watchpoints): Likewise.
(test_bkpt_pending): New proc.
---
gdb/ChangeLog | 9 +++++++++
gdb/NEWS | 5 +++++
gdb/breakpoint.c | 8 ++++++++
gdb/breakpoint.h | 3 +++
gdb/doc/ChangeLog | 6 ++++++
gdb/doc/python.texi | 6 ++++++
gdb/python/py-breakpoint.c | 20 ++++++++++++++++++++
gdb/testsuite/ChangeLog | 8 ++++++++
gdb/testsuite/gdb.python/py-breakpoint.exp | 11 +++++++++++
9 files changed, 76 insertions(+)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a03d290..c8b54b4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
2016-05-19 Tom Tromey <tom@tromey.com>
+ PR python/17698:
+ * NEWS: Update.
+ * python/py-breakpoint.c (bppy_get_pending): New function.
+ (breakpoint_object_getset): Add entry for "pending".
+ * breakpoint.h (pending_breakpoint_p): Declare.
+ * breakpoint.c (pending_breakpoint_p): New function.
+
+2016-05-19 Tom Tromey <tom@tromey.com>
+
* python/py-breakpoint.c (bppy_get_visibility)
(gdbpy_breakpoint_created): Use user_breakpoint_p.
diff --git a/gdb/NEWS b/gdb/NEWS
index 3e8e7a1..4ca8fdd 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -48,6 +48,11 @@ maint info line-table REGEXP
maint selftest
Run any GDB unit tests that were compiled in.
+* Python Scripting
+
+ ** gdb.Breakpoint objects have a new attribute "pending", which
+ indicates whether the breakpoint is pending.
+
* Support for tracepoints and fast tracepoints on s390-linux and s390x-linux
was added in GDBserver, including JIT compiling fast tracepoint's
conditional expression bytecode into native code.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index d2dafef..6328b44 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -6791,6 +6791,14 @@ user_breakpoint_p (struct breakpoint *b)
return b->number > 0;
}
+/* See breakpoint.h. */
+
+int
+pending_breakpoint_p (struct breakpoint *b)
+{
+ return b->loc == NULL;
+}
+
/* Print information on user settable breakpoint (watchpoint, etc)
number BNUM. If BNUM is -1 print all user-settable breakpoints.
If ALLFLAG is non-zero, include non-user-settable breakpoints. If
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 054eab4..5f06772 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -1618,6 +1618,9 @@ extern int pc_at_non_inline_function (struct address_space *aspace,
extern int user_breakpoint_p (struct breakpoint *);
+/* Return true if this breakpoint is pending, false if not. */
+extern int pending_breakpoint_p (struct breakpoint *);
+
/* Attempt to determine architecture of location identified by SAL. */
extern struct gdbarch *get_sal_arch (struct symtab_and_line sal);
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index 3e9c35a..c9c4244 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,5 +1,11 @@
2016-05-19 Tom Tromey <tom@tromey.com>
+ PR python/17698:
+ * python.texi (Breakpoints In Python): Document
+ Breakpoint.pending.
+
+2016-05-19 Tom Tromey <tom@tromey.com>
+
* python.texi (Breakpoints In Python): Move table of types and
table of watchpoint types earlier in node.
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index 4847a14..0791a06 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -4673,6 +4673,12 @@ first command is @code{silent}. This is not reported by the
@code{silent} attribute.
@end defvar
+@defvar Breakpoint.pending
+This attribute is @code{True} if the breakpoint is pending, and
+@code{False} otherwise. @xref{Set Breaks}. This attribute is
+read-only.
+@end defvar
+
@anchor{python_breakpoint_thread}
@defvar Breakpoint.thread
If the breakpoint is thread-specific, this attribute holds the
diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c
index f86da8d..d925bdc 100644
--- a/gdb/python/py-breakpoint.c
+++ b/gdb/python/py-breakpoint.c
@@ -563,6 +563,24 @@ bppy_get_temporary (PyObject *self, void *closure)
Py_RETURN_FALSE;
}
+/* Python function to determine if the breakpoint is a pending
+ breakpoint. */
+
+static PyObject *
+bppy_get_pending (PyObject *self, void *closure)
+{
+ gdbpy_breakpoint_object *self_bp = (gdbpy_breakpoint_object *) self;
+
+ BPPY_REQUIRE_VALID (self_bp);
+
+ if (is_watchpoint (self_bp->bp))
+ Py_RETURN_FALSE;
+ if (pending_breakpoint_p (self_bp->bp))
+ Py_RETURN_TRUE;
+
+ Py_RETURN_FALSE;
+}
+
/* Python function to get the breakpoint's number. */
static PyObject *
bppy_get_number (PyObject *self, void *closure)
@@ -1053,6 +1071,8 @@ or None if no condition set."},
"Whether the breakpoint is visible to the user."},
{ "temporary", bppy_get_temporary, NULL,
"Whether this breakpoint is a temporary breakpoint."},
+ { "pending", bppy_get_pending, NULL,
+ "Whether this breakpoint is a pending breakpoint."},
{ NULL } /* Sentinel. */
};
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index a773c63..4242525 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2016-05-19 Tom Tromey <tom@tromey.com>
+
+ PR python/17698:
+ * gdb.python/py-breakpoint.exp (test_bkpt_basic): Add "pending"
+ test.
+ (test_watchpoints): Likewise.
+ (test_bkpt_pending): New proc.
+
2016-05-18 Simon Marchi <simon.marchi@ericsson.com>
* gdb.mi/mi-threads-interrupt.c: New file.
diff --git a/gdb/testsuite/gdb.python/py-breakpoint.exp b/gdb/testsuite/gdb.python/py-breakpoint.exp
index d1d1b22..4729733 100644
--- a/gdb/testsuite/gdb.python/py-breakpoint.exp
+++ b/gdb/testsuite/gdb.python/py-breakpoint.exp
@@ -46,6 +46,8 @@ proc test_bkpt_basic { } {
"<gdb.Breakpoint object at $hex>" "Check obj exists @main"
gdb_test "python print (blist\[0\].location)" \
"main." "Check breakpoint location @main"
+ gdb_test "python print (blist\[0\].pending)" "False" \
+ "Check pending status of main breakpoint"
set mult_line [gdb_get_line_number "Break at multiply."]
gdb_breakpoint ${mult_line}
@@ -264,6 +266,7 @@ proc test_watchpoints { } {
gdb_py_test_silent_cmd "python wp1 = gdb.Breakpoint (\"result\", type=gdb.BP_WATCHPOINT, wp_class=gdb.WP_WRITE )" \
"Set watchpoint" 0
+ gdb_test "python print wp1.pending" "False"
gdb_test "continue" \
".*\[Ww\]atchpoint.*result.*Old value = 0.*New value = 25.*main.*" \
"Test watchpoint write"
@@ -494,6 +497,13 @@ proc test_bkpt_address {} {
".*Breakpoint ($decimal)+ at .*$srcfile, line ($decimal)+\."
}
+proc test_bkpt_pending {} {
+ delete_breakpoints
+ gdb_breakpoint "nosuchfunction" allow-pending
+ gdb_test "python print (gdb.breakpoints()\[0\].pending)" "True" \
+ "Check pending status of pending breakpoint"
+}
+
test_bkpt_basic
test_bkpt_deletion
test_bkpt_cond_and_cmds
@@ -503,3 +513,4 @@ test_bkpt_internal
test_bkpt_eval_funcs
test_bkpt_temporary
test_bkpt_address
+test_bkpt_pending
--
2.5.5