From 80d758749a7a679288e6e72b2e849b814413b719 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Thu, 26 Jan 2017 14:29:19 +0000 Subject: [PATCH] New function null_stream 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 * 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 | 7 +++++++ gdb/disasm.c | 17 +---------------- gdb/utils.c | 15 +++++++++++++++ gdb/utils.h | 3 +++ 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8704fb0ba8e..e070b8c9668 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2017-01-26 Yao Qi + + * 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 * python/py-inferior.c (find_thread_object): Return directly diff --git a/gdb/disasm.c b/gdb/disasm.c index f419501b086..ae3a2f10279 100644 --- a/gdb/disasm.c +++ b/gdb/disasm.c @@ -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 diff --git a/gdb/utils.c b/gdb/utils.c index f142ffe2245..ab87143c755 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -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 diff --git a/gdb/utils.h b/gdb/utils.h index c548a500824..9e71cc2792c 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -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); -- 2.30.2