GDB (xrefs)
Classes | Macros | Functions | Variables
py-linetable.c File Reference
#include "defs.h"
#include "python-internal.h"

Go to the source code of this file.

Classes

struct  linetable_entry_object
 
struct  linetable_object
 
struct  ltpy_iterator_object
 

Macros

#define LTPY_REQUIRE_VALID(lt_obj, symtab)
 

Functions

PyTypeObject linetable_entry_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("linetable_entry_object")
 
PyTypeObject linetable_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("linetable_object")
 
PyTypeObject ltpy_iterator_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("ltpy_iterator_object")
 
static PyObject * get_symtab (PyObject *linetable)
 
PyObject * symtab_to_linetable_object (PyObject *symtab)
 
static PyObject * build_linetable_entry (int line, CORE_ADDR address)
 
static PyObject * build_line_table_tuple_from_pcs (int line, VEC(CORE_ADDR)*vec)
 
static PyObject * ltpy_get_pcs_for_line (PyObject *self, PyObject *args)
 
static PyObject * ltpy_has_line (PyObject *self, PyObject *args)
 
static PyObject * ltpy_get_all_source_lines (PyObject *self, PyObject *args)
 
static PyObject * ltpy_is_valid (PyObject *self, PyObject *args)
 
static void ltpy_dealloc (PyObject *self)
 
int gdbpy_initialize_linetable (void)
 
static PyObject * ltpy_entry_get_line (PyObject *self, void *closure)
 
static PyObject * ltpy_entry_get_pc (PyObject *self, void *closure)
 
static PyObject * ltpy_iter (PyObject *self)
 
static void ltpy_iterator_dealloc (PyObject *obj)
 
static PyObject * ltpy_iterator (PyObject *self)
 
static PyObject * ltpy_iternext (PyObject *self)
 
static PyObject * ltpy_iter_is_valid (PyObject *self, PyObject *args)
 

Variables

static PyMethodDef linetable_object_methods []
 
PyTypeObject linetable_object_type
 
static PyMethodDef ltpy_iterator_methods []
 
PyTypeObject ltpy_iterator_object_type
 
static PyGetSetDef linetable_entry_object_getset []
 
PyTypeObject linetable_entry_object_type
 

Macro Definition Documentation

#define LTPY_REQUIRE_VALID (   lt_obj,
  symtab 
)
Value:
do { \
symtab = symtab_object_to_symtab (get_symtab (lt_obj)); \
if (symtab == NULL) \
{ \
PyErr_SetString (PyExc_RuntimeError, \
_("Symbol Table in line table is invalid."));\
return NULL; \
} \
} while (0)
#define _(String)
Definition: gdb_locale.h:40
struct symtab * symtab_object_to_symtab(PyObject *obj)
Definition: py-symtab.c:465
Definition: symtab.h:925
static PyObject * get_symtab(PyObject *linetable)
Definition: py-linetable.c:62

Definition at line 69 of file py-linetable.c.

Referenced by ltpy_get_all_source_lines(), ltpy_get_pcs_for_line(), ltpy_has_line(), ltpy_iter(), ltpy_iterator(), and ltpy_iternext().

Function Documentation

static PyObject* build_line_table_tuple_from_pcs ( int  line,
VEC(CORE_ADDR)*  vec 
)
static

Definition at line 124 of file py-linetable.c.

References build_linetable_entry(), Py_DECREF, VEC_iterate, and VEC_length.

Referenced by ltpy_get_pcs_for_line().

static PyObject* build_linetable_entry ( int  line,
CORE_ADDR  address 
)
static
PyTypeObject linetable_entry_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ( "linetable_entry_object"  )
PyTypeObject linetable_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ( "linetable_object"  )
PyTypeObject ltpy_iterator_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ( "ltpy_iterator_object"  )
int gdbpy_initialize_linetable ( void  )
static PyObject* get_symtab ( PyObject *  linetable)
static

Definition at line 62 of file py-linetable.c.

References linetable_object::symtab.

Referenced by ltpy_is_valid(), and ltpy_iter_is_valid().

static void ltpy_dealloc ( PyObject *  self)
static

Definition at line 312 of file py-linetable.c.

References Py_DECREF, Py_TYPE, and linetable_object::symtab.

static PyObject* ltpy_entry_get_line ( PyObject *  self,
void *  closure 
)
static

Definition at line 358 of file py-linetable.c.

References gdb_py_object_from_longest(), and linetable_entry_object::line.

static PyObject* ltpy_entry_get_pc ( PyObject *  self,
void *  closure 
)
static

Definition at line 369 of file py-linetable.c.

References gdb_py_object_from_longest(), and linetable_entry_object::pc.

