Allow C-c to work in backtrace in more cases
authorTom Tromey <tom@tromey.com>
Tue, 25 Apr 2017 02:59:37 +0000 (20:59 -0600)
committerTom Tromey <tom@tromey.com>
Tue, 27 Mar 2018 03:57:12 +0000 (21:57 -0600)
PR cli/17716 notes that it is difficult to C-c (or "q" at a pagination
prompt) while backtracing using a frame filter.  One reason for this
is that many places in py-framefilter.c use RETURN_MASK_ALL in a
try/catch.

This patch changes these spots to use RETURN_MASK_ERROR instead.  This
is safe to do because this entire file is exception safe now.

gdb/ChangeLog
2018-03-26  Tom Tromey  <tom@tromey.com>

PR cli/17716:
* python/py-framefilter.c (py_print_type, py_print_value)
(enumerate_args, py_print_args, gdbpy_apply_frame_filter): Use
RETURN_MASK_ERROR.

gdb/ChangeLog
gdb/python/py-framefilter.c

index 5cc8d9ef9c5da6f05fbdff4d8bcf01c467532602..9b29e6e9ff79038b5d05a107409df174e7564fe1 100644 (file)
@@ -1,3 +1,10 @@
+2018-03-26  Tom Tromey  <tom@tromey.com>
+
+       PR cli/17716:
+       * python/py-framefilter.c (py_print_type, py_print_value)
+       (enumerate_args, py_print_args, gdbpy_apply_frame_filter): Use
+       RETURN_MASK_ERROR.
+
 2018-03-26  Tom Tromey  <tom@tromey.com>
 
        * python/py-framefilter.c (enumerate_args): Use
index dcac42df8ece65cabbf84f344f137bae44e27f18..28d5c37b25bdb4b59e659f8c1ad15b19503d3cc9 100644 (file)
@@ -215,7 +215,7 @@ py_print_type (struct ui_out *out, struct value *val)
       type_print (value_type (val), "", &stb, -1);
       out->field_stream ("type", stb);
     }
-  CATCH (except, RETURN_MASK_ALL)
+  CATCH (except, RETURN_MASK_ERROR)
     {
       gdbpy_convert_exception (except);
       return EXT_LANG_BT_ERROR;
@@ -255,7 +255,7 @@ py_print_value (struct ui_out *out, struct value *val,
        {
          type = check_typedef (value_type (val));
        }
-      CATCH (except, RETURN_MASK_ALL)
+      CATCH (except, RETURN_MASK_ERROR)
        {
          gdbpy_convert_exception (except);
          return EXT_LANG_BT_ERROR;
@@ -282,7 +282,7 @@ py_print_value (struct ui_out *out, struct value *val,
          common_val_print (val, &stb, indent, opts, language);
          out->field_stream ("value", stb);
        }
-      CATCH (except, RETURN_MASK_ALL)
+      CATCH (except, RETURN_MASK_ERROR)
        {
          gdbpy_convert_exception (except);
          return EXT_LANG_BT_ERROR;
@@ -497,7 +497,7 @@ enumerate_args (PyObject *iter,
     {
       annotate_frame_args ();
     }
-  CATCH (except, RETURN_MASK_ALL)
+  CATCH (except, RETURN_MASK_ERROR)
     {
       gdbpy_convert_exception (except);
       return EXT_LANG_BT_ERROR;
@@ -553,7 +553,7 @@ enumerate_args (PyObject *iter,
            {
              read_frame_arg (sym, frame, &arg, &entryarg);
            }
-         CATCH (except, RETURN_MASK_ALL)
+         CATCH (except, RETURN_MASK_ERROR)
            {
              gdbpy_convert_exception (except);
              return EXT_LANG_BT_ERROR;
@@ -586,7 +586,7 @@ enumerate_args (PyObject *iter,
                      out->text (", ");
                      out->wrap_hint ("    ");
                    }
-                 CATCH (except, RETURN_MASK_ALL)
+                 CATCH (except, RETURN_MASK_ERROR)
                    {
                      gdbpy_convert_exception (except);
                      return EXT_LANG_BT_ERROR;
@@ -622,7 +622,7 @@ enumerate_args (PyObject *iter,
            {
              out->text (", ");
            }
-         CATCH (except, RETURN_MASK_ALL)
+         CATCH (except, RETURN_MASK_ERROR)
            {
              gdbpy_convert_exception (except);
              return EXT_LANG_BT_ERROR;
@@ -636,7 +636,7 @@ enumerate_args (PyObject *iter,
        {
          annotate_arg_end ();
        }
-      CATCH (except, RETURN_MASK_ALL)
+      CATCH (except, RETURN_MASK_ERROR)
        {
          gdbpy_convert_exception (except);
          return EXT_LANG_BT_ERROR;
@@ -867,7 +867,7 @@ py_print_args (PyObject *filter,
       if (! out->is_mi_like_p ())
        out->text (" (");
     }
-  CATCH (except, RETURN_MASK_ALL)
+  CATCH (except, RETURN_MASK_ERROR)
     {
       gdbpy_convert_exception (except);
       return EXT_LANG_BT_ERROR;
@@ -884,7 +884,7 @@ py_print_args (PyObject *filter,
       if (! out->is_mi_like_p ())
        out->text (")");
     }
-  CATCH (except, RETURN_MASK_ALL)
+  CATCH (except, RETURN_MASK_ERROR)
     {
       gdbpy_convert_exception (except);
       return EXT_LANG_BT_ERROR;
@@ -1336,7 +1336,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
     {
       gdbarch = get_frame_arch (frame);
     }
-  CATCH (except, RETURN_MASK_ALL)
+  CATCH (except, RETURN_MASK_ERROR)
     {
       /* Let gdb try to print the stack trace.  */
       return EXT_LANG_BT_NO_FILTERS;