This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH v2 2/8] Python: Fix exception handling in py-record-btrace.c


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]