forked from Imagelibrary/binutils-gdb
2011-11-28 Phil Muldoon <pmuldoon@redhat.com>
PR python/13369 PR python/13374 * python/python.c (gdbpy_decode_line): Do not acquire GIL. * python/py-inferior.c (inferior_to_inferior_object): Ditto. * python/py-value.c (valpy_nonzero): Use TRY_CATCH to catch GDB exceptions. * python/py-type.c (typy_strip_typedefs): Ditto. (typy_legacy_template_argument): Ditto. * python/py-inferior.c (inferior_to_inferior_object): Ditto. * python/py-breakpoint.c (bppy_set_ignore_count): Ditto.
This commit is contained in:
@@ -1,3 +1,17 @@
|
|||||||
|
2011-11-28 Phil Muldoon <pmuldoon@redhat.com>
|
||||||
|
|
||||||
|
PR python/13369
|
||||||
|
PR python/13374
|
||||||
|
|
||||||
|
* python/python.c (gdbpy_decode_line): Do not acquire GIL.
|
||||||
|
* python/py-inferior.c (inferior_to_inferior_object): Ditto.
|
||||||
|
* python/py-value.c (valpy_nonzero): Use TRY_CATCH to catch GDB
|
||||||
|
exceptions.
|
||||||
|
* python/py-type.c (typy_strip_typedefs): Ditto.
|
||||||
|
(typy_legacy_template_argument): Ditto.
|
||||||
|
* python/py-inferior.c (inferior_to_inferior_object): Ditto.
|
||||||
|
* python/py-breakpoint.c (bppy_set_ignore_count): Ditto.
|
||||||
|
|
||||||
2011-11-27 Joel Brobecker <brobecker@acacore.com>
|
2011-11-27 Joel Brobecker <brobecker@acacore.com>
|
||||||
|
|
||||||
* remote.c (remote_get_tracepoint_status): Delete addrbuf
|
* remote.c (remote_get_tracepoint_status): Delete addrbuf
|
||||||
|
|||||||
@@ -371,14 +371,20 @@ gdbpy_block_for_pc (PyObject *self, PyObject *args)
|
|||||||
{
|
{
|
||||||
gdb_py_ulongest pc;
|
gdb_py_ulongest pc;
|
||||||
struct block *block;
|
struct block *block;
|
||||||
struct obj_section *section;
|
struct obj_section *section = NULL;
|
||||||
struct symtab *symtab;
|
struct symtab *symtab = NULL;
|
||||||
|
volatile struct gdb_exception except;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc))
|
if (!PyArg_ParseTuple (args, GDB_PY_LLU_ARG, &pc))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
section = find_pc_mapped_section (pc);
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||||
symtab = find_pc_sect_symtab (pc, section);
|
{
|
||||||
|
section = find_pc_mapped_section (pc);
|
||||||
|
symtab = find_pc_sect_symtab (pc, section);
|
||||||
|
}
|
||||||
|
GDB_PY_HANDLE_EXCEPTION (except);
|
||||||
|
|
||||||
if (!symtab || symtab->objfile == NULL)
|
if (!symtab || symtab->objfile == NULL)
|
||||||
{
|
{
|
||||||
PyErr_SetString (PyExc_RuntimeError,
|
PyErr_SetString (PyExc_RuntimeError,
|
||||||
|
|||||||
@@ -334,6 +334,7 @@ bppy_set_ignore_count (PyObject *self, PyObject *newvalue, void *closure)
|
|||||||
{
|
{
|
||||||
breakpoint_object *self_bp = (breakpoint_object *) self;
|
breakpoint_object *self_bp = (breakpoint_object *) self;
|
||||||
long value;
|
long value;
|
||||||
|
volatile struct gdb_exception except;
|
||||||
|
|
||||||
BPPY_SET_REQUIRE_VALID (self_bp);
|
BPPY_SET_REQUIRE_VALID (self_bp);
|
||||||
|
|
||||||
@@ -355,7 +356,12 @@ bppy_set_ignore_count (PyObject *self, PyObject *newvalue, void *closure)
|
|||||||
|
|
||||||
if (value < 0)
|
if (value < 0)
|
||||||
value = 0;
|
value = 0;
|
||||||
set_ignore_count (self_bp->number, (int) value, 0);
|
|
||||||
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||||
|
{
|
||||||
|
set_ignore_count (self_bp->number, (int) value, 0);
|
||||||
|
}
|
||||||
|
GDB_PY_SET_HANDLE_EXCEPTION (except);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,15 +157,9 @@ inferior_to_inferior_object (struct inferior *inferior)
|
|||||||
inf_obj = inferior_data (inferior, infpy_inf_data_key);
|
inf_obj = inferior_data (inferior, infpy_inf_data_key);
|
||||||
if (!inf_obj)
|
if (!inf_obj)
|
||||||
{
|
{
|
||||||
struct cleanup *cleanup;
|
|
||||||
cleanup = ensure_python_env (python_gdbarch, python_language);
|
|
||||||
|
|
||||||
inf_obj = PyObject_New (inferior_object, &inferior_object_type);
|
inf_obj = PyObject_New (inferior_object, &inferior_object_type);
|
||||||
if (!inf_obj)
|
if (!inf_obj)
|
||||||
{
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
inf_obj->inferior = inferior;
|
inf_obj->inferior = inferior;
|
||||||
inf_obj->threads = NULL;
|
inf_obj->threads = NULL;
|
||||||
@@ -173,7 +167,6 @@ inferior_to_inferior_object (struct inferior *inferior)
|
|||||||
|
|
||||||
set_inferior_data (inferior, infpy_inf_data_key, inf_obj);
|
set_inferior_data (inferior, infpy_inf_data_key, inf_obj);
|
||||||
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Py_INCREF ((PyObject *)inf_obj);
|
Py_INCREF ((PyObject *)inf_obj);
|
||||||
@@ -266,10 +259,15 @@ delete_thread_object (struct thread_info *tp, int ignore)
|
|||||||
inferior_object *inf_obj;
|
inferior_object *inf_obj;
|
||||||
thread_object *thread_obj;
|
thread_object *thread_obj;
|
||||||
struct threadlist_entry **entry, *tmp;
|
struct threadlist_entry **entry, *tmp;
|
||||||
|
|
||||||
|
cleanup = ensure_python_env (python_gdbarch, python_language);
|
||||||
|
|
||||||
inf_obj = (inferior_object *) find_inferior_object (PIDGET(tp->ptid));
|
inf_obj = (inferior_object *) find_inferior_object (PIDGET(tp->ptid));
|
||||||
if (!inf_obj)
|
if (!inf_obj)
|
||||||
return;
|
{
|
||||||
|
do_cleanups (cleanup);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Find thread entry in its inferior's thread_list. */
|
/* Find thread entry in its inferior's thread_list. */
|
||||||
for (entry = &inf_obj->threads; *entry != NULL; entry =
|
for (entry = &inf_obj->threads; *entry != NULL; entry =
|
||||||
@@ -280,11 +278,10 @@ delete_thread_object (struct thread_info *tp, int ignore)
|
|||||||
if (!*entry)
|
if (!*entry)
|
||||||
{
|
{
|
||||||
Py_DECREF (inf_obj);
|
Py_DECREF (inf_obj);
|
||||||
|
do_cleanups (cleanup);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup = ensure_python_env (python_gdbarch, python_language);
|
|
||||||
|
|
||||||
tmp = *entry;
|
tmp = *entry;
|
||||||
tmp->thread_obj->thread = NULL;
|
tmp->thread_obj->thread = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -395,6 +395,13 @@ static PyObject *
|
|||||||
typy_strip_typedefs (PyObject *self, PyObject *args)
|
typy_strip_typedefs (PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
struct type *type = ((type_object *) self)->type;
|
struct type *type = ((type_object *) self)->type;
|
||||||
|
volatile struct gdb_exception except;
|
||||||
|
|
||||||
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||||
|
{
|
||||||
|
type = check_typedef (type);
|
||||||
|
}
|
||||||
|
GDB_PY_HANDLE_EXCEPTION (except);
|
||||||
|
|
||||||
return type_to_type_object (check_typedef (type));
|
return type_to_type_object (check_typedef (type));
|
||||||
}
|
}
|
||||||
@@ -768,10 +775,11 @@ typy_legacy_template_argument (struct type *type, const struct block *block,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct demangle_component *demangled;
|
struct demangle_component *demangled;
|
||||||
struct demangle_parse_info *info;
|
struct demangle_parse_info *info = NULL;
|
||||||
const char *err;
|
const char *err;
|
||||||
struct type *argtype;
|
struct type *argtype;
|
||||||
struct cleanup *cleanup;
|
struct cleanup *cleanup;
|
||||||
|
volatile struct gdb_exception except;
|
||||||
|
|
||||||
if (TYPE_NAME (type) == NULL)
|
if (TYPE_NAME (type) == NULL)
|
||||||
{
|
{
|
||||||
@@ -779,8 +787,13 @@ typy_legacy_template_argument (struct type *type, const struct block *block,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note -- this is not thread-safe. */
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||||
info = cp_demangled_name_to_comp (TYPE_NAME (type), &err);
|
{
|
||||||
|
/* Note -- this is not thread-safe. */
|
||||||
|
info = cp_demangled_name_to_comp (TYPE_NAME (type), &err);
|
||||||
|
}
|
||||||
|
GDB_PY_HANDLE_EXCEPTION (except);
|
||||||
|
|
||||||
if (! info)
|
if (! info)
|
||||||
{
|
{
|
||||||
PyErr_SetString (PyExc_RuntimeError, err);
|
PyErr_SetString (PyExc_RuntimeError, err);
|
||||||
|
|||||||
@@ -880,10 +880,10 @@ valpy_nonzero (PyObject *self)
|
|||||||
struct type *type;
|
struct type *type;
|
||||||
int nonzero = 0; /* Appease GCC warning. */
|
int nonzero = 0; /* Appease GCC warning. */
|
||||||
|
|
||||||
type = check_typedef (value_type (self_value->value));
|
|
||||||
|
|
||||||
TRY_CATCH (except, RETURN_MASK_ALL)
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||||
{
|
{
|
||||||
|
type = check_typedef (value_type (self_value->value));
|
||||||
|
|
||||||
if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
|
if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
|
||||||
nonzero = !!value_as_long (self_value->value);
|
nonzero = !!value_as_long (self_value->value);
|
||||||
else if (TYPE_CODE (type) == TYPE_CODE_FLT)
|
else if (TYPE_CODE (type) == TYPE_CODE_FLT)
|
||||||
|
|||||||
@@ -504,7 +504,7 @@ gdbpy_decode_line (PyObject *self, PyObject *args)
|
|||||||
if (! PyArg_ParseTuple (args, "|s", &arg))
|
if (! PyArg_ParseTuple (args, "|s", &arg))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
cleanups = ensure_python_env (get_current_arch (), current_language);
|
cleanups = make_cleanup (null_cleanup, NULL);
|
||||||
|
|
||||||
TRY_CATCH (except, RETURN_MASK_ALL)
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user