2000-02-03 05:14:45 +01:00
|
|
|
|
/* Output generating routines for GDB CLI.
|
2002-03-19 03:51:09 +01:00
|
|
|
|
|
2015-01-01 10:32:14 +01:00
|
|
|
|
Copyright (C) 1999-2015 Free Software Foundation, Inc.
|
2002-03-19 03:51:09 +01:00
|
|
|
|
|
2000-02-03 05:14:45 +01:00
|
|
|
|
Contributed by Cygnus Solutions.
|
|
|
|
|
Written by Fernando Nasser for Cygnus.
|
|
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-23 20:08:50 +02:00
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2000-02-03 05:14:45 +01:00
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-23 20:08:50 +02:00
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
|
#include "ui-out.h"
|
|
|
|
|
#include "cli-out.h"
|
Unify CLI/TUI interface to readline tab completion.
This copies a lot of code from readline, but this is temporary.
Readline currently doesn't export what we need.
The plan is to have something that has been working for awhile,
and then we'll have a complete story to present to the readline
maintainers.
gdb/ChangeLog:
* cli-out.c: #include completer.h, readline/readline.h.
(cli_mld_crlf, cli_mld_putch, cli_mld_puts): New functions.
(cli_mld_flush, cld_mld_erase_entire_line): Ditto.
(cli_mld_beep, cli_mld_read_key, cli_display_match_list): Ditto.
* cli-out.h (cli_display_match_list): Declare.
* completer.c (MB_INVALIDCH, MB_NULLWCH): New macros.
(ELLIPSIS_LEN): Ditto.
(gdb_get_y_or_n, gdb_display_match_list_pager): New functions.
(gdb_path_isdir, gdb_printable_part, gdb_fnwidth): Ditto.
(gdb_fnprint, gdb_print_filename): Ditto.
(gdb_complete_get_screenwidth, gdb_display_match_list_1): Ditto.
(gdb_display_match_list): Ditto.
* completer.h (mld_crlf_ftype, mld_putch_ftype): New typedefs.
(mld_puts_ftype, mld_flush_ftype, mld_erase_entire_line_ftype): Ditto.
(mld_beep_ftype, mld_read_key_ftype): Ditto.
(match_list_displayer): New struct.
(gdb_display_match_list): Declare.
* top.c (init_main): Set rl_completion_display_matches_hook.
* tui/tui-io.c: #include completer.h.
(printable_part, PUTX, print_filename, get_y_or_n): Delete.
(tui_mld_crlf, tui_mld_putch, tui_mld_puts): New functions.
(tui_mld_flush, tui_mld_erase_entire_line, tui_mld_beep): Ditto.
(tui_mld_getc, tui_mld_read_key): Ditto.
(tui_rl_display_match_list): Rewrite.
(tui_handle_resize_during_io): New arg for_completion. All callers
updated.
2015-01-31 23:11:54 +01:00
|
|
|
|
#include "completer.h"
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
#include "vec.h"
|
Unify CLI/TUI interface to readline tab completion.
This copies a lot of code from readline, but this is temporary.
Readline currently doesn't export what we need.
The plan is to have something that has been working for awhile,
and then we'll have a complete story to present to the readline
maintainers.
gdb/ChangeLog:
* cli-out.c: #include completer.h, readline/readline.h.
(cli_mld_crlf, cli_mld_putch, cli_mld_puts): New functions.
(cli_mld_flush, cld_mld_erase_entire_line): Ditto.
(cli_mld_beep, cli_mld_read_key, cli_display_match_list): Ditto.
* cli-out.h (cli_display_match_list): Declare.
* completer.c (MB_INVALIDCH, MB_NULLWCH): New macros.
(ELLIPSIS_LEN): Ditto.
(gdb_get_y_or_n, gdb_display_match_list_pager): New functions.
(gdb_path_isdir, gdb_printable_part, gdb_fnwidth): Ditto.
(gdb_fnprint, gdb_print_filename): Ditto.
(gdb_complete_get_screenwidth, gdb_display_match_list_1): Ditto.
(gdb_display_match_list): Ditto.
* completer.h (mld_crlf_ftype, mld_putch_ftype): New typedefs.
(mld_puts_ftype, mld_flush_ftype, mld_erase_entire_line_ftype): Ditto.
(mld_beep_ftype, mld_read_key_ftype): Ditto.
(match_list_displayer): New struct.
(gdb_display_match_list): Declare.
* top.c (init_main): Set rl_completion_display_matches_hook.
* tui/tui-io.c: #include completer.h.
(printable_part, PUTX, print_filename, get_y_or_n): Delete.
(tui_mld_crlf, tui_mld_putch, tui_mld_puts): New functions.
(tui_mld_flush, tui_mld_erase_entire_line, tui_mld_beep): Ditto.
(tui_mld_getc, tui_mld_read_key): Ditto.
(tui_rl_display_match_list): Rewrite.
(tui_handle_resize_during_io): New arg for_completion. All callers
updated.
2015-01-31 23:11:54 +01:00
|
|
|
|
#include "readline/readline.h"
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
PR tui/9217
* tui/tui-out.c: Include cli-out.h.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end, tui_field_int, tui_field_skip)
(tui_field_string, tui_field_fmt, tui_spaces, tui_text)
(tui_message, tui_wrap_hint, tui_flush): Delete forward
declarations.
(struct ui_out_data): Rename to...
(struct tui_ui_out_data): ... this. Remove `stream' and
`suppress_output' fields, and inherit cli_ui_out_data.
(tui_out_data): New typedef.
(tui_ui_out_impl): Don't initialize fields staticaly.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end): Delete.
(tui_field_int): Adjust to delegate most work to the base type.
(tui_field_skip): Delete.
(tui_field_string, tui_field_fmt): Adjust comment. Adjust to
delegate most work to the base type.
(tui_spaces): Delete.
(tui_text): Adjust to delegate most work to the base type.
(tui_message): Delete.
(tui_wrap_hint): Delete.
(tui_flush): Delete.
(out_field_fmt): Delete.
(field_separator): Delete.
(tui_out_new): Adjust to initialize the base type.
(_initialize_tui_out): Initialize tui_ui_out_impl.
* cli-out.c (struct ui_out_data): Moved out to cli-out.h, renamed
cli_ui_out_data.
(cli_out_data): Adjust.
(cli_ui_out_impl): Make extern.
(cli_table_header, cli_field_int, cli_field_skip): Use
uo_field_string instead of cli_field_string.
(cli_redirect): Adjust to use cli_out_data.
(cli_out_data_ctor): New.
(cli_out_new): Use it.
* cli-out.h (struct ui_file): Remove forward declaration.
(struct cli_ui_out_data): New, moved from cli-out.c, and renamed.
(cli_ui_out_impl): Declare.
(cli_out_data_ctor): Declare.
* ui-out.c (struct ui_out) <data>: Change type to void pointer.
(uo_field_string): No longer static.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
* ui-out.h (struct ui_out_data): Don't forward declare.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
(uo_field_string): Declare.
2010-04-18 02:11:55 +02:00
|
|
|
|
typedef struct cli_ui_out_data cli_out_data;
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
|
|
|
|
/* Prototypes for local functions */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void cli_text (struct ui_out *uiout, const char *string);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
|
|
|
|
static void field_separator (void);
|
|
|
|
|
|
2001-06-10 02:22:41 +02:00
|
|
|
|
static void out_field_fmt (struct ui_out *uiout, int fldno,
|
|
|
|
|
const char *fldname,
|
gdb/
* ada-lang.c (lim_warning): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* amd64-tdep.c (amd64_insn_length_fprintf): Likewise.
* cli-out.c (cli_field_fmt): New ATTRIBUTE_PRINTF.
(cli_message, out_field_fmt): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* complaints.c (find_complaint): New ATTRIBUTE_PRINTF.
(vcomplaint): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* complaints.h (complaint, internal_complaint): Likewise.
* defs.h: Change ATTR_FORMAT to ATTRIBUTE_PRINTF in the top comment.
(ATTR_FORMAT): Remove.
(query, nquery, yquery, vprintf_filtered, vfprintf_filtered)
(fprintf_filtered, fprintfi_filtered, printf_filtered, printfi_filtered)
(vprintf_unfiltered, vfprintf_unfiltered, fprintf_unfiltered)
(printf_unfiltered, xasprintf, xvasprintf, xstrprintf, xstrvprintf)
(xsnprintf, verror, error, vfatal, fatal, internal_verror)
(internal_error, internal_vwarning, internal_warning, warning)
(vwarning): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* disasm.c (fprintf_disasm): Likewise.
* exceptions.c (throw_it): Likewise.
* exceptions.h (exception_fprintf, throw_verror, throw_vfatal)
(throw_error): Likewise.
* language.h (type_error, range_error): Likewise.
* linespec.c (cplusplus_error): Likewise.
* mi/mi-interp.c (mi_interp_query_hook): Likewise.
* mi/mi-out.c (mi_field_fmt, mi_message): Likewise.
* monitor.c (monitor_debug): Likewise.
* parser-defs.h (parser_fprintf): Likewise.
* serial.h (serial_printf): Likewise.
* tui/tui-hooks.c (tui_query_hook): Likewise.
* ui-out.c (default_field_fmt, default_message, uo_field_fmt)
(uo_message): Likewise.
* ui-out.h (ui_out_field_fmt, ui_out_message): Likewise.
* utils.c (vfprintf_maybe_filtered, internal_vproblem, defaulted_query):
Likewise.
* xml-support.h (gdb_xml_debug, gdb_xml_error): Likewise.
2010-05-02 23:14:59 +02:00
|
|
|
|
const char *format,...) ATTRIBUTE_PRINTF (4, 5);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
PR gdb/13860: don't lose '-interpreter-exec console EXECUTION_COMMAND''s output in async mode.
The other part of PR gdb/13860 is about console execution commands in
MI getting their output half lost. E.g., take the finish command,
executed on a frontend's GDB console:
sync:
finish
&"finish\n"
~"Run till exit from #0 usleep (useconds=10) at ../sysdeps/unix/sysv/linux/usleep.c:27\n"
^running
*running,thread-id="1"
(gdb)
~"0x00000000004004d7 in foo () at stepinf.c:6\n"
~"6\t usleep (10);\n"
~"Value returned is $1 = 0\n"
*stopped,reason="function-finished",frame={addr="0x00000000004004d7",func="foo",args=[],file="stepinf.c",fullname="/home/pedro/gdb/tests/stepinf.c",line="6"},thread-id="1",stopped-threads="all",core="1"
async:
finish
&"finish\n"
~"Run till exit from #0 usleep (useconds=10) at ../sysdeps/unix/sysv/linux/usleep.c:27\n"
^running
*running,thread-id="1"
(gdb)
*stopped,reason="function-finished",frame={addr="0x00000000004004d7",func="foo",args=[],file="stepinf.c",fullname="/home/pedro/gdb/tests/stepinf.c",line="6"},gdb-result-var="$1",return-value="0",thread-id="1",stopped-threads="all",core="0"
Note how all the "Value returned" etc. output is missing in async mode.
The same happens with e.g., catchpoints:
=breakpoint-modified,bkpt={number="1",type="catchpoint",disp="keep",enabled="y",what="22016",times="1"}
~"\nCatchpoint "
~"1 (forked process 22016), 0x0000003791cbd8a6 in __libc_fork () at ../nptl/sysdeps/unix/sysv/linux/fork.c:131\n"
~"131\t pid = ARCH_FORK ();\n"
*stopped,reason="fork",disp="keep",bkptno="1",newpid="22016",frame={addr="0x0000003791cbd8a6",func="__libc_fork",args=[],file="../nptl/sysdeps/unix/sysv/linux/fork.c",fullname="/usr/src/debug/glibc-2.14-394-g8f3b1ff/nptl/sysdeps/unix/sysv/linux/fork.c",line="131"},thread-id="1",stopped-threads="all",core="0"
where all those ~ lines are missing in async mode, or just the "step"
current line indication:
s
&"s\n"
^running
*running,thread-id="all"
(gdb)
~"13\t foo ();\n"
*stopped,frame={addr="0x00000000004004ef",func="main",args=[{name="argc",value="1"},{name="argv",value="0x7fffffffdd78"}],file="stepinf.c",fullname="/home/pedro/gdb/tests/stepinf.c",line="13"},thread-id="1",stopped-threads="all",core="3"
(gdb)
Or in the case of the PRs example, the "Stopped due to shared library
event" note:
start
&"start\n"
~"Temporary breakpoint 1 at 0x400608: file ../../../src/gdb/testsuite/gdb.mi/solib-main.c, line 21.\n"
=breakpoint-created,bkpt={number="1",type="breakpoint",disp="del",enabled="y",addr="0x0000000000400608",func="main",file="../../../src/gdb/testsuite/gdb.mi/solib-main.c",fullname="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.mi/solib-main.c",line="21",times="0",original-location="main"}
~"Starting program: /home/pedro/gdb/mygit/build/gdb/testsuite/gdb.mi/solib-main \n"
=thread-group-started,id="i1",pid="21990"
=thread-created,id="1",group-id="i1"
^running
*running,thread-id="all"
(gdb)
=library-loaded,id="/lib64/ld-linux-x86-64.so.2",target-name="/lib64/ld-linux-x86-64.so.2",host-name="/lib64/ld-linux-x86-64.so.2",symbols-loaded="0",thread-group="i1"
~"Stopped due to shared library event (no libraries added or removed)\n"
*stopped,reason="solib-event",thread-id="1",stopped-threads="all",core="3"
(gdb)
IMO, if you're typing execution commands in a frontend's console, you
expect to see their output. Indeed it's what you get in sync mode. I
think async mode should do the same. Deciding what to mirror to the
console wrt to breakpoints and random stops gets messy real fast.
E.g., say "s" trips on a breakpoint. We'd clearly want to mirror the
event to the console in this case. But what about more complicated
cases like "s&; thread n; s&", and one of those steps spawning a new
thread, and that thread hitting a breakpoint? It's impossible in
general to track whether the thread had any relation to the commands
that had been executed. So I think we should just simplify and always
mirror breakpoints and random events to the console.
Notes:
- mi->out is the same as gdb_stdout when MI is the current
interpreter. I think that referring to that directly is cleaner.
An earlier revision of this patch made the changes that are now
done in mi_on_normal_stop directly in infrun.c:normal_stop, and so
not having an obvious place to put the new uiout by then, and not
wanting to abuse CLI's uiout, I made a temporary uiout when
necessary.
- Hopefuly the rest of the patch is more or less obvious given the
comments added.
Tested on x86_64 Fedora 20, no regressions.
2014-05-21 Pedro Alves <palves@redhat.com>
PR gdb/13860
* gdbthread.h (struct thread_control_state): New field
`command_interp'.
* infrun.c (follow_fork): Copy the new thread control field to the
child fork thread.
(clear_proceed_status_thread): Clear the new thread control field.
(proceed): Set the new thread control field.
* interps.h (command_interp): Declare.
* interps.c (command_interpreter): New global.
(command_interp): New function.
(interp_exec): Set `command_interpreter' while here.
* cli-out.c (cli_uiout_dtor): New function.
(cli_ui_out_impl): Install it.
* mi/mi-interp.c: Include cli-out.h.
(mi_cmd_interpreter_exec): Add comment.
(restore_current_uiout_cleanup): New function.
(ui_out_free_cleanup): New function.
(mi_on_normal_stop): If finishing an execution command started by
a CLI command, or any kind of breakpoint-like event triggered,
print the stop event to the output (CLI) stream.
* mi/mi-out.c (mi_ui_out_impl): Install NULL `dtor' handler.
2014-05-21 Pedro Alves <palves@redhat.com>
PR gdb/13860
* gdb.mi/mi-cli.exp (line_callee4_next_step): New global.
(top level): Test that output related to execution commands is
sent to the console with CLI commands, but not with MI commands.
Test that breakpoint events are always mirrored to the console.
Also expect the new source line to be output after a "next" in
async mode too. Make it a pass/fail test.
* gdb.mi/mi-solib.exp: Test that the CLI solib event note is
output.
* lib/mi-support.exp (mi_gdb_expect_cli_output): New procedure.
2014-03-11 21:31:36 +01:00
|
|
|
|
/* The destructor. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
cli_uiout_dtor (struct ui_out *ui_out)
|
|
|
|
|
{
|
|
|
|
|
cli_out_data *data = ui_out_data (ui_out);
|
|
|
|
|
|
|
|
|
|
VEC_free (ui_filep, data->streams);
|
|
|
|
|
xfree (data);
|
|
|
|
|
}
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
/* These are the CLI output functions */
|
|
|
|
|
|
2000-02-03 05:14:45 +01:00
|
|
|
|
/* Mark beginning of a table */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2001-06-10 02:22:41 +02:00
|
|
|
|
cli_table_begin (struct ui_out *uiout, int nbrofcols,
|
2001-06-19 18:19:16 +02:00
|
|
|
|
int nr_rows,
|
2001-06-10 02:22:41 +02:00
|
|
|
|
const char *tblid)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (nr_rows == 0)
|
|
|
|
|
data->suppress_output = 1;
|
|
|
|
|
else
|
Index: mi/ChangeLog
2003-10-24 Andrew Cagney <cagney@redhat.com>
* tui-out.c: Fix "fortunatly"[sic].
Index: doc/ChangeLog
2003-10-24 Andrew Cagney <cagney@redhat.com>
* annotate.texinfo: Fix "fortunatly"[sic].
2003-10-24 Andrew Cagney <cagney@redhat.com>
* osabi.c (gdbarch_init_osabi): Fix typos, and "fortunatly"[sic].
* PROBLEMS, arch-utils.c, cli-out.c, command.h: Ditto.
* complaints.c, cris-tdep.c, disasm.c, dwarf2-frame.c: Ditto.
* frame.c, frame.h, infcall.c, infcmd.c, infrun.c: Ditto.
* kod.c, mips-tdep.c, regcache.c, regcache.h, remote.c: Ditto.
2003-10-24 19:37:04 +02:00
|
|
|
|
/* Only the table suppresses the output and, fortunately, a table
|
2005-01-14 00:39:40 +01:00
|
|
|
|
is not a recursive data structure. */
|
2001-06-19 22:30:11 +02:00
|
|
|
|
gdb_assert (data->suppress_output == 0);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Mark beginning of a table body */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
cli_table_body (struct ui_out *uiout)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
2000-02-03 05:14:45 +01:00
|
|
|
|
/* first, close the table header line */
|
|
|
|
|
cli_text (uiout, "\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Mark end of a table */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
cli_table_end (struct ui_out *uiout)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
data->suppress_output = 0;
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Specify table header */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
cli_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
|
2001-06-21 17:39:54 +02:00
|
|
|
|
const char *col_name,
|
2001-06-10 02:22:41 +02:00
|
|
|
|
const char *colhdr)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
PR tui/9217
* tui/tui-out.c: Include cli-out.h.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end, tui_field_int, tui_field_skip)
(tui_field_string, tui_field_fmt, tui_spaces, tui_text)
(tui_message, tui_wrap_hint, tui_flush): Delete forward
declarations.
(struct ui_out_data): Rename to...
(struct tui_ui_out_data): ... this. Remove `stream' and
`suppress_output' fields, and inherit cli_ui_out_data.
(tui_out_data): New typedef.
(tui_ui_out_impl): Don't initialize fields staticaly.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end): Delete.
(tui_field_int): Adjust to delegate most work to the base type.
(tui_field_skip): Delete.
(tui_field_string, tui_field_fmt): Adjust comment. Adjust to
delegate most work to the base type.
(tui_spaces): Delete.
(tui_text): Adjust to delegate most work to the base type.
(tui_message): Delete.
(tui_wrap_hint): Delete.
(tui_flush): Delete.
(out_field_fmt): Delete.
(field_separator): Delete.
(tui_out_new): Adjust to initialize the base type.
(_initialize_tui_out): Initialize tui_ui_out_impl.
* cli-out.c (struct ui_out_data): Moved out to cli-out.h, renamed
cli_ui_out_data.
(cli_out_data): Adjust.
(cli_ui_out_impl): Make extern.
(cli_table_header, cli_field_int, cli_field_skip): Use
uo_field_string instead of cli_field_string.
(cli_redirect): Adjust to use cli_out_data.
(cli_out_data_ctor): New.
(cli_out_new): Use it.
* cli-out.h (struct ui_file): Remove forward declaration.
(struct cli_ui_out_data): New, moved from cli-out.c, and renamed.
(cli_ui_out_impl): Declare.
(cli_out_data_ctor): Declare.
* ui-out.c (struct ui_out) <data>: Change type to void pointer.
(uo_field_string): No longer static.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
* ui-out.h (struct ui_out_data): Don't forward declare.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
(uo_field_string): Declare.
2010-04-18 02:11:55 +02:00
|
|
|
|
|
|
|
|
|
/* Always go through the function pointer (virtual function call).
|
|
|
|
|
We may have been extended. */
|
|
|
|
|
uo_field_string (uiout, 0, width, alignment, 0, colhdr);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Mark beginning of a list */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2001-05-09 03:33:10 +02:00
|
|
|
|
cli_begin (struct ui_out *uiout,
|
|
|
|
|
enum ui_out_type type,
|
|
|
|
|
int level,
|
|
|
|
|
const char *id)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Mark end of a list */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2001-05-09 03:33:10 +02:00
|
|
|
|
cli_end (struct ui_out *uiout,
|
|
|
|
|
enum ui_out_type type,
|
|
|
|
|
int level)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* output an int field */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
cli_field_int (struct ui_out *uiout, int fldno, int width,
|
2001-06-10 02:22:41 +02:00
|
|
|
|
enum ui_align alignment,
|
|
|
|
|
const char *fldname, int value)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2010-05-14 01:53:32 +02:00
|
|
|
|
char buffer[20]; /* FIXME: how many chars long a %d can become? */
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
2012-11-13 10:46:11 +01:00
|
|
|
|
xsnprintf (buffer, sizeof (buffer), "%d", value);
|
PR tui/9217
* tui/tui-out.c: Include cli-out.h.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end, tui_field_int, tui_field_skip)
(tui_field_string, tui_field_fmt, tui_spaces, tui_text)
(tui_message, tui_wrap_hint, tui_flush): Delete forward
declarations.
(struct ui_out_data): Rename to...
(struct tui_ui_out_data): ... this. Remove `stream' and
`suppress_output' fields, and inherit cli_ui_out_data.
(tui_out_data): New typedef.
(tui_ui_out_impl): Don't initialize fields staticaly.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end): Delete.
(tui_field_int): Adjust to delegate most work to the base type.
(tui_field_skip): Delete.
(tui_field_string, tui_field_fmt): Adjust comment. Adjust to
delegate most work to the base type.
(tui_spaces): Delete.
(tui_text): Adjust to delegate most work to the base type.
(tui_message): Delete.
(tui_wrap_hint): Delete.
(tui_flush): Delete.
(out_field_fmt): Delete.
(field_separator): Delete.
(tui_out_new): Adjust to initialize the base type.
(_initialize_tui_out): Initialize tui_ui_out_impl.
* cli-out.c (struct ui_out_data): Moved out to cli-out.h, renamed
cli_ui_out_data.
(cli_out_data): Adjust.
(cli_ui_out_impl): Make extern.
(cli_table_header, cli_field_int, cli_field_skip): Use
uo_field_string instead of cli_field_string.
(cli_redirect): Adjust to use cli_out_data.
(cli_out_data_ctor): New.
(cli_out_new): Use it.
* cli-out.h (struct ui_file): Remove forward declaration.
(struct cli_ui_out_data): New, moved from cli-out.c, and renamed.
(cli_ui_out_impl): Declare.
(cli_out_data_ctor): Declare.
* ui-out.c (struct ui_out) <data>: Change type to void pointer.
(uo_field_string): No longer static.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
* ui-out.h (struct ui_out_data): Don't forward declare.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
(uo_field_string): Declare.
2010-04-18 02:11:55 +02:00
|
|
|
|
|
|
|
|
|
/* Always go through the function pointer (virtual function call).
|
|
|
|
|
We may have been extended. */
|
|
|
|
|
uo_field_string (uiout, fldno, width, alignment, fldname, buffer);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* used to ommit a field */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
cli_field_skip (struct ui_out *uiout, int fldno, int width,
|
2001-06-10 02:22:41 +02:00
|
|
|
|
enum ui_align alignment,
|
|
|
|
|
const char *fldname)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
PR tui/9217
* tui/tui-out.c: Include cli-out.h.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end, tui_field_int, tui_field_skip)
(tui_field_string, tui_field_fmt, tui_spaces, tui_text)
(tui_message, tui_wrap_hint, tui_flush): Delete forward
declarations.
(struct ui_out_data): Rename to...
(struct tui_ui_out_data): ... this. Remove `stream' and
`suppress_output' fields, and inherit cli_ui_out_data.
(tui_out_data): New typedef.
(tui_ui_out_impl): Don't initialize fields staticaly.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end): Delete.
(tui_field_int): Adjust to delegate most work to the base type.
(tui_field_skip): Delete.
(tui_field_string, tui_field_fmt): Adjust comment. Adjust to
delegate most work to the base type.
(tui_spaces): Delete.
(tui_text): Adjust to delegate most work to the base type.
(tui_message): Delete.
(tui_wrap_hint): Delete.
(tui_flush): Delete.
(out_field_fmt): Delete.
(field_separator): Delete.
(tui_out_new): Adjust to initialize the base type.
(_initialize_tui_out): Initialize tui_ui_out_impl.
* cli-out.c (struct ui_out_data): Moved out to cli-out.h, renamed
cli_ui_out_data.
(cli_out_data): Adjust.
(cli_ui_out_impl): Make extern.
(cli_table_header, cli_field_int, cli_field_skip): Use
uo_field_string instead of cli_field_string.
(cli_redirect): Adjust to use cli_out_data.
(cli_out_data_ctor): New.
(cli_out_new): Use it.
* cli-out.h (struct ui_file): Remove forward declaration.
(struct cli_ui_out_data): New, moved from cli-out.c, and renamed.
(cli_ui_out_impl): Declare.
(cli_out_data_ctor): Declare.
* ui-out.c (struct ui_out) <data>: Change type to void pointer.
(uo_field_string): No longer static.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
* ui-out.h (struct ui_out_data): Don't forward declare.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
(uo_field_string): Declare.
2010-04-18 02:11:55 +02:00
|
|
|
|
|
|
|
|
|
/* Always go through the function pointer (virtual function call).
|
|
|
|
|
We may have been extended. */
|
|
|
|
|
uo_field_string (uiout, fldno, width, alignment, fldname, "");
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* other specific cli_field_* end up here so alignment and field
|
|
|
|
|
separators are both handled by cli_field_string */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-02-03 05:14:45 +01:00
|
|
|
|
cli_field_string (struct ui_out *uiout,
|
|
|
|
|
int fldno,
|
|
|
|
|
int width,
|
2000-02-20 19:23:31 +01:00
|
|
|
|
enum ui_align align,
|
2001-06-10 02:22:41 +02:00
|
|
|
|
const char *fldname,
|
2000-02-03 05:14:45 +01:00
|
|
|
|
const char *string)
|
|
|
|
|
{
|
|
|
|
|
int before = 0;
|
|
|
|
|
int after = 0;
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
|
|
|
|
|
2000-02-03 05:14:45 +01:00
|
|
|
|
if ((align != ui_noalign) && string)
|
|
|
|
|
{
|
|
|
|
|
before = width - strlen (string);
|
|
|
|
|
if (before <= 0)
|
|
|
|
|
before = 0;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (align == ui_right)
|
|
|
|
|
after = 0;
|
|
|
|
|
else if (align == ui_left)
|
|
|
|
|
{
|
|
|
|
|
after = before;
|
|
|
|
|
before = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
/* ui_center */
|
|
|
|
|
{
|
|
|
|
|
after = before / 2;
|
|
|
|
|
before -= after;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (before)
|
|
|
|
|
ui_out_spaces (uiout, before);
|
|
|
|
|
if (string)
|
|
|
|
|
out_field_fmt (uiout, fldno, fldname, "%s", string);
|
|
|
|
|
if (after)
|
|
|
|
|
ui_out_spaces (uiout, after);
|
|
|
|
|
|
|
|
|
|
if (align != ui_noalign)
|
|
|
|
|
field_separator ();
|
|
|
|
|
}
|
|
|
|
|
|
2005-01-14 00:39:40 +01:00
|
|
|
|
/* This is the only field function that does not align. */
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
gdb/
* ada-lang.c (lim_warning): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* amd64-tdep.c (amd64_insn_length_fprintf): Likewise.
* cli-out.c (cli_field_fmt): New ATTRIBUTE_PRINTF.
(cli_message, out_field_fmt): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* complaints.c (find_complaint): New ATTRIBUTE_PRINTF.
(vcomplaint): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* complaints.h (complaint, internal_complaint): Likewise.
* defs.h: Change ATTR_FORMAT to ATTRIBUTE_PRINTF in the top comment.
(ATTR_FORMAT): Remove.
(query, nquery, yquery, vprintf_filtered, vfprintf_filtered)
(fprintf_filtered, fprintfi_filtered, printf_filtered, printfi_filtered)
(vprintf_unfiltered, vfprintf_unfiltered, fprintf_unfiltered)
(printf_unfiltered, xasprintf, xvasprintf, xstrprintf, xstrvprintf)
(xsnprintf, verror, error, vfatal, fatal, internal_verror)
(internal_error, internal_vwarning, internal_warning, warning)
(vwarning): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* disasm.c (fprintf_disasm): Likewise.
* exceptions.c (throw_it): Likewise.
* exceptions.h (exception_fprintf, throw_verror, throw_vfatal)
(throw_error): Likewise.
* language.h (type_error, range_error): Likewise.
* linespec.c (cplusplus_error): Likewise.
* mi/mi-interp.c (mi_interp_query_hook): Likewise.
* mi/mi-out.c (mi_field_fmt, mi_message): Likewise.
* monitor.c (monitor_debug): Likewise.
* parser-defs.h (parser_fprintf): Likewise.
* serial.h (serial_printf): Likewise.
* tui/tui-hooks.c (tui_query_hook): Likewise.
* ui-out.c (default_field_fmt, default_message, uo_field_fmt)
(uo_message): Likewise.
* ui-out.h (ui_out_field_fmt, ui_out_message): Likewise.
* utils.c (vfprintf_maybe_filtered, internal_vproblem, defaulted_query):
Likewise.
* xml-support.h (gdb_xml_debug, gdb_xml_error): Likewise.
2010-05-02 23:14:59 +02:00
|
|
|
|
static void ATTRIBUTE_PRINTF (6, 0)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
cli_field_fmt (struct ui_out *uiout, int fldno,
|
|
|
|
|
int width, enum ui_align align,
|
2001-06-10 02:22:41 +02:00
|
|
|
|
const char *fldname,
|
|
|
|
|
const char *format,
|
|
|
|
|
va_list args)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
struct ui_file *stream;
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
|
|
|
|
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
stream = VEC_last (ui_filep, data->streams);
|
|
|
|
|
vfprintf_filtered (stream, format, args);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
|
|
|
|
if (align != ui_noalign)
|
|
|
|
|
field_separator ();
|
|
|
|
|
}
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
cli_spaces (struct ui_out *uiout, int numspaces)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
struct ui_file *stream;
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
|
|
|
|
|
stream = VEC_last (ui_filep, data->streams);
|
|
|
|
|
print_spaces_filtered (numspaces, stream);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2001-06-10 02:22:41 +02:00
|
|
|
|
cli_text (struct ui_out *uiout, const char *string)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
struct ui_file *stream;
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
|
|
|
|
|
stream = VEC_last (ui_filep, data->streams);
|
|
|
|
|
fputs_filtered (string, stream);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
gdb/
* ada-lang.c (lim_warning): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* amd64-tdep.c (amd64_insn_length_fprintf): Likewise.
* cli-out.c (cli_field_fmt): New ATTRIBUTE_PRINTF.
(cli_message, out_field_fmt): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* complaints.c (find_complaint): New ATTRIBUTE_PRINTF.
(vcomplaint): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* complaints.h (complaint, internal_complaint): Likewise.
* defs.h: Change ATTR_FORMAT to ATTRIBUTE_PRINTF in the top comment.
(ATTR_FORMAT): Remove.
(query, nquery, yquery, vprintf_filtered, vfprintf_filtered)
(fprintf_filtered, fprintfi_filtered, printf_filtered, printfi_filtered)
(vprintf_unfiltered, vfprintf_unfiltered, fprintf_unfiltered)
(printf_unfiltered, xasprintf, xvasprintf, xstrprintf, xstrvprintf)
(xsnprintf, verror, error, vfatal, fatal, internal_verror)
(internal_error, internal_vwarning, internal_warning, warning)
(vwarning): Change ATTR_FORMAT to ATTRIBUTE_PRINTF.
* disasm.c (fprintf_disasm): Likewise.
* exceptions.c (throw_it): Likewise.
* exceptions.h (exception_fprintf, throw_verror, throw_vfatal)
(throw_error): Likewise.
* language.h (type_error, range_error): Likewise.
* linespec.c (cplusplus_error): Likewise.
* mi/mi-interp.c (mi_interp_query_hook): Likewise.
* mi/mi-out.c (mi_field_fmt, mi_message): Likewise.
* monitor.c (monitor_debug): Likewise.
* parser-defs.h (parser_fprintf): Likewise.
* serial.h (serial_printf): Likewise.
* tui/tui-hooks.c (tui_query_hook): Likewise.
* ui-out.c (default_field_fmt, default_message, uo_field_fmt)
(uo_message): Likewise.
* ui-out.h (ui_out_field_fmt, ui_out_message): Likewise.
* utils.c (vfprintf_maybe_filtered, internal_vproblem, defaulted_query):
Likewise.
* xml-support.h (gdb_xml_debug, gdb_xml_error): Likewise.
2010-05-02 23:14:59 +02:00
|
|
|
|
static void ATTRIBUTE_PRINTF (3, 0)
|
2001-06-10 02:22:41 +02:00
|
|
|
|
cli_message (struct ui_out *uiout, int verbosity,
|
|
|
|
|
const char *format, va_list args)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
|
2000-02-03 05:14:45 +01:00
|
|
|
|
if (ui_out_get_verblvl (uiout) >= verbosity)
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
{
|
|
|
|
|
struct ui_file *stream = VEC_last (ui_filep, data->streams);
|
|
|
|
|
|
|
|
|
|
vfprintf_unfiltered (stream, format, args);
|
|
|
|
|
}
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
cli_wrap_hint (struct ui_out *uiout, char *identstring)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2001-06-19 22:30:11 +02:00
|
|
|
|
if (data->suppress_output)
|
|
|
|
|
return;
|
2000-02-03 05:14:45 +01:00
|
|
|
|
wrap_here (identstring);
|
|
|
|
|
}
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
cli_flush (struct ui_out *uiout)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
struct ui_file *stream = VEC_last (ui_filep, data->streams);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
gdb_flush (stream);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
/* OUTSTREAM as non-NULL will push OUTSTREAM on the stack of output streams
|
|
|
|
|
and make it therefore active. OUTSTREAM as NULL will pop the last pushed
|
|
|
|
|
output stream; it is an internal error if it does not exist. */
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
static int
|
2003-06-28 18:19:07 +02:00
|
|
|
|
cli_redirect (struct ui_out *uiout, struct ui_file *outstream)
|
|
|
|
|
{
|
PR tui/9217
* tui/tui-out.c: Include cli-out.h.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end, tui_field_int, tui_field_skip)
(tui_field_string, tui_field_fmt, tui_spaces, tui_text)
(tui_message, tui_wrap_hint, tui_flush): Delete forward
declarations.
(struct ui_out_data): Rename to...
(struct tui_ui_out_data): ... this. Remove `stream' and
`suppress_output' fields, and inherit cli_ui_out_data.
(tui_out_data): New typedef.
(tui_ui_out_impl): Don't initialize fields staticaly.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end): Delete.
(tui_field_int): Adjust to delegate most work to the base type.
(tui_field_skip): Delete.
(tui_field_string, tui_field_fmt): Adjust comment. Adjust to
delegate most work to the base type.
(tui_spaces): Delete.
(tui_text): Adjust to delegate most work to the base type.
(tui_message): Delete.
(tui_wrap_hint): Delete.
(tui_flush): Delete.
(out_field_fmt): Delete.
(field_separator): Delete.
(tui_out_new): Adjust to initialize the base type.
(_initialize_tui_out): Initialize tui_ui_out_impl.
* cli-out.c (struct ui_out_data): Moved out to cli-out.h, renamed
cli_ui_out_data.
(cli_out_data): Adjust.
(cli_ui_out_impl): Make extern.
(cli_table_header, cli_field_int, cli_field_skip): Use
uo_field_string instead of cli_field_string.
(cli_redirect): Adjust to use cli_out_data.
(cli_out_data_ctor): New.
(cli_out_new): Use it.
* cli-out.h (struct ui_file): Remove forward declaration.
(struct cli_ui_out_data): New, moved from cli-out.c, and renamed.
(cli_ui_out_impl): Declare.
(cli_out_data_ctor): Declare.
* ui-out.c (struct ui_out) <data>: Change type to void pointer.
(uo_field_string): No longer static.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
* ui-out.h (struct ui_out_data): Don't forward declare.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
(uo_field_string): Declare.
2010-04-18 02:11:55 +02:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2003-06-28 18:19:07 +02:00
|
|
|
|
if (outstream != NULL)
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
VEC_safe_push (ui_filep, data->streams, outstream);
|
|
|
|
|
else
|
|
|
|
|
VEC_pop (ui_filep, data->streams);
|
2003-06-28 18:19:07 +02:00
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-02-03 05:14:45 +01:00
|
|
|
|
/* local functions */
|
|
|
|
|
|
|
|
|
|
/* Like cli_field_fmt, but takes a variable number of args
|
2005-01-14 00:39:40 +01:00
|
|
|
|
and makes a va_list and does not insert a separator. */
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
|
|
|
|
/* VARARGS */
|
|
|
|
|
static void
|
2001-06-10 02:22:41 +02:00
|
|
|
|
out_field_fmt (struct ui_out *uiout, int fldno,
|
|
|
|
|
const char *fldname,
|
|
|
|
|
const char *format,...)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
struct ui_file *stream = VEC_last (ui_filep, data->streams);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
va_list args;
|
|
|
|
|
|
|
|
|
|
va_start (args, format);
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
vfprintf_filtered (stream, format, args);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
|
|
|
|
va_end (args);
|
|
|
|
|
}
|
|
|
|
|
|
2005-01-14 00:39:40 +01:00
|
|
|
|
/* Access to ui_out format private members. */
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
field_separator (void)
|
2000-02-03 05:14:45 +01:00
|
|
|
|
{
|
2011-08-04 Pedro Alves <pedro@codesourcery.com>
* ui-out.h (uiout): Rename to ...
(current_uiout): ... this.
* ui-out.c (uiout): Rename to ...
(current_uiout): ... this.
* ada-lang.c (print_it_exception, print_one_exception)
(print_mention_exception): Adjust.
* breakpoint.c (watchpoint_check): Adjust.
(print_breakpoint_location, print_one_breakpoint, breakpoint_1)
(default_collect_info, watchpoints_info, print_one_catch_fork)
(print_one_catch_vfork, print_one_catch_syscall)
(print_one_catch_exec, mention, print_it_ranged_breakpoint)
(print_one_ranged_breakpoint, print_mention_ranged_breakpoint)
(print_it_watchpoint, print_mention_watchpoint)
(print_it_masked_watchpoint, print_mention_masked_watchpoint)
(print_it_exception_catchpoint, print_one_exception_catchpoint)
(print_mention_exception_catchpoint, say_where, bkpt_print_it)
(bkpt_print_mention, momentary_bkpt_print_it)
(tracepoint_print_mention, update_static_tracepoint)
(tracepoints_info, save_breakpoints): Adjust.
* cli-out.c (field_separator): Adjust.
* cp-abi.c (list_cp_abis, show_cp_abi_cmd): Adjust.
* exceptions.c (catch_exceptions_with_msg, catch_errors): Adjust.
* frame.c (get_current_frame): Adjust.
* infcmd.c (run_command_1, print_return_value): Adjust.
* inferior.c (inferior_command, info_inferiors_command): Adjust.
* infrun.c (print_end_stepping_range_reason): Adjust.
(print_signal_exited_reason, print_exited_reason): Adjust.
(print_signal_received_reason, print_no_history_reason): Adjust.
* interps.c (interp_set): Adjust.
* osdata.c (info_osdata_command): Adjust.
* progspace.c (maintenance_info_program_spaces_command): Adjust.
* remote-fileio.c (remote_fileio_request): Adjust.
* remote.c (show_remote_cmd): Adjust.
* solib.c (info_sharedlibrary_command): Adjust.
* source.c (print_source_lines_base): Adjust.
* stack.c (print_stack_frame): Adjust.
(do_gdb_disassembly, print_frame_info, print_frame): Adjust.
* symfile-mem.c (add_vsyscall_page): Adjust.
* symfile.c (load_progress, generic_load)
(print_transfer_performance): Adjust.
* thread.c (info_threads_command, restore_selected_frame)
(thread_command): Adjust.
* top.c (make_cleanup_restore_ui_file): Adjust.
* tracepoint.c (tvariables_info_1, trace_status_mi, tfind_1)
(print_one_static_tracepoint_marker): Adjust.
* cli/cli-cmds.c (print_disassembly): Adjust.
* cli/cli-decode.c (print_doc_line): Adjust.
* cli/cli-interp.c (safe_execute_command): Adjust.
* cli/cli-logging.c (set_logging_redirect, pop_output_files)
(handle_redirections): Adjust.
* cli/cli-script.c (show_user_1): Adjust.
* cli/cli-setshow.c (do_setshow_command, cmd_show_list): Adjust.
* mi/mi-cmd-break.c (breakpoint_notify): Adjust.
* mi/mi-cmd-disas.c (mi_cmd_disassemble): Adjust.
* mi/mi-cmd-env.c (mi_cmd_env_pwd, mi_cmd_env_path)
(mi_cmd_env_dir): Adjust.
* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file)
(print_partial_file_name, mi_cmd_file_list_exec_source_files): Adjust.
* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames)
(mi_cmd_stack_info_depth, mi_cmd_stack_list_args)
(list_args_or_locals): Adjust.
* mi/mi-cmd-var.c (print_varobj, mi_cmd_var_create)
(mi_cmd_var_delete, mi_cmd_var_set_format, mi_cmd_var_set_frozen)
(mi_cmd_var_show_format, mi_cmd_var_info_num_children)
(mi_cmd_var_list_children, mi_cmd_var_info_type)
(mi_cmd_var_info_path_expression, mi_cmd_var_info_expression)
(mi_cmd_var_show_attributes, mi_cmd_var_evaluate_expression)
(mi_cmd_var_assign, mi_cmd_var_update, varobj_update_one): Adjust.
* mi/mi-interp.c (mi_on_normal_stop): Adjust.
* mi/mi-main.c (mi_cmd_gdb_exit, mi_cmd_thread_select)
(mi_cmd_thread_list_ids, mi_cmd_thread_info, print_one_inferior)
(list_available_thread_groups, mi_cmd_list_thread_groups)
(mi_cmd_data_list_register_names)
(mi_cmd_data_list_changed_registers)
(mi_cmd_data_list_register_values, get_register)
(mi_cmd_data_evaluate_expression, mi_cmd_data_read_memory)
(mi_cmd_data_read_memory_bytes, mi_cmd_list_features)
(mi_cmd_list_target_features, mi_cmd_add_inferior)
(mi_execute_command, mi_load_progress): Adjust.
* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Adjust.
* python/py-auto-load.c (print_script, info_auto_load_scripts):
Adjust.
* python/py-breakpoint.c (bppy_get_commands): Adjust.
* tui/tui-interp.c (tui_command_loop): Adjust.
* tui/tui-io.c (tui_setup_io, tui_initialize_io): Adjust.
2011-08-04 21:10:14 +02:00
|
|
|
|
cli_out_data *data = ui_out_data (current_uiout);
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
struct ui_file *stream = VEC_last (ui_filep, data->streams);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
fputc_filtered (' ', stream);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
}
|
|
|
|
|
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
/* This is the CLI ui-out implementation functions vector */
|
|
|
|
|
|
2013-12-24 04:53:23 +01:00
|
|
|
|
const struct ui_out_impl cli_ui_out_impl =
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
{
|
|
|
|
|
cli_table_begin,
|
|
|
|
|
cli_table_body,
|
|
|
|
|
cli_table_end,
|
|
|
|
|
cli_table_header,
|
|
|
|
|
cli_begin,
|
|
|
|
|
cli_end,
|
|
|
|
|
cli_field_int,
|
|
|
|
|
cli_field_skip,
|
|
|
|
|
cli_field_string,
|
|
|
|
|
cli_field_fmt,
|
|
|
|
|
cli_spaces,
|
|
|
|
|
cli_text,
|
|
|
|
|
cli_message,
|
|
|
|
|
cli_wrap_hint,
|
|
|
|
|
cli_flush,
|
|
|
|
|
cli_redirect,
|
PR gdb/13860: don't lose '-interpreter-exec console EXECUTION_COMMAND''s output in async mode.
The other part of PR gdb/13860 is about console execution commands in
MI getting their output half lost. E.g., take the finish command,
executed on a frontend's GDB console:
sync:
finish
&"finish\n"
~"Run till exit from #0 usleep (useconds=10) at ../sysdeps/unix/sysv/linux/usleep.c:27\n"
^running
*running,thread-id="1"
(gdb)
~"0x00000000004004d7 in foo () at stepinf.c:6\n"
~"6\t usleep (10);\n"
~"Value returned is $1 = 0\n"
*stopped,reason="function-finished",frame={addr="0x00000000004004d7",func="foo",args=[],file="stepinf.c",fullname="/home/pedro/gdb/tests/stepinf.c",line="6"},thread-id="1",stopped-threads="all",core="1"
async:
finish
&"finish\n"
~"Run till exit from #0 usleep (useconds=10) at ../sysdeps/unix/sysv/linux/usleep.c:27\n"
^running
*running,thread-id="1"
(gdb)
*stopped,reason="function-finished",frame={addr="0x00000000004004d7",func="foo",args=[],file="stepinf.c",fullname="/home/pedro/gdb/tests/stepinf.c",line="6"},gdb-result-var="$1",return-value="0",thread-id="1",stopped-threads="all",core="0"
Note how all the "Value returned" etc. output is missing in async mode.
The same happens with e.g., catchpoints:
=breakpoint-modified,bkpt={number="1",type="catchpoint",disp="keep",enabled="y",what="22016",times="1"}
~"\nCatchpoint "
~"1 (forked process 22016), 0x0000003791cbd8a6 in __libc_fork () at ../nptl/sysdeps/unix/sysv/linux/fork.c:131\n"
~"131\t pid = ARCH_FORK ();\n"
*stopped,reason="fork",disp="keep",bkptno="1",newpid="22016",frame={addr="0x0000003791cbd8a6",func="__libc_fork",args=[],file="../nptl/sysdeps/unix/sysv/linux/fork.c",fullname="/usr/src/debug/glibc-2.14-394-g8f3b1ff/nptl/sysdeps/unix/sysv/linux/fork.c",line="131"},thread-id="1",stopped-threads="all",core="0"
where all those ~ lines are missing in async mode, or just the "step"
current line indication:
s
&"s\n"
^running
*running,thread-id="all"
(gdb)
~"13\t foo ();\n"
*stopped,frame={addr="0x00000000004004ef",func="main",args=[{name="argc",value="1"},{name="argv",value="0x7fffffffdd78"}],file="stepinf.c",fullname="/home/pedro/gdb/tests/stepinf.c",line="13"},thread-id="1",stopped-threads="all",core="3"
(gdb)
Or in the case of the PRs example, the "Stopped due to shared library
event" note:
start
&"start\n"
~"Temporary breakpoint 1 at 0x400608: file ../../../src/gdb/testsuite/gdb.mi/solib-main.c, line 21.\n"
=breakpoint-created,bkpt={number="1",type="breakpoint",disp="del",enabled="y",addr="0x0000000000400608",func="main",file="../../../src/gdb/testsuite/gdb.mi/solib-main.c",fullname="/home/pedro/gdb/mygit/src/gdb/testsuite/gdb.mi/solib-main.c",line="21",times="0",original-location="main"}
~"Starting program: /home/pedro/gdb/mygit/build/gdb/testsuite/gdb.mi/solib-main \n"
=thread-group-started,id="i1",pid="21990"
=thread-created,id="1",group-id="i1"
^running
*running,thread-id="all"
(gdb)
=library-loaded,id="/lib64/ld-linux-x86-64.so.2",target-name="/lib64/ld-linux-x86-64.so.2",host-name="/lib64/ld-linux-x86-64.so.2",symbols-loaded="0",thread-group="i1"
~"Stopped due to shared library event (no libraries added or removed)\n"
*stopped,reason="solib-event",thread-id="1",stopped-threads="all",core="3"
(gdb)
IMO, if you're typing execution commands in a frontend's console, you
expect to see their output. Indeed it's what you get in sync mode. I
think async mode should do the same. Deciding what to mirror to the
console wrt to breakpoints and random stops gets messy real fast.
E.g., say "s" trips on a breakpoint. We'd clearly want to mirror the
event to the console in this case. But what about more complicated
cases like "s&; thread n; s&", and one of those steps spawning a new
thread, and that thread hitting a breakpoint? It's impossible in
general to track whether the thread had any relation to the commands
that had been executed. So I think we should just simplify and always
mirror breakpoints and random events to the console.
Notes:
- mi->out is the same as gdb_stdout when MI is the current
interpreter. I think that referring to that directly is cleaner.
An earlier revision of this patch made the changes that are now
done in mi_on_normal_stop directly in infrun.c:normal_stop, and so
not having an obvious place to put the new uiout by then, and not
wanting to abuse CLI's uiout, I made a temporary uiout when
necessary.
- Hopefuly the rest of the patch is more or less obvious given the
comments added.
Tested on x86_64 Fedora 20, no regressions.
2014-05-21 Pedro Alves <palves@redhat.com>
PR gdb/13860
* gdbthread.h (struct thread_control_state): New field
`command_interp'.
* infrun.c (follow_fork): Copy the new thread control field to the
child fork thread.
(clear_proceed_status_thread): Clear the new thread control field.
(proceed): Set the new thread control field.
* interps.h (command_interp): Declare.
* interps.c (command_interpreter): New global.
(command_interp): New function.
(interp_exec): Set `command_interpreter' while here.
* cli-out.c (cli_uiout_dtor): New function.
(cli_ui_out_impl): Install it.
* mi/mi-interp.c: Include cli-out.h.
(mi_cmd_interpreter_exec): Add comment.
(restore_current_uiout_cleanup): New function.
(ui_out_free_cleanup): New function.
(mi_on_normal_stop): If finishing an execution command started by
a CLI command, or any kind of breakpoint-like event triggered,
print the stop event to the output (CLI) stream.
* mi/mi-out.c (mi_ui_out_impl): Install NULL `dtor' handler.
2014-05-21 Pedro Alves <palves@redhat.com>
PR gdb/13860
* gdb.mi/mi-cli.exp (line_callee4_next_step): New global.
(top level): Test that output related to execution commands is
sent to the console with CLI commands, but not with MI commands.
Test that breakpoint events are always mirrored to the console.
Also expect the new source line to be output after a "next" in
async mode too. Make it a pass/fail test.
* gdb.mi/mi-solib.exp: Test that the CLI solib event note is
output.
* lib/mi-support.exp (mi_gdb_expect_cli_output): New procedure.
2014-03-11 21:31:36 +01:00
|
|
|
|
cli_uiout_dtor,
|
* cli-out.c (cli_table_begin, cli_table_body, cli_table_end)
(cli_table_header, cli_begin, cli_end, cli_field_int)
(cli_field_skip, cli_field_string, cli_field_fmt, cli_spaces)
(cli_text, cli_message, cli_wrap_hint, cli_flush, cli_redirect):
Delete forward declarations.
(cli_ui_out_impl): Move below the callbacks.
(_initialize_cli_out): Delete.
2010-05-02 18:50:02 +02:00
|
|
|
|
0, /* Does not need MI hacks (i.e. needs CLI hacks). */
|
|
|
|
|
};
|
|
|
|
|
|
PR tui/9217
* tui/tui-out.c: Include cli-out.h.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end, tui_field_int, tui_field_skip)
(tui_field_string, tui_field_fmt, tui_spaces, tui_text)
(tui_message, tui_wrap_hint, tui_flush): Delete forward
declarations.
(struct ui_out_data): Rename to...
(struct tui_ui_out_data): ... this. Remove `stream' and
`suppress_output' fields, and inherit cli_ui_out_data.
(tui_out_data): New typedef.
(tui_ui_out_impl): Don't initialize fields staticaly.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end): Delete.
(tui_field_int): Adjust to delegate most work to the base type.
(tui_field_skip): Delete.
(tui_field_string, tui_field_fmt): Adjust comment. Adjust to
delegate most work to the base type.
(tui_spaces): Delete.
(tui_text): Adjust to delegate most work to the base type.
(tui_message): Delete.
(tui_wrap_hint): Delete.
(tui_flush): Delete.
(out_field_fmt): Delete.
(field_separator): Delete.
(tui_out_new): Adjust to initialize the base type.
(_initialize_tui_out): Initialize tui_ui_out_impl.
* cli-out.c (struct ui_out_data): Moved out to cli-out.h, renamed
cli_ui_out_data.
(cli_out_data): Adjust.
(cli_ui_out_impl): Make extern.
(cli_table_header, cli_field_int, cli_field_skip): Use
uo_field_string instead of cli_field_string.
(cli_redirect): Adjust to use cli_out_data.
(cli_out_data_ctor): New.
(cli_out_new): Use it.
* cli-out.h (struct ui_file): Remove forward declaration.
(struct cli_ui_out_data): New, moved from cli-out.c, and renamed.
(cli_ui_out_impl): Declare.
(cli_out_data_ctor): Declare.
* ui-out.c (struct ui_out) <data>: Change type to void pointer.
(uo_field_string): No longer static.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
* ui-out.h (struct ui_out_data): Don't forward declare.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
(uo_field_string): Declare.
2010-04-18 02:11:55 +02:00
|
|
|
|
/* Constructor for a `cli_out_data' object. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
cli_out_data_ctor (cli_out_data *self, struct ui_file *stream)
|
|
|
|
|
{
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
gdb_assert (stream != NULL);
|
|
|
|
|
|
|
|
|
|
self->streams = NULL;
|
|
|
|
|
VEC_safe_push (ui_filep, self->streams, stream);
|
|
|
|
|
|
PR tui/9217
* tui/tui-out.c: Include cli-out.h.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end, tui_field_int, tui_field_skip)
(tui_field_string, tui_field_fmt, tui_spaces, tui_text)
(tui_message, tui_wrap_hint, tui_flush): Delete forward
declarations.
(struct ui_out_data): Rename to...
(struct tui_ui_out_data): ... this. Remove `stream' and
`suppress_output' fields, and inherit cli_ui_out_data.
(tui_out_data): New typedef.
(tui_ui_out_impl): Don't initialize fields staticaly.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end): Delete.
(tui_field_int): Adjust to delegate most work to the base type.
(tui_field_skip): Delete.
(tui_field_string, tui_field_fmt): Adjust comment. Adjust to
delegate most work to the base type.
(tui_spaces): Delete.
(tui_text): Adjust to delegate most work to the base type.
(tui_message): Delete.
(tui_wrap_hint): Delete.
(tui_flush): Delete.
(out_field_fmt): Delete.
(field_separator): Delete.
(tui_out_new): Adjust to initialize the base type.
(_initialize_tui_out): Initialize tui_ui_out_impl.
* cli-out.c (struct ui_out_data): Moved out to cli-out.h, renamed
cli_ui_out_data.
(cli_out_data): Adjust.
(cli_ui_out_impl): Make extern.
(cli_table_header, cli_field_int, cli_field_skip): Use
uo_field_string instead of cli_field_string.
(cli_redirect): Adjust to use cli_out_data.
(cli_out_data_ctor): New.
(cli_out_new): Use it.
* cli-out.h (struct ui_file): Remove forward declaration.
(struct cli_ui_out_data): New, moved from cli-out.c, and renamed.
(cli_ui_out_impl): Declare.
(cli_out_data_ctor): Declare.
* ui-out.c (struct ui_out) <data>: Change type to void pointer.
(uo_field_string): No longer static.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
* ui-out.h (struct ui_out_data): Don't forward declare.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
(uo_field_string): Declare.
2010-04-18 02:11:55 +02:00
|
|
|
|
self->suppress_output = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Initialize private members at startup. */
|
2000-02-03 05:14:45 +01:00
|
|
|
|
|
|
|
|
|
struct ui_out *
|
|
|
|
|
cli_out_new (struct ui_file *stream)
|
|
|
|
|
{
|
|
|
|
|
int flags = ui_source_list;
|
2013-12-28 23:31:23 +01:00
|
|
|
|
cli_out_data *data = XNEW (cli_out_data);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
PR tui/9217
* tui/tui-out.c: Include cli-out.h.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end, tui_field_int, tui_field_skip)
(tui_field_string, tui_field_fmt, tui_spaces, tui_text)
(tui_message, tui_wrap_hint, tui_flush): Delete forward
declarations.
(struct ui_out_data): Rename to...
(struct tui_ui_out_data): ... this. Remove `stream' and
`suppress_output' fields, and inherit cli_ui_out_data.
(tui_out_data): New typedef.
(tui_ui_out_impl): Don't initialize fields staticaly.
(tui_table_begin, tui_table_body, tui_table_end, tui_table_header)
(tui_begin, tui_end): Delete.
(tui_field_int): Adjust to delegate most work to the base type.
(tui_field_skip): Delete.
(tui_field_string, tui_field_fmt): Adjust comment. Adjust to
delegate most work to the base type.
(tui_spaces): Delete.
(tui_text): Adjust to delegate most work to the base type.
(tui_message): Delete.
(tui_wrap_hint): Delete.
(tui_flush): Delete.
(out_field_fmt): Delete.
(field_separator): Delete.
(tui_out_new): Adjust to initialize the base type.
(_initialize_tui_out): Initialize tui_ui_out_impl.
* cli-out.c (struct ui_out_data): Moved out to cli-out.h, renamed
cli_ui_out_data.
(cli_out_data): Adjust.
(cli_ui_out_impl): Make extern.
(cli_table_header, cli_field_int, cli_field_skip): Use
uo_field_string instead of cli_field_string.
(cli_redirect): Adjust to use cli_out_data.
(cli_out_data_ctor): New.
(cli_out_new): Use it.
* cli-out.h (struct ui_file): Remove forward declaration.
(struct cli_ui_out_data): New, moved from cli-out.c, and renamed.
(cli_ui_out_impl): Declare.
(cli_out_data_ctor): Declare.
* ui-out.c (struct ui_out) <data>: Change type to void pointer.
(uo_field_string): No longer static.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
* ui-out.h (struct ui_out_data): Don't forward declare.
(ui_out_data): Change return type to void pointer.
(ui_out_new): Change `data' parameter type to void pointer.
(uo_field_string): Declare.
2010-04-18 02:11:55 +02:00
|
|
|
|
cli_out_data_ctor (data, stream);
|
2000-02-03 05:14:45 +01:00
|
|
|
|
return ui_out_new (&cli_ui_out_impl, data, flags);
|
|
|
|
|
}
|
|
|
|
|
|
2003-02-05 Jim Ingham <jingham@apple.com>
Keith Seitz <keiths@redhat.com>
Elena Zannoni <ezannoni@redhat.com>
Andrew Cagney <ac131313@redhat.com>
* Makefile.in (SUBDIR_CLI_OBS): Add "cli-interp.o".
(SUBDIR_CLI_SRCS): Add "cli/cli-interp.c".
(SUBDIR_MI_OBS): Add "mi-interp.o".
(SUBDIR_MI_SRCS): Add "mi/mi-interp.c".
(SFILES): Add "interps.c".
(COMMON_OBS): Add "interps.o".
(interps_h, mi_main_h): Define.
(interps.o, cli-interp.o, mi-interp.o): Add dependencies.
(mi-main.o, main.o, event-top.o): Update dependencies.
* cli/cli-interp.c: New file.
* interps.h, interps.c: New files.
* top.c: (gdb_init): Don't install the default interpreter, handed
by captured_main.
* main.c: Include "interps.h".
(interpreter_p): Note that it should malloc'ed.
(captured_command_loop): Call current_interp_command_loop.
(captured_main): Initialize interpreter_p to INTERP_CONSOLE. Use
xfree and xstrdup when updating interpreter_p. Install the
default interpreter. Add hack to stop mi1's copyright notice
being encoded.
* event-top.h (gdb_setup_readline): Declare.
(gdb_disable_readline): Declare.
* event-top.c: Include "interps.h".
(display_gdb_prompt): Call current_interp_display_prompt_p.
(gdb_setup_readline): Initialize gdb_stdout, gdb_stderr,
gdb_stdlog, and gdb_stdtarg.
(_initialize_event_loop): Don't call gdb_setup_readline.
* cli-out.c (cli_out_set_stream): New function.
* cli-out.h (cli_out_set_stream): Declare.
2003-02-06 02:19:12 +01:00
|
|
|
|
struct ui_file *
|
|
|
|
|
cli_out_set_stream (struct ui_out *uiout, struct ui_file *stream)
|
|
|
|
|
{
|
2003-03-08 21:04:27 +01:00
|
|
|
|
cli_out_data *data = ui_out_data (uiout);
|
gdb/
* breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
* cli-out.c: Include vec.h.
(cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
variable stream, initialize it, use it.
(cli_redirect): New function comment. Replace the stream and
original_stream fields by the new streams field. Remove the
original_stream != NULL conditional, assert error on NULL instead.
(out_field_fmt, field_separator): New variable stream, initialize it, use it.
(cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
original_stream fields by the new streams field.
(cli_out_set_stream): Replace the stream field by the new streams
field.
* cli-out.h: Include vec.h.
(ui_filep): New typedef, call DEF_VEC_P for it.
(struct cli_ui_out_data): Replace the stream and original_stream
fields by the new streams field.
* cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
NULL first. Extend the comment.
(handle_redirections): Call ui_out_redirect with output.
* python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
calls outside of the TRY_CATCH block.
gdb/testsuite/
* gdb.base/ui-redirect.exp: New file.
2010-09-03 17:42:04 +02:00
|
|
|
|
struct ui_file *old;
|
|
|
|
|
|
|
|
|
|
old = VEC_pop (ui_filep, data->streams);
|
|
|
|
|
VEC_quick_push (ui_filep, data->streams, stream);
|
2010-05-14 01:53:32 +02:00
|
|
|
|
|
2003-02-05 Jim Ingham <jingham@apple.com>
Keith Seitz <keiths@redhat.com>
Elena Zannoni <ezannoni@redhat.com>
Andrew Cagney <ac131313@redhat.com>
* Makefile.in (SUBDIR_CLI_OBS): Add "cli-interp.o".
(SUBDIR_CLI_SRCS): Add "cli/cli-interp.c".
(SUBDIR_MI_OBS): Add "mi-interp.o".
(SUBDIR_MI_SRCS): Add "mi/mi-interp.c".
(SFILES): Add "interps.c".
(COMMON_OBS): Add "interps.o".
(interps_h, mi_main_h): Define.
(interps.o, cli-interp.o, mi-interp.o): Add dependencies.
(mi-main.o, main.o, event-top.o): Update dependencies.
* cli/cli-interp.c: New file.
* interps.h, interps.c: New files.
* top.c: (gdb_init): Don't install the default interpreter, handed
by captured_main.
* main.c: Include "interps.h".
(interpreter_p): Note that it should malloc'ed.
(captured_command_loop): Call current_interp_command_loop.
(captured_main): Initialize interpreter_p to INTERP_CONSOLE. Use
xfree and xstrdup when updating interpreter_p. Install the
default interpreter. Add hack to stop mi1's copyright notice
being encoded.
* event-top.h (gdb_setup_readline): Declare.
(gdb_disable_readline): Declare.
* event-top.c: Include "interps.h".
(display_gdb_prompt): Call current_interp_display_prompt_p.
(gdb_setup_readline): Initialize gdb_stdout, gdb_stderr,
gdb_stdlog, and gdb_stdtarg.
(_initialize_event_loop): Don't call gdb_setup_readline.
* cli-out.c (cli_out_set_stream): New function.
* cli-out.h (cli_out_set_stream): Declare.
2003-02-06 02:19:12 +01:00
|
|
|
|
return old;
|
|
|
|
|
}
|
Unify CLI/TUI interface to readline tab completion.
This copies a lot of code from readline, but this is temporary.
Readline currently doesn't export what we need.
The plan is to have something that has been working for awhile,
and then we'll have a complete story to present to the readline
maintainers.
gdb/ChangeLog:
* cli-out.c: #include completer.h, readline/readline.h.
(cli_mld_crlf, cli_mld_putch, cli_mld_puts): New functions.
(cli_mld_flush, cld_mld_erase_entire_line): Ditto.
(cli_mld_beep, cli_mld_read_key, cli_display_match_list): Ditto.
* cli-out.h (cli_display_match_list): Declare.
* completer.c (MB_INVALIDCH, MB_NULLWCH): New macros.
(ELLIPSIS_LEN): Ditto.
(gdb_get_y_or_n, gdb_display_match_list_pager): New functions.
(gdb_path_isdir, gdb_printable_part, gdb_fnwidth): Ditto.
(gdb_fnprint, gdb_print_filename): Ditto.
(gdb_complete_get_screenwidth, gdb_display_match_list_1): Ditto.
(gdb_display_match_list): Ditto.
* completer.h (mld_crlf_ftype, mld_putch_ftype): New typedefs.
(mld_puts_ftype, mld_flush_ftype, mld_erase_entire_line_ftype): Ditto.
(mld_beep_ftype, mld_read_key_ftype): Ditto.
(match_list_displayer): New struct.
(gdb_display_match_list): Declare.
* top.c (init_main): Set rl_completion_display_matches_hook.
* tui/tui-io.c: #include completer.h.
(printable_part, PUTX, print_filename, get_y_or_n): Delete.
(tui_mld_crlf, tui_mld_putch, tui_mld_puts): New functions.
(tui_mld_flush, tui_mld_erase_entire_line, tui_mld_beep): Ditto.
(tui_mld_getc, tui_mld_read_key): Ditto.
(tui_rl_display_match_list): Rewrite.
(tui_handle_resize_during_io): New arg for_completion. All callers
updated.
2015-01-31 23:11:54 +01:00
|
|
|
|
|
|
|
|
|
/* CLI interface to display tab-completion matches. */
|
|
|
|
|
|
|
|
|
|
/* CLI version of displayer.crlf. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
cli_mld_crlf (const struct match_list_displayer *displayer)
|
|
|
|
|
{
|
|
|
|
|
rl_crlf ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* CLI version of displayer.putch. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
cli_mld_putch (const struct match_list_displayer *displayer, int ch)
|
|
|
|
|
{
|
|
|
|
|
putc (ch, rl_outstream);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* CLI version of displayer.puts. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
cli_mld_puts (const struct match_list_displayer *displayer, const char *s)
|
|
|
|
|
{
|
|
|
|
|
fputs (s, rl_outstream);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* CLI version of displayer.flush. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
cli_mld_flush (const struct match_list_displayer *displayer)
|
|
|
|
|
{
|
|
|
|
|
fflush (rl_outstream);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* CLI version of displayer.erase_entire_line. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
cli_mld_erase_entire_line (const struct match_list_displayer *displayer)
|
|
|
|
|
{
|
|
|
|
|
extern void _rl_erase_entire_line (void);
|
|
|
|
|
|
|
|
|
|
_rl_erase_entire_line ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* CLI version of displayer.beep. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
cli_mld_beep (const struct match_list_displayer *displayer)
|
|
|
|
|
{
|
|
|
|
|
rl_ding ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* CLI version of displayer.read_key. */
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
cli_mld_read_key (const struct match_list_displayer *displayer)
|
|
|
|
|
{
|
|
|
|
|
return rl_read_key ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* CLI version of rl_completion_display_matches_hook.
|
|
|
|
|
See gdb_display_match_list for a description of the arguments. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
cli_display_match_list (char **matches, int len, int max)
|
|
|
|
|
{
|
|
|
|
|
struct match_list_displayer displayer;
|
|
|
|
|
|
|
|
|
|
rl_get_screen_size (&displayer.height, &displayer.width);
|
|
|
|
|
displayer.crlf = cli_mld_crlf;
|
|
|
|
|
displayer.putch = cli_mld_putch;
|
|
|
|
|
displayer.puts = cli_mld_puts;
|
|
|
|
|
displayer.flush = cli_mld_flush;
|
|
|
|
|
displayer.erase_entire_line = cli_mld_erase_entire_line;
|
|
|
|
|
displayer.beep = cli_mld_beep;
|
|
|
|
|
displayer.read_key = cli_mld_read_key;
|
|
|
|
|
|
|
|
|
|
gdb_display_match_list (matches, len, max, &displayer);
|
|
|
|
|
rl_forced_update_display ();
|
|
|
|
|
}
|