Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [RFC - Python scripting] New methods Symtab.global_block and Symtab.static_block (docs included)
@ 2012-04-17  8:39 Siva Chandra
  2012-04-17 13:00 ` Phil Muldoon
                   ` (2 more replies)
  0 siblings, 3 replies; 44+ messages in thread
From: Siva Chandra @ 2012-04-17  8:39 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 1236 bytes --]

The attached patch is a result of discussions here:
    http://sourceware.org/ml/gdb-patches/2012-04/msg00226.html
and here:
    http://sourceware.org/ml/gdb-patches/2012-04/msg00302.html

Code:
2012-04-17  Siva Chandra Reddy  <sivachandra@google.com>

        Add two new methods global_block and static_block to gdb.Symtab
        objects.
        * NEWS (Python scripting): Add entry about the new methods.
        * python/py-symtab.c (stpy_global_block): New function which
        implements the gdb.Symtab.global_block() method.
        (stpy_static_block): New function which implements the
        gdb.Symtab.static_block() method.
        (symtab_object_methods): Add entries for the two new methods.

Testsuite:
2012-04-17  Siva Chandra Reddy  <sivachandra@google.com>

        * py-symbol.exp: Add tests to test the new methods
        gdb.Symtab.global_block() and gdb.Symtab.static_block().
        * py-symbol.c: Add new struct to help test
        gdb.Symtab.static_block().

Docs:
2012-04-17  Siva Chandra Reddy  <sivachandra@google.com>

        * gdb.texinfo (Symbol Tables In Python): Add documentation about
        the new methods global_block and static_block on gdb.Symtab
        objects.

Thanks,
Siva Chandra