static PyObject* ltpy_get_all_source_lines ( PyObject *  self,
PyObject *  args 
)
static
static PyObject* ltpy_get_pcs_for_line ( PyObject *  self,
PyObject *  args 
)
static
static PyObject* ltpy_has_line ( PyObject *  self,
PyObject *  args 
)
static
static PyObject* ltpy_is_valid ( PyObject *  self,
PyObject *  args 
)
static

Definition at line 295 of file py-linetable.c.

References get_symtab(), and symtab_object_to_symtab().

static PyObject* ltpy_iter ( PyObject *  self)
static
static PyObject* ltpy_iter_is_valid ( PyObject *  self,
PyObject *  args 
)
static
static PyObject* ltpy_iterator ( PyObject *  self)
static

Definition at line 411 of file py-linetable.c.

References LTPY_REQUIRE_VALID, and ltpy_iterator_object::source.

static void ltpy_iterator_dealloc ( PyObject *  obj)
static

Definition at line 401 of file py-linetable.c.

References Py_DECREF, and ltpy_iterator_object::source.

static PyObject* ltpy_iternext ( PyObject *  self)
static
PyObject* symtab_to_linetable_object ( PyObject *  symtab)

Definition at line 85 of file py-linetable.c.

References linetable_object_type, and linetable_object::symtab.

Referenced by stpy_get_linetable().

Variable Documentation

PyGetSetDef linetable_entry_object_getset[]
static
Initial value:
= {
{ "line", ltpy_entry_get_line, NULL,
"The line number in the source file.", NULL },
{ "pc", ltpy_entry_get_pc, NULL,
"The memory address for this line number.", NULL },
{ NULL }
}
static PyObject * ltpy_entry_get_pc(PyObject *self, void *closure)
Definition: py-linetable.c:369
static PyObject * ltpy_entry_get_line(PyObject *self, void *closure)
Definition: py-linetable.c:358

Definition at line 578 of file py-linetable.c.

PyTypeObject linetable_entry_object_type

Definition at line 586 of file py-linetable.c.

Referenced by build_linetable_entry(), and gdbpy_initialize_linetable().

PyMethodDef linetable_object_methods[]
static
Initial value:
= {
{ "line", ltpy_get_pcs_for_line, METH_VARARGS,
"line (lineno) -> Tuple\n\
Return executable locations for a given source line." },
{ "has_line", ltpy_has_line, METH_VARARGS,
"has_line (lineno) -> Boolean\n\
Return TRUE if this line has executable information, FALSE if not." },
{ "source_lines", ltpy_get_all_source_lines, METH_NOARGS,
"source_lines () -> FrozenSet\n\
Return a frozen set of all executable source lines." },
{ "is_valid", ltpy_is_valid, METH_NOARGS,
"is_valid () -> Boolean.\n\
Return True if this Linetable is valid, False if not." },
{NULL}
}
static PyObject * ltpy_get_all_source_lines(PyObject *self, PyObject *args)
Definition: py-linetable.c:236
static PyObject * ltpy_get_pcs_for_line(PyObject *self, PyObject *args)
Definition: py-linetable.c:167
static PyObject * ltpy_is_valid(PyObject *self, PyObject *args)
Definition: py-linetable.c:295
static PyObject * ltpy_has_line(PyObject *self, PyObject *args)
Definition: py-linetable.c:202

Definition at line 483 of file py-linetable.c.

PyTypeObject linetable_object_type

Definition at line 499 of file py-linetable.c.

Referenced by gdbpy_initialize_linetable(), and symtab_to_linetable_object().

PyMethodDef ltpy_iterator_methods[]
static
Initial value:
= {
{ "is_valid", ltpy_iter_is_valid, METH_NOARGS,
"is_valid () -> Boolean.\n\
Return True if this Linetable iterator is valid, False if not." },
{NULL}
}
static PyObject * ltpy_iter_is_valid(PyObject *self, PyObject *args)
Definition: py-linetable.c:468

Definition at line 539 of file py-linetable.c.

PyTypeObject ltpy_iterator_object_type
Initial value:
= {
"gdb.LineTableIterator",
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,
"GDB line table iterator object",
0,
0,
0,
0,
}
static void ltpy_iterator_dealloc(PyObject *obj)
Definition: py-linetable.c:401
static PyMethodDef ltpy_iterator_methods[]
Definition: py-linetable.c:539
static PyObject * ltpy_iternext(PyObject *self)
Definition: py-linetable.c:426
static PyObject * ltpy_iterator(PyObject *self)
Definition: py-linetable.c:411
#define PyVarObject_HEAD_INIT(type, size)

Definition at line 546 of file py-linetable.c.

Referenced by gdbpy_initialize_linetable(), and ltpy_iter().