btrace: Remove ui_out cleanups
authorSimon Marchi <simon.marchi@polymtl.ca>
Tue, 6 Mar 2018 14:51:33 +0000 (09:51 -0500)
committerSimon Marchi <simon.marchi@ericsson.com>
Tue, 6 Mar 2018 14:51:33 +0000 (09:51 -0500)
This patch replaces the cleanups that close the list and tuple of the
btrace instruction history output with ui_out_emit_tuple and
ui_out_emit_list.

This allows removing make_cleanup_ui_out_tuple_begin_end and
make_cleanup_ui_out_list_begin_end.

This patch (along with the previous ones in the series) was regtested on
the buildbot.

gdb/ChangeLog:

* record-btrace.c (btrace_print_lines): Replace cleanup
parameter with RAII equivalents.
(btrace_insn_history): Replace cleanup with RAII equivalents.
* ui-out.h (make_cleanup_ui_out_list_begin_end,
make_cleanup_ui_out_tuple_begin_end): Remove.
* ui-out.c (struct ui_out_end_cleanup_data, do_cleanup_end,
make_cleanup_ui_out_end, make_cleanup_ui_out_tuple_begin_end,
make_cleanup_ui_out_list_begin_end): Remove.

gdb/ChangeLog
gdb/record-btrace.c
gdb/ui-out.c
gdb/ui-out.h

index dfc22f7a4db30af33ccacf636136ca4e2d9763a1..8e78518ff67bc82d8cebc577f2aa8c352cd40a8d 100644 (file)
@@ -1,3 +1,14 @@
+2018-03-06  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * record-btrace.c (btrace_print_lines): Replace cleanup
+       parameter with RAII equivalents.
+       (btrace_insn_history): Replace cleanup with RAII equivalents.
+       * ui-out.h (make_cleanup_ui_out_list_begin_end,
+       make_cleanup_ui_out_tuple_begin_end): Remove.
+       * ui-out.c (struct ui_out_end_cleanup_data, do_cleanup_end,
+       make_cleanup_ui_out_end, make_cleanup_ui_out_tuple_begin_end,
+       make_cleanup_ui_out_list_begin_end): Remove.
+
 2018-03-06  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * record-btrace.c (record_btrace_maybe_mark_async_event): Change
index 82e06c68921770665188f0914121d3e4132bc7df..e77a6a7d216326761fa9b0168df53244311ca731 100644 (file)
@@ -620,26 +620,24 @@ btrace_find_line_range (CORE_ADDR pc)
 
 static void
 btrace_print_lines (struct btrace_line_range lines, struct ui_out *uiout,
-                   struct cleanup **ui_item_chain, gdb_disassembly_flags flags)
+                   gdb::optional<ui_out_emit_tuple> *src_and_asm_tuple,
+                   gdb::optional<ui_out_emit_list> *asm_list,
+                   gdb_disassembly_flags flags)
 {
   print_source_lines_flags psl_flags;
-  int line;
 
-  psl_flags = 0;
   if (flags & DISASSEMBLY_FILENAME)
     psl_flags |= PRINT_SOURCE_LINES_FILENAME;
 
-  for (line = lines.begin; line < lines.end; ++line)
+  for (int line = lines.begin; line < lines.end; ++line)
     {
-      if (*ui_item_chain != NULL)
-       do_cleanups (*ui_item_chain);
+      asm_list->reset ();
 
-      *ui_item_chain
-       = make_cleanup_ui_out_tuple_begin_end (uiout, "src_and_asm_line");
+      src_and_asm_tuple->emplace (uiout, "src_and_asm_line");
 
       print_source_lines (lines.symtab, line, line + 1, psl_flags);
 
-      make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn");
+      asm_list->emplace (uiout, "line_asm_insn");
     }
 }
 
