summaryrefslogtreecommitdiff
path: root/gdb/python/py-symbol.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/python/py-symbol.c')
-rw-r--r--gdb/python/py-symbol.c248
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 */
};