2012-05-03 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/gdb.python/py-symbol.exp: Add tests to test the new methods gdb.Symtab.global_block() and gdb.Symtab.static_block(). * tessuite/gdb.python/py-symbol.c: Add new struct to help test gdb.Symtab.static_block(). * doc/gdb.texinfo (Symbol Tables In Python): Add documentation about the new methods global_block and static_block on gdb.Symtab objects.
This commit is contained in:
parent
bf2f0858b1
commit
a20ee7a4a9
8 changed files with 94 additions and 0 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
2012-05-03 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.
|
||||||
|
|
||||||
2012-05-03 Doug Evans <dje@google.com>
|
2012-05-03 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* dwarf2read.c (dw2_find_symbol_file): Don't crash if there are no
|
* dwarf2read.c (dw2_find_symbol_file): Don't crash if there are no
|
||||||
|
|
4
gdb/NEWS
4
gdb/NEWS
|
@ -39,6 +39,10 @@
|
||||||
** A new method 'referenced_value' on gdb.Value objects which can
|
** A new method 'referenced_value' on gdb.Value objects which can
|
||||||
dereference pointer as well as C++ reference values.
|
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.
|
||||||
|
|
||||||
* Go language support.
|
* Go language support.
|
||||||
GDB now supports debugging programs written in the Go programming
|
GDB now supports debugging programs written in the Go programming
|
||||||
language.
|
language.
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2012-05-03 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.
|
||||||
|
|
||||||
2012-05-02 Siva Chandra Reddy <sivachandra@google.com>
|
2012-05-02 Siva Chandra Reddy <sivachandra@google.com>
|
||||||
|
|
||||||
* gdb.texinfo (Blocks In Python): Add a note saying that future
|
* gdb.texinfo (Blocks In Python): Add a note saying that future
|
||||||
|
|
|
@ -25038,6 +25038,16 @@ if it is invalid at the time the method is called.
|
||||||
@defun Symtab.fullname ()
|
@defun Symtab.fullname ()
|
||||||
Return the symbol table's source absolute file name.
|
Return the symbol table's source absolute file name.
|
||||||
@end defun
|
@end defun
|
||||||
|
|
||||||
|
@defun Symtab.global_block ()
|
||||||
|
Return the global block of the underlying symbol table.
|
||||||
|
@xref{Blocks In Python}.
|
||||||
|
@end defun
|
||||||
|
|
||||||
|
@defun Symtab.static_block ()
|
||||||
|
Return the static block of the underlying symbol table.
|
||||||
|
@xref{Blocks In Python}.
|
||||||
|
@end defun
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Breakpoints In Python
|
@node Breakpoints In Python
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "source.h"
|
#include "source.h"
|
||||||
#include "python-internal.h"
|
#include "python-internal.h"
|
||||||
#include "objfiles.h"
|
#include "objfiles.h"
|
||||||
|
#include "block.h"
|
||||||
|
|
||||||
typedef struct stpy_symtab_object {
|
typedef struct stpy_symtab_object {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
|
@ -153,6 +154,38 @@ stpy_is_valid (PyObject *self, PyObject *args)
|
||||||
Py_RETURN_TRUE;
|
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;
|
||||||
|
struct blockvector *blockvector;
|
||||||
|
|
||||||
|
STPY_REQUIRE_VALID (self, symtab);
|
||||||
|
|
||||||
|
blockvector = BLOCKVECTOR (symtab);
|
||||||
|
block = BLOCKVECTOR_BLOCK (blockvector, 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;
|
||||||
|
struct blockvector *blockvector;
|
||||||
|
|
||||||
|
STPY_REQUIRE_VALID (self, symtab);
|
||||||
|
|
||||||
|
blockvector = BLOCKVECTOR (symtab);
|
||||||
|
block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK);
|
||||||
|
return block_to_block_object (block, symtab->objfile);
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
salpy_str (PyObject *self)
|
salpy_str (PyObject *self)
|
||||||
{
|
{
|
||||||
|
@ -477,6 +510,12 @@ Return true if this symbol table is valid, false if not." },
|
||||||
{ "fullname", stpy_fullname, METH_NOARGS,
|
{ "fullname", stpy_fullname, METH_NOARGS,
|
||||||
"fullname () -> String.\n\
|
"fullname () -> String.\n\
|
||||||
Return the symtab's full source filename." },
|
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 */
|
{NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
2012-05-03 Siva Chandra Reddy <sivachandra@google.com>
|
||||||
|
|
||||||
|
* gdb.python/py-symbol.exp: Add tests to test the new methods
|
||||||
|
gdb.Symtab.global_block() and gdb.Symtab.static_block().
|
||||||
|
* gdb.python/py-symbol.c: Add new struct to help test
|
||||||
|
gdb.Symtab.static_block().
|
||||||
|
|
||||||
2012-05-03 Doug Evans <dje@google.com>
|
2012-05-03 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
* gdb.dwarf2/pr13961.S: Add file and source location, but leave
|
* gdb.dwarf2/pr13961.S: Add file and source location, but leave
|
||||||
|
|
|
@ -44,6 +44,11 @@ int func (int arg)
|
||||||
return arg; /* Block break here. */
|
return arg; /* Block break here. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct simple_struct
|
||||||
|
{
|
||||||
|
int a;
|
||||||
|
};
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
int main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -51,6 +56,7 @@ int main (int argc, char *argv[])
|
||||||
#endif
|
#endif
|
||||||
int a = 0;
|
int a = 0;
|
||||||
int result;
|
int result;
|
||||||
|
struct simple_struct ss = { 10 };
|
||||||
enum tag {one, two, three};
|
enum tag {one, two, three};
|
||||||
enum tag t = one;
|
enum tag t = one;
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,11 @@ gdb_continue_to_breakpoint "Block break here."
|
||||||
gdb_py_test_silent_cmd "python frame = gdb.selected_frame()" "Get Frame" 0
|
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 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 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.
|
# Test sal.
|
||||||
gdb_test "python print sal.symtab" ".*gdb.python/py-symbol.c.*" "Test symtab"
|
gdb_test "python print sal.symtab" ".*gdb.python/py-symbol.c.*" "Test symtab"
|
||||||
|
@ -61,6 +66,12 @@ gdb_test "python print symtab.filename" ".*gdb.python/py-symbol.c.*" "Test symta
|
||||||
gdb_test "python print symtab.objfile" "<gdb.Objfile object at ${hex}>" "Test symtab.objfile"
|
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.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 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 is_valid when the objfile is unloaded. This must be the last
|
||||||
# test as it unloads the object file in GDB.
|
# test as it unloads the object file in GDB.
|
||||||
|
|
Loading…
Reference in a new issue