[-- Attachment #2: symtab_blocks_patch.txt --]
[-- Type: text/plain, Size: 6483 bytes --]

Index: NEWS
===================================================================
RCS file: /cvs/src/src/gdb/NEWS,v
retrieving revision 1.507
diff -u -p -r1.507 NEWS
--- NEWS	11 Apr 2012 05:50:40 -0000	1.507
+++ NEWS	17 Apr 2012 06:01:27 -0000
@@ -32,6 +32,10 @@
   ** A new method 'referenced_value' on gdb.Value objects which can
      dereference pointer as well as C++ reference values.
 
+  ** New methods 'global_block' and 'static_block' on gdb.Symtab objects
+     which return the global and static blocks (as gdb.Block objects),
+     of the underlying symbol table, respectively.
+
 * GDBserver now supports stdio connections.
   E.g. (gdb) target remote | ssh myhost gdbserver - hello
 
Index: doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.941
diff -u -p -r1.941 gdb.texinfo
--- doc/gdb.texinfo	14 Apr 2012 12:18:41 -0000	1.941
+++ doc/gdb.texinfo	17 Apr 2012 06:01:33 -0000
@@ -24540,6 +24540,18 @@ if it is invalid at the time the method 
 @defun Symtab.fullname ()
 Return the symbol table's source absolute file name.
 @end defun
+
+@defun Symtab.global_block ()
+Return the global block of the underlying symbol table.  Note that,
+though highly unlikely, the returned @code{gdb.Block} objects are not
+guaranteed to be identical across different @value{GDBN} releases.
+@end defun
+
+@defun Symtab.static_block ()
+Return the static block of the underlying symbol table.  Note that,
+though highly unlikely, the returned @code{gdb.Block} objects are not
+guaranteed to be identical across different @value{GDBN} releases.
+@end defun
 @end table
 
 @node Breakpoints In Python
Index: python/py-symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/python/py-symtab.c,v
retrieving revision 1.8
diff -u -p -r1.8 py-symtab.c
--- python/py-symtab.c	4 Jan 2012 08:17:25 -0000	1.8
+++ python/py-symtab.c	17 Apr 2012 06:01:33 -0000
@@ -23,6 +23,7 @@
 #include "source.h"
 #include "python-internal.h"
 #include "objfiles.h"
+#include "block.h"
 
 typedef struct stpy_symtab_object {
   PyObject_HEAD
@@ -153,6 +154,34 @@ stpy_is_valid (PyObject *self, PyObject 
   Py_RETURN_TRUE;
 }
 
+/* Return the GLOBAL_BLOCK of the underlying symtab.  */
+
+static PyObject *
+stpy_global_block (PyObject *self, PyObject *args)
+{
+  struct symtab *symtab = NULL;
+  struct block *block = NULL;
+
+  STPY_REQUIRE_VALID (self, symtab);
+
+  block = symtab->blockvector->block[GLOBAL_BLOCK];
+  return block_to_block_object (block, symtab->objfile);
+}
+
+/* Return the STATIC_BLOCK of the underlying symtab.  */
+
+static PyObject *
+stpy_static_block (PyObject *self, PyObject *args)
+{
+  struct symtab *symtab = NULL;
+  struct block *block = NULL;
+
+  STPY_REQUIRE_VALID (self, symtab);
+
+  block = symtab->blockvector->block[STATIC_BLOCK];
+  return block_to_block_object (block, symtab->objfile);
+}
+
 static PyObject *
 salpy_str (PyObject *self)
 {
@@ -477,6 +506,12 @@ Return true if this symbol table is vali
   { "fullname", stpy_fullname, METH_NOARGS,
     "fullname () -> String.\n\
 Return the symtab's full source filename." },
+  { "global_block", stpy_global_block, METH_NOARGS,
+    "global_block () -> gdb.Block.\n\
+Return the global block of the symbol table." },
+  { "static_block", stpy_static_block, METH_NOARGS,
+    "static_block () -> gdb.Block.\n\
+Return the static block of the symbol table." },
   {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.5
diff -u -p -r1.5 py-symbol.c
--- testsuite/gdb.python/py-symbol.c	7 Feb 2012 19:47:16 -0000	1.5
+++ testsuite/gdb.python/py-symbol.c	17 Apr 2012 06:01:34 -0000
@@ -44,6 +44,11 @@ int func (int arg)
   return arg; /* Block break here.  */
 }
 
+struct simple_struct
+{
+  int a;
+};
+
 int main (int argc, char *argv[])
 {
 #ifdef __cplusplus
@@ -51,6 +56,7 @@ int main (int argc, char *argv[])
 #endif
   int a = 0;
   int result;
+  struct simple_struct ss = { 10 };
   enum tag {one, two, three};
   enum tag t = one;
 
Index: testsuite/gdb.python/py-symtab.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-symtab.exp,v
retrieving revision 1.8
diff -u -p -r1.8 py-symtab.exp
--- testsuite/gdb.python/py-symtab.exp	7 Feb 2012 19:42:27 -0000	1.8
+++ testsuite/gdb.python/py-symtab.exp	17 Apr 2012 06:01:34 -0000
@@ -49,6 +49,11 @@ gdb_continue_to_breakpoint "Block break 
 gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0
 gdb_py_test_silent_cmd "python sal = frame.find_sal()" "Get block" 0
 gdb_py_test_silent_cmd "python symtab = sal.symtab" "Get block" 0
+gdb_py_test_silent_cmd "python global_block = symtab.global_block()" "Get global block" 0
+gdb_py_test_silent_cmd "python static_block = symtab.static_block()" "Get static block" 0
+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
 
 # Test sal.
 gdb_test "python print sal.symtab" ".*gdb.python/py-symbol.c.*" "Test symtab"
@@ -61,6 +66,12 @@ gdb_test "python print symtab.filename" 
 gdb_test "python print symtab.objfile" "<gdb.Objfile object at ${hex}>" "Test symtab.objfile"
 gdb_test "python print symtab.fullname()" "testsuite/gdb.python/py-symbol.c.*" "Test symtab.fullname"
 gdb_test "python print symtab.is_valid()" "True" "Test symtab.is_valid()"
+gdb_test "python print \"qq\" in global_symbols" "True" "Test qq in global symbols"
+gdb_test "python print \"func\" in global_symbols" "True" "Test func in global symbols"
+gdb_test "python print \"main\" in global_symbols" "True" "Test main in global symbols"
+gdb_test "python print \"int\" in static_symbols" "True" "Test int in static symbols"
+gdb_test "python print \"char\" in static_symbols" "True" "Test char in static symbols"
+gdb_test "python print \"simple_struct\" in static_symbols" "True" "Test simple_struct in static symbols"
 
 # Test is_valid when the objfile is unloaded.  This must be the last
 # test as it unloads the object file in GDB.

^ permalink raw reply	[flat|nested] 44+ messages in thread

end of thread, other threads:[~2012-05-23 21:38 UTC | newest]

Thread overview: 44+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-17  8:39 [RFC - Python scripting] New methods Symtab.global_block and Symtab.static_block (docs included) Siva Chandra
2012-04-17 13:00 ` Phil Muldoon
2012-04-17 17:34   ` Siva Chandra
2012-04-17 17:44     ` Tom Tromey
2012-04-17 17:41   ` Tom Tromey
2012-04-17 17:05 ` Eli Zaretskii
     [not found]   ` <CAGyQ6gxxEeYeCKw_iHXh74Gg223GHxMoW=gvt9kU+ax396kKBQ@mail.gmail.com>
2012-04-18  9:15     ` Siva Chandra
2012-04-18 20:45       ` Phil Muldoon
2012-04-18 20:48         ` Tom Tromey
2012-04-19 17:33           ` Siva Chandra
2012-04-19 19:18             ` Doug Evans
2012-04-20  6:48               ` Siva Chandra
2012-04-20 12:12                 ` Matt Rice
2012-04-20 14:16                   ` Doug Evans
2012-04-20 15:21                   ` Matt Rice
2012-04-20 19:12                   ` Tom Tromey
2012-04-20 19:53                     ` Doug Evans
2012-04-20 19:57                       ` Siva Chandra
2012-04-23 13:21                         ` Tom Tromey
2012-04-23 13:35                           ` Phil Muldoon
2012-04-23 14:11                             ` Eli Zaretskii
2012-04-23 14:45                               ` Phil Muldoon
2012-04-23 16:00                                 ` Eli Zaretskii
2012-04-24 11:15                                   ` Siva Chandra
2012-04-24 17:40                                     ` Eli Zaretskii
2012-04-25  7:11                                   ` Tom Tromey
2012-04-25  8:19                                     ` Siva Chandra
2012-04-26 12:35                                     ` Siva Chandra
2012-04-26 15:21                                       ` Doug Evans
2012-05-02 17:41                                         ` Siva Chandra
2012-05-02 18:15                                           ` Doug Evans
2012-05-03  7:13                                             ` Siva Chandra
2012-05-04 18:05                                               ` FAILing new testcase for -fdebug-types-section [Re: [RFC - Python scripting] New methods Symtab.global_block and Symtab.static_block (docs included)] Jan Kratochvil
2012-05-05  7:01                                                 ` Siva Chandra
2012-05-05  7:05                                                   ` Jan Kratochvil
2012-05-05  7:11                                                     ` Siva Chandra
2012-05-05  7:13                                                       ` Jan Kratochvil
2012-05-23 21:38                                                         ` [patch KFAIL] Re: FAILing new testcase for -fdebug-types-section (PR symtab/14148) Jan Kratochvil
2012-04-18 20:48       ` [RFC - Python scripting] New methods Symtab.global_block and Symtab.static_block (docs included) Tom Tromey
2012-04-20  8:13       ` Eli Zaretskii
2012-04-17 17:37 ` Tom Tromey
2012-04-18 18:41   ` Tom Tromey
2012-04-18 19:53     ` Siva Chandra
2012-04-18 20:49       ` Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox