New function null_stream
authorYao Qi <yao.qi@linaro.org>
Thu, 26 Jan 2017 14:29:19 +0000 (14:29 +0000)
committerYao Qi <yao.qi@linaro.org>
Thu, 26 Jan 2017 14:29:19 +0000 (14:29 +0000)
This patch adds a new function null_stream, which returns a null
stream.  The null stream can be used in multiple places.  It is
used in gdb_insn_length, and the following patches will use it too.

gdb:

2017-01-26  Yao Qi  <yao.qi@linaro.org>

* disasm.c (do_ui_file_delete): Delete.
(gdb_insn_length): Move code creating stream to ...
* utils.c (null_stream): ... here.  New function.
* utils.h (null_stream): Declare.

gdb/ChangeLog
gdb/disasm.c
gdb/utils.c
gdb/utils.h

index 8704fb0ba8e0cdc7f690c6e1fe83bbe866fb1ebd..e070b8c9668a1f2c6042f639ae9f8a9a56ad8532 100644 (file)
@@ -1,3 +1,10 @@
+2017-01-26  Yao Qi  <yao.qi@linaro.org>
+
+       * disasm.c (do_ui_file_delete): Delete.
+       (gdb_insn_length): Move code creating stream to ...
+       * utils.c (null_stream): ... here.  New function.
+       * utils.h (null_stream): Declare.
+
 2017-01-23  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * python/py-inferior.c (find_thread_object): Return directly
index f419501b0863d6981307c5c5d661e1af33030c35..ae3a2f10279d2f86eafed03f6d12db1d6cce44a9 100644 (file)
@@ -838,28 +838,13 @@ gdb_print_insn (struct gdbarch *gdbarch, CORE_ADDR memaddr,
   return length;
 }
 
-static void
-do_ui_file_delete (void *arg)
-{
-  ui_file_delete ((struct ui_file *) arg);
-}
-
 /* Return the length in bytes of the instruction at address MEMADDR in
    debugged memory.  */
 
 int
 gdb_insn_length (struct gdbarch *gdbarch, CORE_ADDR addr)
 {
-  static struct ui_file *null_stream = NULL;
-
-  /* Dummy file descriptor for the disassembler.  */
-  if (!null_stream)
-    {
-      null_stream = ui_file_new ();
-      make_final_cleanup (do_ui_file_delete, null_stream);
-    }
-
-  return gdb_print_insn (gdbarch, addr, null_stream, NULL);
+  return gdb_print_insn (gdbarch, addr, null_stream (), NULL);
 }
 
 /* fprintf-function for gdb_buffered_insn_length.  This function is a
index f142ffe22452daf2a8b5741175d8962982f1246e..ab87143c755e767cfd23c69d177d0385aae4f9eb 100644 (file)
@@ -199,6 +199,21 @@ make_cleanup_ui_file_delete (struct ui_file *arg)
   return make_cleanup (do_ui_file_delete, arg);
 }
 
+struct ui_file *
+null_stream (void)
+{
+  /* A simple implementation of singleton pattern.  */
+  static struct ui_file *stream = NULL;
+
+  if (stream == NULL)
+    {
+      stream = ui_file_new ();
+      /* Delete it on gdb exit.  */
+      make_final_cleanup (do_ui_file_delete, stream);
+    }
+  return stream;
+}
+
 /* Helper function for make_cleanup_ui_out_redirect_pop.  */
 
 static void
index c548a500824c3a2454c95ed64bf1e033b03461cc..9e71cc2792ce4b1a663aca6f752748f1ff808d98 100644 (file)
@@ -189,6 +189,9 @@ extern struct ui_file *gdb_stdtarg;
 extern struct ui_file *gdb_stdtargerr;
 extern struct ui_file *gdb_stdtargin;
 
+/* Return a null stream.  */
+extern struct ui_file *null_stream (void);
+
 /* Set the screen dimensions to WIDTH and HEIGHT.  */
 
 extern void set_screen_width_and_height (int width, int height);