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" "" "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.