diff options
Diffstat (limited to 'gdb/python/py-symbol.c')
-rw-r--r-- | gdb/python/py-symbol.c | 248 |
1 files changed, 129 insertions, 119 deletions
diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c index b8777966c47..5f8c2db88bf 100644 --- a/gdb/python/py-symbol.c +++ b/gdb/python/py-symbol.c @@ -25,10 +25,11 @@ #include "objfiles.h" #include "symfile.h" -struct symbol_object { +struct symbol_object +{ PyObject_HEAD - /* The GDB symbol structure this object is wrapping. */ - struct symbol *symbol; + /* The GDB symbol structure this object is wrapping. */ + struct symbol *symbol; /* A symbol object is associated with an objfile, so keep track with doubly-linked list, rooted in the objfile. This lets us invalidate the underlying struct symbol when the objfile is @@ -39,16 +40,17 @@ struct symbol_object { /* Require a valid symbol. All access to symbol_object->symbol should be gated by this call. */ -#define SYMPY_REQUIRE_VALID(symbol_obj, symbol) \ - do { \ - symbol = symbol_object_to_symbol (symbol_obj); \ - if (symbol == NULL) \ - { \ - PyErr_SetString (PyExc_RuntimeError, \ - _("Symbol is invalid.")); \ - return NULL; \ - } \ - } while (0) +#define SYMPY_REQUIRE_VALID(symbol_obj, symbol) \ + do \ + { \ + symbol = symbol_object_to_symbol (symbol_obj); \ + if (symbol == NULL) \ + { \ + PyErr_SetString (PyExc_RuntimeError, _ ("Symbol is invalid.")); \ + return NULL; \ + } \ + } \ + while (0) /* A deleter that is used when an objfile is about to be freed. */ struct symbol_object_deleter @@ -69,7 +71,7 @@ struct symbol_object_deleter }; static const registry<objfile>::key<symbol_object, symbol_object_deleter> - sympy_objfile_data_key; + sympy_objfile_data_key; static PyObject * sympy_str (PyObject *self) @@ -173,7 +175,8 @@ sympy_is_constant (PyObject *self, void *closure) theclass = symbol->aclass (); - return PyBool_FromLong (theclass == LOC_CONST || theclass == LOC_CONST_BYTES); + return PyBool_FromLong (theclass == LOC_CONST + || theclass == LOC_CONST_BYTES); } static PyObject * @@ -201,7 +204,8 @@ sympy_is_variable (PyObject *self, void *closure) return PyBool_FromLong (!symbol->is_argument () && (theclass == LOC_LOCAL || theclass == LOC_REGISTER - || theclass == LOC_STATIC || theclass == LOC_COMPUTED + || theclass == LOC_STATIC + || theclass == LOC_COMPUTED || theclass == LOC_OPTIMIZED_OUT)); } @@ -291,11 +295,11 @@ sympy_value (PyObject *self, PyObject *args) { frame_info = frame_object_to_frame_info (frame_obj); if (frame_info == NULL) - error (_("invalid frame")); + error (_ ("invalid frame")); } if (symbol_read_needs_frame (symbol) && frame_info == NULL) - error (_("symbol requires a frame to compute its value")); + error (_ ("symbol requires a frame to compute its value")); /* TODO: currently, we have no way to recover the block in which SYMBOL was found, so we have no block to pass to read_var_value. This will @@ -321,8 +325,7 @@ set_symbol (symbol_object *obj, struct symbol *symbol) { obj->symbol = symbol; obj->prev = NULL; - if (symbol->is_objfile_owned () - && symbol->symtab () != NULL) + if (symbol->is_objfile_owned () && symbol->symtab () != NULL) { struct objfile *objfile = symbol->objfile (); @@ -353,7 +356,7 @@ symbol_to_symbol_object (struct symbol *sym) struct symbol * symbol_object_to_symbol (PyObject *obj) { - if (! PyObject_TypeCheck (obj, &symbol_object_type)) + if (!PyObject_TypeCheck (obj, &symbol_object_type)) return NULL; return ((symbol_object *) obj)->symbol; } @@ -365,8 +368,7 @@ sympy_dealloc (PyObject *obj) if (sym_obj->prev) sym_obj->prev->next = sym_obj->next; - else if (sym_obj->symbol != NULL - && sym_obj->symbol->is_objfile_owned () + else if (sym_obj->symbol != NULL && sym_obj->symbol->is_objfile_owned () && sym_obj->symbol->symtab () != NULL) sympy_objfile_data_key.set (sym_obj->symbol->objfile (), sym_obj->next); if (sym_obj->next) @@ -405,7 +407,7 @@ gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw) try { - selected_frame = get_selected_frame (_("No frame selected.")); + selected_frame = get_selected_frame (_ ("No frame selected.")); block = get_frame_block (selected_frame, NULL); } catch (const gdb_exception &except) @@ -417,7 +419,8 @@ gdbpy_lookup_symbol (PyObject *self, PyObject *args, PyObject *kw) try { symbol = lookup_symbol (name, block, (domain_enum) domain, - &is_a_field_of_this).symbol; + &is_a_field_of_this) + .symbol; } catch (const gdb_exception &except) { @@ -512,7 +515,7 @@ gdbpy_lookup_static_symbol (PyObject *self, PyObject *args, PyObject *kw) try { frame_info_ptr selected_frame - = get_selected_frame (_("No frame selected.")); + = get_selected_frame (_ ("No frame selected.")); block = get_frame_block (selected_frame, NULL); } catch (const gdb_exception &except) @@ -524,8 +527,8 @@ gdbpy_lookup_static_symbol (PyObject *self, PyObject *args, PyObject *kw) { if (block != nullptr) symbol - = lookup_symbol_in_static_block (name, block, - (domain_enum) domain).symbol; + = lookup_symbol_in_static_block (name, block, (domain_enum) domain) + .symbol; if (symbol == nullptr) symbol = lookup_static_symbol (name, (domain_enum) domain).symbol; @@ -589,13 +592,14 @@ gdbpy_lookup_static_symbols (PyObject *self, PyObject *args, PyObject *kw) if (block != nullptr) { - symbol *symbol = lookup_symbol_in_static_block - (name, block, (domain_enum) domain).symbol; + symbol *symbol + = lookup_symbol_in_static_block (name, block, + (domain_enum) domain) + .symbol; if (symbol != nullptr) { - PyObject *sym_obj - = symbol_to_symbol_object (symbol); + PyObject *sym_obj = symbol_to_symbol_object (symbol); if (PyList_Append (return_list.get (), sym_obj) == -1) return NULL; } @@ -617,49 +621,57 @@ gdbpy_initialize_symbols (void) if (PyType_Ready (&symbol_object_type) < 0) return -1; - if (PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_UNDEF", LOC_UNDEF) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_CONST", - LOC_CONST) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_STATIC", - LOC_STATIC) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_REGISTER", - LOC_REGISTER) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_ARG", - LOC_ARG) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_REF_ARG", - LOC_REF_ARG) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_LOCAL", - LOC_LOCAL) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_TYPEDEF", - LOC_TYPEDEF) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_LABEL", - LOC_LABEL) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_BLOCK", - LOC_BLOCK) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_CONST_BYTES", - LOC_CONST_BYTES) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_UNRESOLVED", - LOC_UNRESOLVED) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_OPTIMIZED_OUT", - LOC_OPTIMIZED_OUT) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_COMPUTED", - LOC_COMPUTED) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_COMMON_BLOCK", - LOC_COMMON_BLOCK) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_REGPARM_ADDR", - LOC_REGPARM_ADDR) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_UNDEF_DOMAIN", - UNDEF_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_VAR_DOMAIN", - VAR_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_STRUCT_DOMAIN", - STRUCT_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_LABEL_DOMAIN", - LABEL_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_MODULE_DOMAIN", - MODULE_DOMAIN) < 0 - || PyModule_AddIntConstant (gdb_module, "SYMBOL_COMMON_BLOCK_DOMAIN", - COMMON_BLOCK_DOMAIN) < 0) + if ( + PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_UNDEF", LOC_UNDEF) < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_CONST", LOC_CONST) < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_STATIC", LOC_STATIC) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_REGISTER", + LOC_REGISTER) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_ARG", LOC_ARG) < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_REF_ARG", LOC_REF_ARG) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_LOCAL", LOC_LOCAL) < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_TYPEDEF", LOC_TYPEDEF) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_LABEL", LOC_LABEL) < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_BLOCK", LOC_BLOCK) < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_CONST_BYTES", + LOC_CONST_BYTES) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_UNRESOLVED", + LOC_UNRESOLVED) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_OPTIMIZED_OUT", + LOC_OPTIMIZED_OUT) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_COMPUTED", + LOC_COMPUTED) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_COMMON_BLOCK", + LOC_COMMON_BLOCK) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LOC_REGPARM_ADDR", + LOC_REGPARM_ADDR) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_UNDEF_DOMAIN", + UNDEF_DOMAIN) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_VAR_DOMAIN", VAR_DOMAIN) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_STRUCT_DOMAIN", + STRUCT_DOMAIN) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_LABEL_DOMAIN", + LABEL_DOMAIN) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_MODULE_DOMAIN", + MODULE_DOMAIN) + < 0 + || PyModule_AddIntConstant (gdb_module, "SYMBOL_COMMON_BLOCK_DOMAIN", + COMMON_BLOCK_DOMAIN) + < 0) return -1; /* These remain defined for compatibility, but as they were never @@ -669,22 +681,22 @@ gdbpy_initialize_symbols (void) used differently. Here we try to give them values that will make sense if they are passed to gdb.lookup_symbol. */ if (PyModule_AddIntConstant (gdb_module, "SYMBOL_VARIABLES_DOMAIN", - VAR_DOMAIN) < 0 + VAR_DOMAIN) + < 0 || PyModule_AddIntConstant (gdb_module, "SYMBOL_FUNCTIONS_DOMAIN", - VAR_DOMAIN) < 0 + VAR_DOMAIN) + < 0 || PyModule_AddIntConstant (gdb_module, "SYMBOL_TYPES_DOMAIN", - VAR_DOMAIN) < 0) + VAR_DOMAIN) + < 0) return -1; return gdb_pymodule_addobject (gdb_module, "Symbol", (PyObject *) &symbol_object_type); } - - static gdb_PyGetSetDef symbol_object_getset[] = { - { "type", sympy_get_type, NULL, - "Type of the symbol.", NULL }, + { "type", sympy_get_type, NULL, "Type of the symbol.", NULL }, { "symtab", sympy_get_symtab, NULL, "Symbol table in which the symbol appears.", NULL }, { "name", sympy_get_name, NULL, @@ -695,7 +707,8 @@ static gdb_PyGetSetDef symbol_object_getset[] = { { "print_name", sympy_get_print_name, NULL, "Name of the symbol in a form suitable for output.\n\ This is either name or linkage_name, depending on whether the user asked GDB\n\ -to display demangled or mangled names.", NULL }, +to display demangled or mangled names.", + NULL }, { "addr_class", sympy_get_addr_class, NULL, "Address class of the symbol." }, { "is_argument", sympy_is_argument, NULL, "True if the symbol is an argument of a function." }, @@ -709,48 +722,45 @@ to display demangled or mangled names.", NULL }, "True if the symbol requires a frame for evaluation." }, { "line", sympy_line, NULL, "The source line number at which the symbol was defined." }, - { NULL } /* Sentinel */ + { NULL } /* Sentinel */ }; static PyMethodDef symbol_object_methods[] = { - { "is_valid", sympy_is_valid, METH_NOARGS, - "is_valid () -> Boolean.\n\ + { "is_valid", sympy_is_valid, METH_NOARGS, "is_valid () -> Boolean.\n\ Return true if this symbol is valid, false if not." }, - { "value", sympy_value, METH_VARARGS, - "value ([frame]) -> gdb.Value\n\ + { "value", sympy_value, METH_VARARGS, "value ([frame]) -> gdb.Value\n\ Return the value of the symbol." }, - {NULL} /* Sentinel */ + { NULL } /* Sentinel */ }; PyTypeObject symbol_object_type = { - PyVarObject_HEAD_INIT (NULL, 0) - "gdb.Symbol", /*tp_name*/ - sizeof (symbol_object), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - sympy_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - sympy_str, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT, /*tp_flags*/ - "GDB symbol object", /*tp_doc */ - 0, /*tp_traverse */ - 0, /*tp_clear */ - 0, /*tp_richcompare */ - 0, /*tp_weaklistoffset */ - 0, /*tp_iter */ - 0, /*tp_iternext */ - symbol_object_methods, /*tp_methods */ - 0, /*tp_members */ - symbol_object_getset /*tp_getset */ + PyVarObject_HEAD_INIT (NULL, 0) "gdb.Symbol", /*tp_name*/ + sizeof (symbol_object), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + sympy_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + sympy_str, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "GDB symbol object", /*tp_doc */ + 0, /*tp_traverse */ + 0, /*tp_clear */ + 0, /*tp_richcompare */ + 0, /*tp_weaklistoffset */ + 0, /*tp_iter */ + 0, /*tp_iternext */ + symbol_object_methods, /*tp_methods */ + 0, /*tp_members */ + symbol_object_getset /*tp_getset */ }; |