From: Siva Chandra <sivachandra@google.com>
To: gdb-patches@sourceware.org
Subject: [RFC - Python Scripting] Add 'end' attribute to gdb.Symtab_and_line
Date: Mon, 21 May 2012 08:40:00 -0000 [thread overview]
Message-ID: <CAGyQ6gw7JP3Mz+nabiTGcnC4oP7d9iQ3W8miHOs3NnDyFqiF0g@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1488 bytes --]
Hello,
Attached is a patch which adds the 'end' attribute to
gdb.Symtab_and_line. Essentially, it exposes the 'end' field of
'struct symtab_and_line'.
Though I have named the new attribute 'end' in the attached patch, I
would like to discuss this. There is already an attribute 'pc' which
is described as "Indicates the current program counter address" in the
documentation. I do not think this description is accurate: 'pc' is
actually the begin address of the program counter address range for
the current source line. To indicate the right meaning of 'pc' and
the new 'end' attribute, should they be named 'start_pc' and 'end_pc'
respectively, at least in the python API?
2012-05-21 Siva Chandra Reddy <sivachandra@google.com>
New attribute 'end' for gdb.Symtab_and_line.
* NEWS (Python Scripting): Add entry about the new attribute.
* python/py-symtab.c (salpy_get_end): New function which
implements the get method for the 'end' attribute of
gdb.Symtab_and_line.
(sal_object_getset): Add entry for the 'end' attribute.
doc/
* gdb.texinfo (Symbol Tables In Python): Add description about
the new 'end' attribute of gdb.Symtab_and line.
testsuite/
* gdb.python/py-symtab.exp: Add tests to test the new
attribute
'end' of gdb.Symtab_and_line.
* gdb.python/py-symbol.c: Move break point comment to enable
testing of gdb.Symtab_and_line.end.
Thanks,
Siva Chandra
[-- Attachment #2: sal_end_patch_v1.txt --]
[-- Type: text/plain, Size: 4385 bytes --]
Index: NEWS
===================================================================
RCS file: /cvs/src/src/gdb/NEWS,v
retrieving revision 1.524
diff -u -p -r1.524 NEWS
--- NEWS 20 May 2012 20:35:18 -0000 1.524
+++ NEWS 21 May 2012 07:23:07 -0000
@@ -58,6 +58,10 @@
** New function gdb.find_pc_line which returns the gdb.Symtab_and_line
object associated with a PC value.
+ ** gdb.Symtab_and_line has new attribute 'end' which holds the open
+ upper bound of the program counter address range for the current
+ source line.
+
* Go language support.
GDB now supports debugging programs written in the Go programming
language.
Index: doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.970
diff -u -p -r1.970 gdb.texinfo
--- doc/gdb.texinfo 20 May 2012 20:35:19 -0000 1.970
+++ doc/gdb.texinfo 21 May 2012 07:23:15 -0000
@@ -25258,6 +25258,11 @@ Indicates the current program counter ad
writable.
@end defvar
+@defvar Symtab_and_line.end
+Indicates the open upper bound of the program counter address range for
+the current source line. This attribute is not writable.
+@end defvar
+
@defvar Symtab_and_line.line
Indicates the current line number for this object. This
attribute is not writable.
Index: python/py-symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/python/py-symtab.c,v
retrieving revision 1.9
diff -u -p -r1.9 py-symtab.c
--- python/py-symtab.c 3 May 2012 07:07:25 -0000 1.9
+++ python/py-symtab.c 21 May 2012 07:23:15 -0000
@@ -237,6 +237,19 @@ salpy_get_pc (PyObject *self, void *clos
return gdb_py_long_from_ulongest (sal->pc);
}
+/* Implementation of the get method for the 'end' attribute of
+ gdb.Symtab_and_line. */
+
+static PyObject *
+salpy_get_end (PyObject *self, void *closure)
+{
+ struct symtab_and_line *sal = NULL;
+
+ SALPY_REQUIRE_VALID (self, sal);
+
+ return gdb_py_long_from_ulongest (sal->end);
+}
+
static PyObject *
salpy_get_line (PyObject *self, void *closure)
{
@@ -556,6 +569,7 @@ static PyTypeObject symtab_object_type =
static PyGetSetDef sal_object_getset[] = {
{ "symtab", salpy_get_symtab, NULL, "Symtab object.", NULL },
{ "pc", salpy_get_pc, NULL, "Return the symtab_and_line's pc.", NULL },
+ { "end", salpy_get_end, NULL, "Return the symtab_and_line's end pc.", NULL },
{ "line", salpy_get_line, NULL,
"Return the symtab_and_line's line.", NULL },
{NULL} /* Sentinel */
Index: testsuite/gdb.python/py-symbol.c
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-symbol.c,v
retrieving revision 1.6
diff -u -p -r1.6 py-symbol.c
--- testsuite/gdb.python/py-symbol.c 3 May 2012 07:07:26 -0000 1.6
+++ testsuite/gdb.python/py-symbol.c 21 May 2012 07:23:16 -0000
@@ -40,8 +40,8 @@ int qq = 72; /* line of qq */
int func (int arg)
{
int i = 2;
- i = i * arg;
- return arg; /* Block break here. */
+ i = i * arg; /* Block break here. */
+ return arg;
}
struct simple_struct
Index: testsuite/gdb.python/py-symtab.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-symtab.exp,v
retrieving revision 1.9
diff -u -p -r1.9 py-symtab.exp
--- testsuite/gdb.python/py-symtab.exp 3 May 2012 07:07:26 -0000 1.9
+++ testsuite/gdb.python/py-symtab.exp 21 May 2012 07:23:16 -0000
@@ -54,10 +54,13 @@ gdb_py_test_silent_cmd "python static_bl
gdb_py_test_silent_cmd "python global_symbols = \[\]; static_symbols = \[\]" "Set up symbol name lists" 0
gdb_py_test_silent_cmd "python for sym in global_block: global_symbols.append(sym.name)" "Get global symbol names" 0
gdb_py_test_silent_cmd "python for sym in static_block: static_symbols.append(sym.name)" "Get static symbol names" 0
+gdb_py_test_silent_cmd "step" "Step to the next line" 0
+gdb_py_test_silent_cmd "python new_pc = gdb.selected_frame().find_sal().pc" "Get new PC" 0
# Test sal.
gdb_test "python print sal.symtab" ".*gdb.python/py-symbol.c.*" "Test symtab"
gdb_test "python print sal.pc" "${decimal}" "Test sal.pc"
+gdb_test "python print sal.end == new_pc" "True" "Test sal.end"
gdb_test "python print sal.line" "$line_no" "Test sal.line"
gdb_test "python print sal.is_valid()" "True" "Test sal.is_valid"
next reply other threads:[~2012-05-21 8:40 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-21 8:40 Siva Chandra [this message]
2012-05-21 16:27 ` Eli Zaretskii
2012-06-01 19:57 ` Siva Chandra
2012-06-11 9:17 ` Siva Chandra
2012-06-11 21:22 ` Doug Evans
2012-06-12 18:41 ` Siva Chandra
2012-06-12 19:43 ` Eli Zaretskii
2012-06-13 7:24 ` Siva Chandra
2012-06-13 15:15 ` Eli Zaretskii
2012-06-13 13:29 ` Siva Chandra
2012-06-13 17:08 ` Doug Evans
2012-06-13 18:15 ` Siva Chandra
2012-06-22 9:21 ` Siva Chandra
2012-06-22 17:12 ` Tom Tromey
2012-06-22 21:12 ` Doug Evans
2012-06-24 17:03 ` Siva Chandra
2012-06-26 22:12 ` Doug Evans
2012-06-27 0:23 ` Siva Chandra
2012-06-22 17:10 ` Tom Tromey
2012-06-22 18:43 ` Siva Chandra
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=CAGyQ6gw7JP3Mz+nabiTGcnC4oP7d9iQ3W8miHOs3NnDyFqiF0g@mail.gmail.com \
--to=sivachandra@google.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