This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH v2 2/8] Python: Fix exception handling in py-record-btrace.c
- From: Tim Wiederhake <tim dot wiederhake at intel dot com>
- To: gdb-patches at sourceware dot org
- Cc: markus dot t dot metzger at intel dot com, brobecker at adacore dot com, qiyaoltc at gmail dot com
- Date: Fri, 21 Apr 2017 12:49:40 +0200
- Subject: [PATCH v2 2/8] Python: Fix exception handling in py-record-btrace.c
- Authentication-results: sourceware.org; auth=none
- References: <1492771786-26372-1-git-send-email-tim.wiederhake@intel.com>
GDB_PY_HANDLE_EXCEPTION does not handle all exceptions. Replace with call to
gdbpy_convert_exception.
2017-04-21 Tim Wiederhake <tim.wiederhake@intel.com>
gdb/ChangeLog:
python/py-record-btrace.c (btpy_insn_sal, btpy_insn_data,
btpy_insn_decode, recpy_bt_goto): Handle all exceptions.
---
gdb/python/py-record-btrace.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/gdb/python/py-record-btrace.c b/gdb/python/py-record-btrace.c
index 0f8d7ef..9d79e2b 100644
--- a/gdb/python/py-record-btrace.c
+++ b/gdb/python/py-record-btrace.c
@@ -227,7 +227,7 @@ btpy_insn_sal (PyObject *self, void *closure)
}
CATCH (except, RETURN_MASK_ALL)
{
- GDB_PY_HANDLE_EXCEPTION (except);
+ gdbpy_convert_exception (except);
}
END_CATCH
@@ -320,10 +320,14 @@ btpy_insn_data (PyObject *self, void *closure)
CATCH (except, RETURN_MASK_ALL)
{
xfree (buffer);
- GDB_PY_HANDLE_EXCEPTION (except);
+ buffer = NULL;
+ gdbpy_convert_exception (except);
}
END_CATCH
+ if (buffer == NULL)
+ return NULL;
+
object = PyBytes_FromStringAndSize ((const char*) buffer, insn->size);
xfree (buffer);
@@ -348,6 +352,7 @@ btpy_insn_decode (PyObject *self, void *closure)
const struct btrace_insn *insn;
struct btrace_insn_iterator iter;
string_file strfile;
+ int length = 0;
BTPY_REQUIRE_VALID_INSN (obj, iter);
@@ -364,15 +369,16 @@ btpy_insn_decode (PyObject *self, void *closure)
TRY
{
- gdb_print_insn (target_gdbarch (), insn->pc, &strfile, NULL);
+ length = gdb_print_insn (target_gdbarch (), insn->pc, &strfile, NULL);
}
CATCH (except, RETURN_MASK_ALL)
{
gdbpy_convert_exception (except);
- return NULL;
}
END_CATCH
+ if (length == 0)
+ return NULL;
return PyBytes_FromString (strfile.string ().c_str ());
}
@@ -871,6 +877,7 @@ recpy_bt_goto (PyObject *self, PyObject *args)
{
struct thread_info * const tinfo = find_thread_ptid (inferior_ptid);
const btpy_object *obj;
+ PyObject *ret = NULL;
if (tinfo == NULL || btrace_is_empty (tinfo))
return PyErr_Format (gdbpy_gdb_error, _("Empty branch trace."));
@@ -891,14 +898,17 @@ recpy_bt_goto (PyObject *self, PyObject *args)
target_goto_record_end ();
else
target_goto_record (obj->number);
+
+ Py_INCREF (Py_None);
+ ret = Py_None;
}
CATCH (except, RETURN_MASK_ALL)
{
- GDB_PY_HANDLE_EXCEPTION (except);
+ gdbpy_convert_exception (except);
}
END_CATCH
- Py_RETURN_NONE;
+ return ret;
}
/* BtraceInstruction members. */
--
2.7.4