projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb: ARM: Fix for memory record corruption due to 64bit addresses
[deliverable/binutils-gdb.git]
/
gdb
/
python
/
py-prettyprint.c
diff --git
a/gdb/python/py-prettyprint.c
b/gdb/python/py-prettyprint.c
index b50e757a01863c2f0caf4a2221854af18e3594ef..879f0dee009a79bbccd5d33cd0429bf2f6c96ae6 100644
(file)
--- a/
gdb/python/py-prettyprint.c
+++ b/
gdb/python/py-prettyprint.c
@@
-1,6
+1,6
@@
/* Python pretty-printing
/* Python pretty-printing
- Copyright (C) 2008-201
3
Free Software Foundation, Inc.
+ Copyright (C) 2008-201
4
Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-69,6
+69,7
@@
search_pp_list (PyObject *list, PyObject *value)
if (!attr)
return NULL;
cmp = PyObject_IsTrue (attr);
if (!attr)
return NULL;
cmp = PyObject_IsTrue (attr);
+ Py_DECREF (attr);
if (cmp == -1)
return NULL;
if (cmp == -1)
return NULL;
@@
-121,7
+122,7
@@
find_pretty_printer_from_objfiles (PyObject *value)
if (function != Py_None)
return function;
if (function != Py_None)
return function;
-
+
Py_DECREF (function);
}
Py_DECREF (function);
}
@@
-224,7
+225,7
@@
pretty_print_one_value (PyObject *printer, struct value **out_value)
result = PyObject_CallMethodObjArgs (printer, gdbpy_to_string_cst, NULL);
if (result)
{
result = PyObject_CallMethodObjArgs (printer, gdbpy_to_string_cst, NULL);
if (result)
{
- if (! gdbpy_is_string (result) && ! gdbpy_is_lazy_string (result)
+ if (! gdbpy_is_string (result) && ! gdbpy_is_lazy_string (result)
&& result != Py_None)
{
*out_value = convert_value_from_python (result);
&& result != Py_None)
{
*out_value = convert_value_from_python (result);
@@
-510,16
+511,16
@@
print_children (PyObject *printer, const char *hint,
}
make_cleanup_py_decref (iter);
}
make_cleanup_py_decref (iter);
- /* Use the pretty
prin
t_arrays option if we are printing an array,
+ /* Use the pretty
forma
t_arrays option if we are printing an array,
and the pretty option otherwise. */
if (is_array)
and the pretty option otherwise. */
if (is_array)
- pretty = options->pretty
prin
t_arrays;
+ pretty = options->pretty
forma
t_arrays;
else
{
else
{
- if (options->pretty
== Val_prettyprin
t)
+ if (options->pretty
format == Val_prettyforma
t)
pretty = 1;
else
pretty = 1;
else
- pretty = options->pretty
prin
t_structs;
+ pretty = options->pretty
forma
t_structs;
}
/* Manufacture a dummy Python frame to work around Python 2.4 bug,
}
/* Manufacture a dummy Python frame to work around Python 2.4 bug,
@@
-548,7
+549,7
@@
print_children (PyObject *printer, const char *hint,
print_stack_unless_memory_error (stream);
/* Set a flag so we can know whether we printed all the
available elements. */
print_stack_unless_memory_error (stream);
/* Set a flag so we can know whether we printed all the
available elements. */
- else
+ else
done_flag = 1;
break;
}
done_flag = 1;
break;
}
@@
-629,8
+630,6
@@
print_children (PyObject *printer, const char *hint,
local_opts.addressprint = 0;
val_print_string (type, encoding, addr, (int) length, stream,
&local_opts);
local_opts.addressprint = 0;
val_print_string (type, encoding, addr, (int) length, stream,
&local_opts);
-
- do_cleanups (inner_cleanup);
}
else if (gdbpy_is_string (py_v))
{
}
else if (gdbpy_is_string (py_v))
{
@@
-708,6
+707,9
@@
apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type)))
return 0;
if (!value_bytes_available (val, embedded_offset, TYPE_LENGTH (type)))
return 0;
+ if (!gdb_python_initialized)
+ return 0;
+
cleanups = ensure_python_env (gdbarch, language);
/* Instantiate the printer. */
cleanups = ensure_python_env (gdbarch, language);
/* Instantiate the printer. */
@@
-727,12
+729,16
@@
apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
val_obj = value_to_value_object (value);
if (! val_obj)
goto done;
val_obj = value_to_value_object (value);
if (! val_obj)
goto done;
-
+
/* Find the constructor. */
printer = find_pretty_printer (val_obj);
Py_DECREF (val_obj);
/* Find the constructor. */
printer = find_pretty_printer (val_obj);
Py_DECREF (val_obj);
+
+ if (printer == NULL)
+ goto done;
+
make_cleanup_py_decref (printer);
make_cleanup_py_decref (printer);
- if (
! printer ||
printer == Py_None)
+ if (printer == Py_None)
goto done;
/* If we are printing a map, we want some special formatting. */
goto done;
/* If we are printing a map, we want some special formatting. */
@@
-784,7
+790,7
@@
apply_varobj_pretty_printer (PyObject *printer_obj,
/* Find a pretty-printer object for the varobj module. Returns a new
reference to the object if successful; returns NULL if not. VALUE
/* Find a pretty-printer object for the varobj module. Returns a new
reference to the object if successful; returns NULL if not. VALUE
- is the value for which a printer tests to determine if it
+ is the value for which a printer tests to determine if it
can pretty-print the value. */
PyObject *
gdbpy_get_varobj_pretty_printer (struct value *value)
can pretty-print the value. */
PyObject *
gdbpy_get_varobj_pretty_printer (struct value *value)
@@
-798,7
+804,7
@@
gdbpy_get_varobj_pretty_printer (struct value *value)
value = value_copy (value);
}
GDB_PY_HANDLE_EXCEPTION (except);
value = value_copy (value);
}
GDB_PY_HANDLE_EXCEPTION (except);
-
+
val_obj = value_to_value_object (value);
if (! val_obj)
return NULL;
val_obj = value_to_value_object (value);
if (! val_obj)
return NULL;
@@
-824,7
+830,7
@@
gdbpy_default_visualizer (PyObject *self, PyObject *args)
value = value_object_to_value (val_obj);
if (! value)
{
value = value_object_to_value (val_obj);
if (! value)
{
- PyErr_SetString (PyExc_TypeError,
+ PyErr_SetString (PyExc_TypeError,
_("Argument must be a gdb.Value."));
return NULL;
}
_("Argument must be a gdb.Value."));
return NULL;
}
This page took
0.040588 seconds
and
4
git commands to generate.