@@ -652,28 +650,23 @@ btrace_insn_history (struct ui_out *uiout,
                     const struct btrace_insn_iterator *end,
                     gdb_disassembly_flags flags)
 {
-  struct cleanup *cleanups, *ui_item_chain;
-  struct gdbarch *gdbarch;
-  struct btrace_insn_iterator it;
-  struct btrace_line_range last_lines;
-
   DEBUG ("itrace (0x%x): [%u; %u)", (unsigned) flags,
         btrace_insn_number (begin), btrace_insn_number (end));
 
   flags |= DISASSEMBLY_SPECULATIVE;
 
-  gdbarch = target_gdbarch ();
-  last_lines = btrace_mk_line_range (NULL, 0, 0);
+  struct gdbarch *gdbarch = target_gdbarch ();
+  btrace_line_range last_lines = btrace_mk_line_range (NULL, 0, 0);
 
-  cleanups = make_cleanup_ui_out_list_begin_end (uiout, "asm_insns");
+  ui_out_emit_list list_emitter (uiout, "asm_insns");
 
-  /* UI_ITEM_CHAIN is a cleanup chain for the last source line and the
-     instructions corresponding to that line.  */
-  ui_item_chain = NULL;
+  gdb::optional<ui_out_emit_tuple> src_and_asm_tuple;
+  gdb::optional<ui_out_emit_list> asm_list;
 
   gdb_pretty_print_disassembler disasm (gdbarch);
 
-  for (it = *begin; btrace_insn_cmp (&it, end) != 0; btrace_insn_next (&it, 1))
+  for (btrace_insn_iterator it = *begin; btrace_insn_cmp (&it, end) != 0;
+         btrace_insn_next (&it, 1))
     {
       const struct btrace_insn *insn;
 
@@ -708,19 +701,22 @@ btrace_insn_history (struct ui_out *uiout,
              if (!btrace_line_range_is_empty (lines)
                  && !btrace_line_range_contains_range (last_lines, lines))
                {
-                 btrace_print_lines (lines, uiout, &ui_item_chain, flags);
+                 btrace_print_lines (lines, uiout, &src_and_asm_tuple, &asm_list,
+                                     flags);
                  last_lines = lines;
                }
-             else if (ui_item_chain == NULL)
+             else if (!src_and_asm_tuple.has_value ())
                {
-                 ui_item_chain
-                   = make_cleanup_ui_out_tuple_begin_end (uiout,
-                                                          "src_and_asm_line");
+                 gdb_assert (!asm_list.has_value ());
+
+                 src_and_asm_tuple.emplace (uiout, "src_and_asm_line");
+
                  /* No source information.  */
-                 make_cleanup_ui_out_list_begin_end (uiout, "line_asm_insn");
+                 asm_list.emplace (uiout, "line_asm_insn");
                }
 
-             gdb_assert (ui_item_chain != NULL);
+             gdb_assert (src_and_asm_tuple.has_value ());
+             gdb_assert (asm_list.has_value ());
            }
 
          memset (&dinsn, 0, sizeof (dinsn));
@@ -733,8 +729,6 @@ btrace_insn_history (struct ui_out *uiout,
          disasm.pretty_print_insn (uiout, &dinsn, flags);
        }
     }
-
-  do_cleanups (cleanups);
 }
 
 /* The to_insn_history method of target record-btrace.  */
index 0340a44a83be93e960b2191b17ff0d87227167ac..3648815090ce30c3d52be01ef8a04f160692f5ba 100644 (file)
@@ -438,50 +438,6 @@ ui_out::end (ui_out_type type)
   do_end (type);
 }
 
-struct ui_out_end_cleanup_data
-{
-  struct ui_out *uiout;
-  enum ui_out_type type;
-};
-
-static void
-do_cleanup_end (void *data)
-{
-  struct ui_out_end_cleanup_data *end_cleanup_data
-    = (struct ui_out_end_cleanup_data *) data;
-
-  end_cleanup_data->uiout->end (end_cleanup_data->type);
-  xfree (end_cleanup_data);
-}
-
-static struct cleanup *
-make_cleanup_ui_out_end (struct ui_out *uiout,
-                        enum ui_out_type type)
-{
-  struct ui_out_end_cleanup_data *end_cleanup_data;
-
-  end_cleanup_data = XNEW (struct ui_out_end_cleanup_data);
-  end_cleanup_data->uiout = uiout;
-  end_cleanup_data->type = type;
-  return make_cleanup (do_cleanup_end, end_cleanup_data);
-}
-
-struct cleanup *
-make_cleanup_ui_out_tuple_begin_end (struct ui_out *uiout,
-                                    const char *id)
-{
-  uiout->begin (ui_out_type_tuple, id);
-  return make_cleanup_ui_out_end (uiout, ui_out_type_tuple);
-}
-
-struct cleanup *
-make_cleanup_ui_out_list_begin_end (struct ui_out *uiout,
-                                   const char *id)
-{
-  uiout->begin (ui_out_type_list, id);
-  return make_cleanup_ui_out_end (uiout, ui_out_type_list);
-}
-
 void
 ui_out::field_int (const char *fldname, int value)
 {
index 1708542e7ec5b77060e0ae34f02b21fedef5825f..a415100d7ea0401f2d955cac2a1b16cf789467c1 100644 (file)
@@ -66,14 +66,6 @@ enum ui_out_type
     ui_out_type_list
   };
 
-/* Compatibility wrappers.  */
-
-extern struct cleanup *make_cleanup_ui_out_list_begin_end (struct ui_out *uiout,
-                                                          const char *id);
-
-extern struct cleanup *make_cleanup_ui_out_tuple_begin_end (struct ui_out *uiout,
-                                                           const char *id);
-
 class ui_out
 {
  public: