| Index: gdb/python/py-block.c
|
| diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c
|
| index 68d0a1595cb87a419f14ae88aa2a357b3e1c7819..c74ac2cf925e995f60d32964771c504b7b7c0adf 100644
|
| --- a/gdb/python/py-block.c
|
| +++ b/gdb/python/py-block.c
|
| @@ -1,6 +1,6 @@
|
| /* Python interface to blocks.
|
|
|
| - Copyright (C) 2008-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 2008-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -78,7 +78,8 @@ typedef struct {
|
| } \
|
| } while (0)
|
|
|
| -static PyTypeObject block_syms_iterator_object_type;
|
| +static PyTypeObject block_syms_iterator_object_type
|
| + CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("block_syms_iterator_object");
|
| static const struct objfile_data *blpy_objfile_data_key;
|
|
|
| static PyObject *
|
| @@ -370,7 +371,7 @@ PyObject *
|
| gdbpy_block_for_pc (PyObject *self, PyObject *args)
|
| {
|
| gdb_py_ulongest pc;
|
| - struct block *block;
|
| + struct block *block = NULL;
|
| struct obj_section *section = NULL;
|
| struct symtab *symtab = NULL;
|
| volatile struct gdb_exception except;
|
| @@ -382,6 +383,9 @@ gdbpy_block_for_pc (PyObject *self, PyObject *args)
|
| {
|
| section = find_pc_mapped_section (pc);
|
| symtab = find_pc_sect_symtab (pc, section);
|
| +
|
| + if (symtab != NULL && symtab->objfile != NULL)
|
| + block = block_for_pc (pc);
|
| }
|
| GDB_PY_HANDLE_EXCEPTION (except);
|
|
|
| @@ -392,7 +396,6 @@ gdbpy_block_for_pc (PyObject *self, PyObject *args)
|
| return NULL;
|
| }
|
|
|
| - block = block_for_pc (pc);
|
| if (block)
|
| return block_to_block_object (block, symtab->objfile);
|
|
|
| @@ -422,16 +425,16 @@ del_objfile_blocks (struct objfile *objfile, void *datum)
|
| }
|
| }
|
|
|
| -void
|
| +int
|
| gdbpy_initialize_blocks (void)
|
| {
|
| block_object_type.tp_new = PyType_GenericNew;
|
| if (PyType_Ready (&block_object_type) < 0)
|
| - return;
|
| + return -1;
|
|
|
| block_syms_iterator_object_type.tp_new = PyType_GenericNew;
|
| if (PyType_Ready (&block_syms_iterator_object_type) < 0)
|
| - return;
|
| + return -1;
|
|
|
| /* Register an objfile "free" callback so we can properly
|
| invalidate blocks when an object file is about to be
|
| @@ -439,12 +442,12 @@ gdbpy_initialize_blocks (void)
|
| blpy_objfile_data_key
|
| = register_objfile_data_with_cleanup (NULL, del_objfile_blocks);
|
|
|
| - Py_INCREF (&block_object_type);
|
| - PyModule_AddObject (gdb_module, "Block", (PyObject *) &block_object_type);
|
| + if (gdb_pymodule_addobject (gdb_module, "Block",
|
| + (PyObject *) &block_object_type) < 0)
|
| + return -1;
|
|
|
| - Py_INCREF (&block_syms_iterator_object_type);
|
| - PyModule_AddObject (gdb_module, "BlockIterator",
|
| - (PyObject *) &block_syms_iterator_object_type);
|
| + return gdb_pymodule_addobject (gdb_module, "BlockIterator",
|
| + (PyObject *) &block_syms_iterator_object_type);
|
| }
|
|
|
|
|
| @@ -475,8 +478,7 @@ static PyGetSetDef block_object_getset[] = {
|
| };
|
|
|
| PyTypeObject block_object_type = {
|
| - PyObject_HEAD_INIT (NULL)
|
| - 0, /*ob_size*/
|
| + PyVarObject_HEAD_INIT (NULL, 0)
|
| "gdb.Block", /*tp_name*/
|
| sizeof (block_object), /*tp_basicsize*/
|
| 0, /*tp_itemsize*/
|
| @@ -516,8 +518,7 @@ Return true if this block iterator is valid, false if not." },
|
| };
|
|
|
| static PyTypeObject block_syms_iterator_object_type = {
|
| - PyObject_HEAD_INIT (NULL)
|
| - 0, /*ob_size*/
|
| + PyVarObject_HEAD_INIT (NULL, 0)
|
| "gdb.BlockIterator", /*tp_name*/
|
| sizeof (block_syms_iterator_object), /*tp_basicsize*/
|
| 0, /*tp_itemsize*/
|
|
|