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  <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.
This commit is contained in:
Yao Qi 2017-01-26 14:29:19 +00:00
parent 8e87a59348
commit 80d758749a
4 changed files with 26 additions and 16 deletions

View 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

View 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

View 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

View 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);