1. 14 Jan, 2019 1 commit
    • Tom Tromey's avatar
      Fix placement of output in TUI mode · bbd94648
      Tom Tromey authored
      The fix for PR tui/28819 regressed gdb command output a bit.  In
      "nonl" mode, pressing the Enter key will result in a newline not being
      echoed properly, so that gdb output for the command will begin on the
      same line as the input.
      
      This patch changes gdb_wgetch to echo the newline.  I have only tested
      this interactively, as the TUI doesn't have automated tests in
      general.
      
      gdb/ChangeLog
      2019-01-14  Tom Tromey  <tom@tromey.com>
      
      	PR tui/28819:
      	* tui/tui-io.c (gdb_wgetch): Print \r when needed.
      bbd94648
  2. 01 Jan, 2019 1 commit
    • Joel Brobecker's avatar
      Update copyright year range in all GDB files. · 42a4f53d
      Joel Brobecker authored
      This commit applies all changes made after running the gdb/copyright.py
      script.
      
      Note that one file was flagged by the script, due to an invalid
      copyright header
      (gdb/unittests/basic_string_view/element_access/char/empty.cc).
      As the file was copied from GCC's libstdc++-v3 testsuite, this commit
      leaves this file untouched for the time being; a patch to fix the header
      was sent to gcc-patches first.
      
      gdb/ChangeLog:
      
      	Update copyright year range in all GDB files.
      42a4f53d
  3. 28 Dec, 2018 2 commits
    • Tom Tromey's avatar
      Highlight source code using GNU Source Highlight · 62f29fda
      Tom Tromey authored
      This changes gdb to highlight source using GNU Source Highlight, if it
      is available.
      
      This affects the output of the "list" command and also the TUI source
      window.
      
      No new test because I didn't see a way to make it work when Source
      Highlight is not found.
      
      gdb/ChangeLog
      2018-12-28  Tom Tromey  <tom@tromey.com>
      
      	* utils.h (can_emit_style_escape): Declare.
      	* utils.c (can_emit_style_escape): No longer static.
      	* cli/cli-style.c (set_style_enabled): New function.
      	(_initialize_cli_style): Use it.
      	* tui/tui-winsource.c (tui_show_source_line): Use tui_puts.
      	(tui_alloc_source_buffer): Change how source lines are allocated.
      	* tui/tui-source.c (copy_source_line): New function.
      	(tui_set_source_content): Use source cache.
      	* tui/tui-io.h (tui_puts): Update.
      	* tui/tui-io.c (tui_puts_internal): Add window parameter.
      	(tui_puts): Likewise.
      	(tui_redisplay_readline): Update.
      	* tui/tui-data.c (free_content_elements): Change how source window
      	contents are freed.
      	* source.c (forget_cached_source_info): Clear the source cache.
      	(print_source_lines_base): Use the source cache.
      	* source-cache.h: New file.
      	* source-cache.c: New file.
      	* configure.ac: Check for GNU Source Highlight library.
      	* configure: Update.
      	* config.in: Update.
      	* Makefile.in (SRCHIGH_LIBS, SRCHIGH_CFLAGS): New variables.
      	(INTERNAL_CFLAGS_BASE): Add SRCHIGH_CFLAGS.
      	(CLIBS): Add SRCHIGH_LIBS.
      	(COMMON_SFILES): Add source-cache.c.
      	(HFILES_NO_SRCDIR): Add source-cache.h.
      62f29fda
    • Tom Tromey's avatar
      Make ANSI terminal escape sequences work in TUI · 1d1d0bf7
      Tom Tromey authored
      PR tui/14126 notes that ANSI terminal escape sequences don't affect
      the colors shown in the TUI.  A simple way to see this is to try the
      extended-prompt example from the gdb manual.
      
      Curses does not pass escape sequences through to the terminal.
      Instead, it replaces non-printable characters with a visible
      representation, for example "^[" for the ESC character.
      
      This patch fixes the problem by adding a simple ANSI terminal sequence
      parser to gdb.  These sequences are decoded and those that are
      recognized are turned into the appropriate curses calls.
      
      The curses approach to color handling is unusual and so there are some
      oddities in the implementation.
      
      Standard curses has no notion of the default colors of the terminal.
      So, if you set the foreground color, it is not possible to reset it --
      you have to pick some other color.  ncurses provides an extension to
      handle this, so this patch updates configure and uses it when
      available.
      
      Second, in curses, colors always come in pairs: you cannot set just
      the foreground.  This patch handles this by tracking actually-used
      pairs of colors and keeping a table of these for reuse.
      
      Third, there are a limited number of such pairs available.  In this
      patch, if you try to use too many color combinations, gdb will just
      ignore some color changes.
      
      Finally, in addition to limiting the number of color pairs, curses
      also limits the number of colors.  This means that, when using
      extended 8- or 24-bit color sequences, it may be possible to exhaust
      the curses color table.
      
      I am very sour on the curses design now.
      
      I do not know how to write a test for this, so I did not.
      
      gdb/ChangeLog
      2018-12-28  Tom Tromey  <tom@tromey.com>
      
      	PR tui/14126:
      	* tui/tui.c (tui_enable): Call start_color and
      	use_default_colors.
      	* tui/tui-io.c (struct color_pair): New.
      	(color_pair_map, last_color_pair, last_style): New globals.
      	(tui_setup_io): Clean up color map when shutting down.
      	(curses_colors): New constant.
      	(get_color_pair, apply_ansi_escape): New functions.
      	(tui_write): Rewrite.
      	(tui_puts_internal): New function, from tui_puts.  Add "height"
      	parameter.
      	(tui_puts): Use tui_puts_internal.
      	(tui_redisplay_readline): Use tui_puts_internal.
      	(_initialize_tui_io): New function.
      	(color_map): New globals.
      	(get_color): New function.
      	* configure.ac: Check for use_default_colors.
      	* config.in, configure: Rebuild.
      1d1d0bf7
  4. 19 Oct, 2018 1 commit
    • Tom Tromey's avatar
      Minor cleanups in tui-io.c · 84371624
      Tom Tromey authored
      I noticed that a couple of functions in tui-io.c could be static, and
      that a couple more were unused and could be removed.
      
      gdb/ChangeLog
      2018-10-19  Tom Tromey  <tom@tromey.com>
      
      	* tui/tui-io.h (key_is_start_sequence, key_is_end_sequence)
      	(key_is_backspace, tui_getc): Don't declare.
      	* tui/tui-io.c (key_is_start_sequence): Now static.
      	(key_is_end_sequence, key_is_backspace): Remove.
      	(tui_getc): Now static.
      84371624
  5. 06 Oct, 2018 1 commit
    • Tom Tromey's avatar
      Call nonl before wgetch in TUI · 7a956928
      Tom Tromey authored
      PR tui/28819 points out that, in the TUI, the C-j and C-m keys cannot
      be bound differently in one's ~/.inputrc.  However, this works in
      other readline applications.
      
      The bug is that the TUI uses curses' "nl" mode, which causes wgetch to
      return the same value for both keys.  There is a "nonl" mode, but it
      also affects output.
      
      This patch fixes the bug by arranging to call nonl before reading a
      key and then nl afterward.  This avoids any potential problem with
      changing the output if gdb was to use nonl globally.
      
      gdb/ChangeLog
      2018-10-06  Tom Tromey  <tom@tromey.com>
      
      	PR tui/28819:
      	* tui/tui-io.c (gdb_wgetch): New function.
      	(tui_mld_getc, tui_getc): Use it.
      7a956928
  6. 02 Jan, 2018 1 commit
  7. 08 Mar, 2017 1 commit
    • Pedro Alves's avatar
      Fix PR tui/21216: TUI line breaks regression · 9753a2f6
      Pedro Alves authored
      Commit d7e74731 ("Eliminate make_cleanup_ui_file_delete / make
      ui_file a class hierarchy") regressed the TUI's command window.
      Newlines miss doing a "carriage return", resulting in output like:
      
      ~~~~~~~~~~~~~~~~~~
      (gdb) helpList of classes of commands:
      
                                            aliases -- Aliases of other commands
                                                                                breakpoints -- Making program stop at certain points
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      Before the commit mentioned above, the default ui_file->to_write
      implementation had a hack that would defer into the ui_file->to_fputs
      method.  The TUI's ui_file did not implement the to_write method, so
      all writes would end up going to the ncurses window via tui_file_fputs
      -> tui_puts.
      
      After the commit above, the hack is gone, but the TUI's ui_file still
      does not implement the ui_file::write method.  Since tui_file inherits
      from stdio_file, writing to a tui_file ends up doing fwrite on the
      FILE stream the TUI is "associated" with, via stdio_file::write,
      instead of writing to the ncurses window.
      
      The fix is to have tui_file override the "write" method.
      
      New test included.
      
      gdb/ChangeLog:
      2017-03-08  Pedro Alves  <palves@redhat.com>
      
      	PR tui/21216
      	* tui/tui-file.c (tui_file::write): New.
      	* tui/tui-file.h (tui_file): Override "write".
      	* tui/tui-io.c (do_tui_putc, update_start_line): New functions,
      	factored out from ...
      	(tui_puts): ... here.
      	(tui_putc): Use them.
      	(tui_write): New function.
      	* tui/tui-io.h (tui_write): Declare.
      
      gdb/testsuite/ChangeLog:
      2017-03-08  Pedro Alves  <palves@redhat.com>
      
      	PR tui/21216
      	* gdb.tui/tui-nl-filtered-output.exp: New file.
      9753a2f6
  8. 02 Feb, 2017 1 commit
    • Pedro Alves's avatar
      Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy · d7e74731
      Pedro Alves authored
      This patch starts from the desire to eliminate
      make_cleanup_ui_file_delete, but then goes beyond.  It makes ui_file &
      friends a real C++ class hierarchy, and switches temporary
      ui_file-like objects to stack-based allocation.
      
      - mem_fileopen -> string_file
      
      mem_fileopen is replaced with a new string_file class that is treated
      as a value class created on the stack.  This alone eliminates most
      make_cleanup_ui_file_delete calls, and, simplifies code a whole lot
      (diffstat shows around 1k loc dropped.)
      
      string_file's internal buffer is a std::string, thus the "string" in
      the name.  This simplifies the implementation much, compared to
      mem_fileopen, which managed growing its internal buffer manually.
      
      - ui_file_as_string, ui_file_strdup, ui_file_obsavestring all gone
      
      The new string_file class has a string() method that provides direct
      writable access to the internal std::string buffer.  This replaced
      ui_file_as_string, which forced a copy of the same data the stream had
      inside.  With direct access via a writable reference, we can instead
      move the string out of the string_stream, avoiding deep string
      copying.
      
      Related, ui_file_xstrdup calls are replaced with xstrdup'ping the
      stream's string, and ui_file_obsavestring is replaced by
      obstack_copy0.
      
      With all those out of the way, getting rid of the weird ui_file_put
      mechanism was possible.
      
      - New ui_file::printf, ui_file::puts, etc. methods
      
      These simplify / clarify client code.  I considered splitting
      client-code changes, like these, e.g.:
      
        -  stb = mem_fileopen ();
        -  fprintf_unfiltered (stb, "%s%s%s",
        -		      _("The valid values are:\n"),
        -		      regdesc,
        -		      _("The default is \"std\"."));
        +  string_file stb;
        +  stb.printf ("%s%s%s",
        +	      _("The valid values are:\n"),
        +	      regdesc,
        +	      _("The default is \"std\"."));
      
      In two steps, with the first step leaving fprintf_unfiltered (etc.)
      calls in place, and only afterwards do a pass to change all those to
      call stb.printf etc..  I didn't do that split, because (when I tried),
      it turned out to be pointless make-work: the first pass would have to
      touch the fprintf_unfiltered line anyway, to replace "stb" with
      "&stb".
      
      - gdb_fopen replaced with stack-based objects
      
      This avoids the need for cleanups or unique_ptr's.  I.e., this:
      
            struct ui_file *file = gdb_fopen (filename, "w");
            if (filename == NULL)
       	perror_with_name (filename);
            cleanups = make_cleanup_ui_file_delete (file);
            // use file.
            do_cleanups (cleanups);
      
      is replaced with this:
      
            stdio_file file;
            if (!file.open (filename, "w"))
       	perror_with_name (filename);
            // use file.
      
      - odd contorsions in null_file_write / null_file_fputs around when to
        call to_fputs / to_write eliminated.
      
      - Global null_stream object
      
      A few places that were allocating a ui_file in order to print to
      "nowhere" are adjusted to instead refer to a new 'null_stream' global
      stream.
      
      - TUI's tui_sfileopen eliminated.  TUI's ui_file much simplified
      
      The TUI's ui_file was serving a dual purpose.  It supported being used
      as string buffer, and supported being backed by a stdio FILE.  The
      string buffer part is gone, replaced by using of string_file.  The
      'FILE *' support is now much simplified, by making the TUI's ui_file
      inherit from stdio_file.
      
      gdb/ChangeLog:
      2017-02-02  Pedro Alves  <palves@redhat.com>
      
      	* ada-lang.c (type_as_string): Use string_file.
      	* ada-valprint.c (ada_print_floating): Use string_file.
      	* ada-varobj.c (ada_varobj_scalar_image)
      	(ada_varobj_get_value_image): Use string_file.
      	* aix-thread.c (aix_thread_extra_thread_info): Use string_file.
      	* arm-tdep.c (_initialize_arm_tdep): Use string_printf.
      	* breakpoint.c (update_inserted_breakpoint_locations)
      	(insert_breakpoint_locations, reattach_breakpoints)
      	(print_breakpoint_location, print_one_detail_ranged_breakpoint)
      	(print_it_watchpoint): Use string_file.
      	(save_breakpoints): Use stdio_file.
      	* c-exp.y (oper): Use string_file.
      	* cli/cli-logging.c (set_logging_redirect): Use ui_file_up and
      	tee_file.
      	(pop_output_files): Use delete.
      	(handle_redirections): Use stdio_file and tee_file.
      	* cli/cli-setshow.c (do_show_command): Use string_file.
      	* compile/compile-c-support.c (c_compute_program): Use
      	string_file.
      	* compile/compile-c-symbols.c (generate_vla_size): Take a
      	'string_file &' instead of a 'ui_file *'.
      	(generate_c_for_for_one_variable): Take a 'string_file &' instead
      	of a 'ui_file *'.  Use string_file.
      	(generate_c_for_variable_locations): Take a 'string_file &'
      	instead of a 'ui_file *'.
      	* compile/compile-internal.h (generate_c_for_for_one_variable):
      	Take a 'string_file &' instead of a 'ui_file *'.
      	* compile/compile-loc2c.c (push, pushf, unary, binary)
      	(print_label, pushf_register_address, pushf_register)
      	(do_compile_dwarf_expr_to_c): Take a 'string_file &' instead of a
      	'ui_file *'.  Adjust.
      	* compile/compile.c (compile_to_object): Use string_file.
      	* compile/compile.h (compile_dwarf_expr_to_c)
      	(compile_dwarf_bounds_to_c): Take a 'string_file &' instead of a
      	'ui_file *'.
      	* cp-support.c (inspect_type): Use string_file and obstack_copy0.
      	(replace_typedefs_qualified_name): Use string_file and
      	obstack_copy0.
      	* disasm.c (gdb_pretty_print_insn): Use string_file.
      	(gdb_disassembly): Adjust reference the null_stream global.
      	(do_ui_file_delete): Delete.
      	(gdb_insn_length): Use null_stream.
      	* dummy-frame.c (maintenance_print_dummy_frames): Use stdio_file.
      	* dwarf2loc.c (dwarf2_compile_property_to_c)
      	(locexpr_generate_c_location, loclist_generate_c_location): Take a
      	'string_file &' instead of a 'ui_file *'.
      	* dwarf2loc.h (dwarf2_compile_property_to_c): Likewise.
      	* dwarf2read.c (do_ui_file_peek_last): Delete.
      	(dwarf2_compute_name): Use string_file.
      	* event-top.c (gdb_setup_readline): Use stdio_file.
      	* gdbarch.sh (verify_gdbarch): Use string_file.
      	* gdbtypes.c (safe_parse_type): Use null_stream.
      	* guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Use
      	string_file.
      	* guile/scm-disasm.c (gdbscm_print_insn_from_port): Take a
      	'string_file *' instead of a 'ui_file *'.
      	(gdbscm_arch_disassemble): Use string_file.
      	* guile/scm-frame.c (frscm_print_frame_smob): Use string_file.
      	* guile/scm-ports.c (class ioscm_file_port): Now a class that
      	inherits from ui_file.
      	(ioscm_file_port_delete, ioscm_file_port_rewind)
      	(ioscm_file_port_put): Delete.
      	(ioscm_file_port_write): Rename to ...
      	(ioscm_file_port::write): ... this.  Remove file_port_magic
      	checks.
      	(ioscm_file_port_new): Delete.
      	(ioscm_with_output_to_port_worker): Use ioscm_file_port and
      	ui_file_up.
      	* guile/scm-type.c (tyscm_type_name): Use string_file.
      	* guile/scm-value.c (vlscm_print_value_smob, gdbscm_value_print):
      	Use string_file.
      	* infcmd.c (print_return_value_1): Use string_file.
      	* infrun.c (print_target_wait_results): Use string_file.
      	* language.c (add_language): Use string_file.
      	* location.c (explicit_to_string_internal): Use string_file.
      	* main.c (captured_main_1): Use null_file.
      	* maint.c (maintenance_print_architecture): Use stdio_file.
      	* mi/mi-cmd-stack.c (list_arg_or_local): Use string_file.
      	* mi/mi-common.h (struct mi_interp) <out, err, log, targ,
      	event_channel>: Change type to mi_console_file pointer.
      	* mi/mi-console.c (mi_console_file_fputs, mi_console_file_flush)
      	(mi_console_file_delete): Delete.
      	(struct mi_console_file): Delete.
      	(mi_console_file_magic): Delete.
      	(mi_console_file_new): Delete.
      	(mi_console_file::mi_console_file): New.
      	(mi_console_file_delete): Delete.
      	(mi_console_file_fputs): Delete.
      	(mi_console_file::write): New.
      	(mi_console_raw_packet): Delete.
      	(mi_console_file::flush): New.
      	(mi_console_file_flush): Delete.
      	(mi_console_set_raw): Rename to ...
      	(mi_console_file::set_raw): ... this.
      	* mi/mi-console.h (class mi_console_file): New class.
      	(mi_console_file_new, mi_console_set_raw): Delete.
      	* mi/mi-interp.c (mi_interpreter_init): Use mi_console_file.
      	(mi_set_logging): Use delete and tee_file.  Adjust.
      	* mi/mi-main.c (output_register): Use string_file.
      	(mi_cmd_data_evaluate_expression): Use string_file.
      	(mi_cmd_data_read_memory): Use string_file.
      	(mi_cmd_execute, print_variable_or_computed): Use string_file.
      	* mi/mi-out.c (mi_ui_out::main_stream): New.
      	(mi_ui_out::rewind): Use main_stream and
      	string_file.
      	(mi_ui_out::put): Use main_stream and string_file.
      	(mi_ui_out::mi_ui_out): Remove 'stream' parameter.
      	Allocate a 'string_file' instead.
      	(mi_out_new): Don't allocate a mem_fileopen stream here.
      	* mi/mi-out.h (mi_ui_out::mi_ui_out): Remove 'stream' parameter.
      	(mi_ui_out::main_stream): Declare method.
      	* printcmd.c (eval_command): Use string_file.
      	* psymtab.c (maintenance_print_psymbols): Use stdio_file.
      	* python/py-arch.c (archpy_disassemble): Use string_file.
      	* python/py-breakpoint.c (bppy_get_commands): Use string_file.
      	* python/py-frame.c (frapy_str): Use string_file.
      	* python/py-framefilter.c (py_print_type, py_print_single_arg):
      	Use string_file.
      	* python/py-type.c (typy_str): Use string_file.
      	* python/py-unwind.c (unwind_infopy_str): Use string_file.
      	* python/py-value.c (valpy_str): Use string_file.
      	* record-btrace.c (btrace_insn_history): Use string_file.
      	* regcache.c (regcache_print): Use stdio_file.
      	* reggroups.c (maintenance_print_reggroups): Use stdio_file.
      	* remote.c (escape_buffer): Use string_file.
      	* rust-lang.c (rust_get_disr_info): Use string_file.
      	* serial.c (serial_open_ops_1): Use stdio_file.
      	(do_serial_close): Use delete.
      	* stack.c (print_frame_arg): Use string_file.
      	(print_frame_args): Remove local mem_fileopen stream, not used.
      	(print_frame): Use string_file.
      	* symmisc.c (maintenance_print_symbols): Use stdio_file.
      	* symtab.h (struct symbol_computed_ops) <generate_c_location>:
      	Take a 'string_file *' instead of a 'ui_file *'.
      	* top.c (new_ui): Use stdio_file and stderr_file.
      	(free_ui): Use delete.
      	(execute_command_to_string): Use string_file.
      	(quit_confirm): Use string_file.
      	* tracepoint.c (collection_list::append_exp): Use string_file.
      	* tui/tui-disasm.c (tui_disassemble): Use string_file.
      	* tui/tui-file.c: Don't include "ui-file.h".
      	(enum streamtype, struct tui_stream): Delete.
      	(tui_file_new, tui_file_delete, tui_fileopen, tui_sfileopen)
      	(tui_file_isatty, tui_file_rewind, tui_file_put): Delete.
      	(tui_file::tui_file): New method.
      	(tui_file_fputs): Delete.
      	(tui_file_get_strbuf): Delete.
      	(tui_file::puts): New method.
      	(tui_file_adjust_strbuf): Delete.
      	(tui_file_flush): Delete.
      	(tui_file::flush): New method.
      	* tui/tui-file.h: Tweak intro comment.
      	Include ui-file.h.
      	(tui_fileopen, tui_sfileopen, tui_file_get_strbuf)
      	(tui_file_adjust_strbuf): Delete declarations.
      	(class tui_file): New class.
      	* tui/tui-io.c (tui_initialize_io): Use tui_file.
      	* tui/tui-regs.c (tui_restore_gdbout): Use delete.
      	(tui_register_format): Use string_stream.
      	* tui/tui-stack.c (tui_make_status_line): Use string_file.
      	(tui_get_function_from_frame): Use string_file.
      	* typeprint.c (type_to_string): Use string_file.
      	* ui-file.c (struct ui_file, ui_file_magic, ui_file_new): Delete.
      	(null_stream): New global.
      	(ui_file_delete): Delete.
      	(ui_file::ui_file): New.
      	(null_file_isatty): Delete.
      	(ui_file::~ui_file): New.
      	(null_file_rewind): Delete.
      	(ui_file::printf): New.
      	(null_file_put): Delete.
      	(null_file_flush): Delete.
      	(ui_file::putstr): New.
      	(null_file_write): Delete.
      	(ui_file::putstrn): New.
      	(null_file_read): Delete.
      	(ui_file::putc): New.
      	(null_file_fputs): Delete.
      	(null_file_write_async_safe): Delete.
      	(ui_file::vprintf): New.
      	(null_file_delete): Delete.
      	(null_file::write): New.
      	(null_file_fseek): Delete.
      	(null_file::puts): New.
      	(ui_file_data): Delete.
      	(null_file::write_async_safe): New.
      	(gdb_flush, ui_file_isatty): Adjust.
      	(ui_file_put, ui_file_rewind): Delete.
      	(ui_file_write): Adjust.
      	(ui_file_write_for_put): Delete.
      	(ui_file_write_async_safe, ui_file_read): Adjust.
      	(ui_file_fseek): Delete.
      	(fputs_unfiltered): Adjust.
      	(set_ui_file_flush, set_ui_file_isatty, set_ui_file_rewind)
      	(set_ui_file_put, set_ui_file_write, set_ui_file_write_async_safe)
      	(set_ui_file_read, set_ui_file_fputs, set_ui_file_fseek)
      	(set_ui_file_data): Delete.
      	(string_file::~string_file, string_file::write)
      	(struct accumulated_ui_file, do_ui_file_xstrdup, ui_file_xstrdup)
      	(do_ui_file_as_string, ui_file_as_string): Delete.
      	(do_ui_file_obsavestring, ui_file_obsavestring): Delete.
      	(struct mem_file): Delete.
      	(mem_file_new): Delete.
      	(stdio_file::stdio_file): New.
      	(mem_file_delete): Delete.
      	(stdio_file::stdio_file): New.
      	(mem_fileopen): Delete.
      	(stdio_file::~stdio_file): New.
      	(mem_file_rewind): Delete.
      	(stdio_file::set_stream): New.
      	(mem_file_put): Delete.
      	(stdio_file::open): New.
      	(mem_file_write): Delete.
      	(stdio_file_magic, struct stdio_file): Delete.
      	(stdio_file_new, stdio_file_delete, stdio_file_flush): Delete.
      	(stdio_file::flush): New.
      	(stdio_file_read): Rename to ...
      	(stdio_file::read): ... this.  Adjust.
      	(stdio_file_write): Rename to ...
      	(stdio_file::write): ... this.  Adjust.
      	(stdio_file_write_async_safe): Rename to ...
      	(stdio_file::write_async_safe) ... this.  Adjust.
      	(stdio_file_fputs): Rename to ...
      	(stdio_file::puts) ... this.  Adjust.
      	(stdio_file_isatty): Delete.
      	(stdio_file_fseek): Delete.
      	(stdio_file::isatty): New.
      	(stderr_file_write): Rename to ...
      	(stderr_file::write) ... this.  Adjust.
      	(stderr_file_fputs): Rename to ...
      	(stderr_file::puts) ... this.  Adjust.
      	(stderr_fileopen, stdio_fileopen, gdb_fopen): Delete.
      	(stderr_file::stderr_file): New.
      	(tee_file_magic): Delete.
      	(struct tee_file): Delete.
      	(tee_file::tee_file): New.
      	(tee_file_new): Delete.
      	(tee_file::~tee_file): New.
      	(tee_file_delete): Delete.
      	(tee_file_flush): Rename to ...
      	(tee_file::flush): ... this.  Adjust.
      	(tee_file_write): Rename to ...
      	(tee_file::write): ... this.  Adjust.
      	(tee_file::write_async_safe): New.
      	(tee_file_fputs): Rename to ...
      	(tee_file::puts): ... this.  Adjust.
      	(tee_file_isatty): Rename to ...
      	(tee_file::isatty): ... this.  Adjust.
      	* ui-file.h (struct obstack, struct ui_file): Don't
      	forward-declare.
      	(ui_file_new, ui_file_flush_ftype, set_ui_file_flush)
      	(ui_file_write_ftype)
      	(set_ui_file_write, ui_file_fputs_ftype, set_ui_file_fputs)
      	(ui_file_write_async_safe_ftype, set_ui_file_write_async_safe)
      	(ui_file_read_ftype, set_ui_file_read, ui_file_isatty_ftype)
      	(set_ui_file_isatty, ui_file_rewind_ftype, set_ui_file_rewind)
      	(ui_file_put_method_ftype, ui_file_put_ftype, set_ui_file_put)
      	(ui_file_delete_ftype, set_ui_file_data, ui_file_fseek_ftype)
      	(set_ui_file_fseek): Delete.
      	(ui_file_data, ui_file_delete, ui_file_rewind)
      	(struct ui_file): New.
      	(ui_file_up): New.
      	(class null_file): New.
      	(null_stream): Declare.
      	(ui_file_write_for_put, ui_file_put): Delete.
      	(ui_file_xstrdup, ui_file_as_string, ui_file_obsavestring):
      	Delete.
      	(ui_file_fseek, mem_fileopen, stdio_fileopen, stderr_fileopen)
      	(gdb_fopen, tee_file_new): Delete.
      	(struct string_file): New.
      	(struct stdio_file): New.
      	(stdio_file_up): New.
      	(struct stderr_file): New.
      	(class tee_file): New.
      	* ui-out.c (ui_out::field_stream): Take a 'string_file &' instead
      	of a 'ui_file *'.  Adjust.
      	* ui-out.h (class ui_out) <field_stream>: Likewise.
      	* utils.c (do_ui_file_delete, make_cleanup_ui_file_delete)
      	(null_stream): Delete.
      	(error_stream): Take a 'string_file &' instead of a 'ui_file *'.
      	Adjust.
      	* utils.h (struct ui_file): Delete forward declaration..
      	(make_cleanup_ui_file_delete, null_stream): Delete declarations.
      	(error_stream): Take a 'string_file &' instead of a
      	'ui_file *'.
      	* varobj.c (varobj_value_get_print_value): Use string_file.
      	* xtensa-tdep.c (xtensa_verify_config): Use string_file.
      	* gdbarch.c: Regenerate.
      d7e74731
  9. 01 Jan, 2017 1 commit
    • Joel Brobecker's avatar
      update copyright year range in GDB files · 61baf725
      Joel Brobecker authored
      This applies the second part of GDB's End of Year Procedure, which
      updates the copyright year range in all of GDB's files.
      
      gdb/ChangeLog:
      
              Update copyright year range in all GDB files.
      61baf725
  10. 22 Dec, 2016 1 commit
    • Simon Marchi's avatar
      Class-ify ui_out · 112e8700
      Simon Marchi authored
      This patch finalizes the C++ conversion of the ui-out subsystem, by
      turning the ui_out and ui_out_impl structures into a single class
      hierarchy.  ui_out functions are turned into virtual methods of that new
      class, so as a result there are a lot of call sites to update.
      
      In the previous version of the patchset, there were separate ui_out and
      ui_out_impl classes, but it wasn't really useful and added boilerplate.
      In this version there is simply an ui_out base class that is
      extended for CLI, TUI and MI.
      
      It's a bit hard to maintain a ChangeLog for such a big patch, I did my
      best but I'm sure there are some missing or outdated info in there...
      
      gdb/ChangeLog:
      
          * ui-out.h (ui_out_begin, ui_out_end, ui_out_table_header,
          ui_out_table_body,  ui_out_field_int, ui_out_field_fmt_int,
          ui_out_field_core_addr, ui_out_field_string, ui_out_field_stream,
          ui_out_field_fmt, ui_out_field_skip, ui_out_spaces, ui_out_text,
          ui_out_message, ui_out_wrap_hint, ui_out_flush, ui_out_test_flags,
          ui_out_query_field, ui_out_is_mi_like_p, ui_out_redirect):
          Remove, replace with a method in class ui_out.
          (table_begin_ftype): Remove, replace with pure virtual method in
          class ui_out.
          (table_body_ftype): Likewise.
          (table_end_ftype): Likewise.
          (table_header_ftype): Likewise.
          (ui_out_begin_ftype): Likewise.
          (ui_out_end_ftype): Likewise.
          (field_int_ftype): Likewise.
          (field_skip_ftype): Likewise.
          (field_string_ftype): Likewise.
          (field_fmt_ftype): Likewise.
          (spaces_ftype): Likewise.
          (text_ftype): Likewise.
          (message_ftype): Likewise.
          (wrap_hint_ftype): Likewise.
          (flush_ftype): Likewise.
          (redirect_ftype): Likewise.
          (data_destroy_ftype): Likewise.
          (struct ui_out_impl): Remove, replace with class ui_out.
          (ui_out_new): Remove.
          (class ui_out): New class.
          * ui-out.c (struct ui_out): Remove, replaced with class ui_out.
          (current_level): Remove, replace with ui_out method.
          (push_level): Likewise.
          (pop_level): Likewise.
          (uo_table_begin, uo_table_body, uo_table_end, uo_table_header,
          uo_begin, uo_end, uo_field_int, uo_field_skip, uo_field_fmt,
          uo_spaces, uo_text, uo_message, uo_wrap_hint, uo_flush,
          uo_redirect, uo_field_string): Remove.
          (ui_out_table_begin): Replace with ...
          (ui_out::table_begin): ... this.
          (ui_out_table_body): Replace with ...
          (ui_out::table_body): ... this.
          (ui_out_table_end): Replace with ...
          (ui_out::table_end): ... this.
          (ui_out_table_header): Replace with ...
          (ui_out::table_header): ... this.
          (ui_out_begin): Replace with ...
          (ui_out::begin): ... this.
          (ui_out_end): Replace with ...
          (ui_out::end): ... this.
          (ui_out_field_int): Replace with ...
          (ui_out::field_int): ... this.
          (ui_out_field_fmt_int): Replace with ...
          (ui_out::field_fmt_int): ... this.
          (ui_out_field_core_addr): Replace with ...
          (ui_out::field_core_addr): ... this.
          (ui_out_field_stream): Replace with ...
          (ui_out::field_stream): ... this.
          (ui_out_field_skip): Replace with ...
          (ui_out::field_skip): ... this.
          (ui_out_field_string): Replace with ...
          (ui_out::field_string): ... this.
          (ui_out_field_fmt): Replace with ...
          (ui_out::field_fmt): ... this.
          (ui_out_spaces): Replace with ...
          (ui_out::spaces): ... this.
          (ui_out_text): Replace with ...
          (ui_out::text): ... this.
          (ui_out_message): Replace with ...
          (ui_out::message): ... this.
          (ui_out_wrap_hint): Replace with ...
          (ui_out::wrap_hint): ... this.
          (ui_out_flush): Replace with ...
          (ui_out::flush): ... this.
          (ui_out_redirect): Replace with ...
          (ui_out::redirect): ... this.
          (ui_out_test_flags): Replace with ...
          (ui_out::test_flags): ... this.
          (ui_out_is_mi_like_p): Replace with ...
          (ui_out::is_mi_like_p): ... this.
          (verify_field): Replace with ...
          (ui_out::verify_field): ... this.
          (ui_out_query_field): Replace with ...
          (ui_out::query_table_field): ... this.
          (ui_out_data): Remove.
          (ui_out_new): Remove, replace with ...
          (ui_out::ui_out): ... this constructor.
          (do_cleanup_table_end, make_cleanup_ui_out_tuple_begin_end,
          do_cleanup_end, make_cleanup_ui_out_tuple_begin_end,
          make_cleanup_ui_out_list_begin_end): Update fallouts of struct
          ui_out -> class ui_out change.
          * cli-out.c (cli_out_data): Remove.
          (cli_uiout_dtor): Remove.
          (cli_table_begin): Replace with ...
          (cli_ui_out::do_table_begin): ... this new method.
          (cli_table_body): Replace with ...
          (cli_ui_out::do_table_body): ... this new method.
          (cli_table_end): Replace with ...
          (cli_ui_out::do_table_end): ... this new method.
          (cli_table_header): Replace with ...
          (cli_ui_out::do_table_header): ... this new method.
          (cli_begin): Replace with ...
          (cli_ui_out::do_begin): ... this new method.
          (cli_end): Replace with ...
          (cli_ui_out::do_end): ... this new method.
          (cli_field_int): Replace with ...
          (cli_ui_out::do_field_int): ... this new method.
          (cli_field_skip): Replace with ...
          (cli_ui_out::do_field_skip): ... this new method.
          (cli_field_string): Replace with ...
          (cli_ui_out::do_field_string): ... this new method.
          (cli_field_fmt): Replace with ...
          (cli_ui_out::do_field_fmt): ... this new method.
          (cli_spaces): Replace with ...
          (cli_ui_out::do_spaces): ... this new method.
          (cli_text): Replace with ...
          (cli_ui_out::do_text): ... this new method.
          (cli_message): Replace with ...
          (cli_ui_out::do_message): ... this new method.
          (cli_wrap_hint): Replace with ...
          (cli_ui_out::do_wrap_hint): ... this new method.
          (cli_flush): Replace with ...
          (cli_ui_out::do_flush): ... this new method.
          (cli_redirect): Replace with ...
          (cli_ui_out::do_redirect): ... this new method.
          (out_field_fmt): Replace with ...
          (cli_ui_out::out_field_fmt): ... this new method.
          (field_separator): Replace with ...
          (cli_ui_out::field_separator): ... this new method.
          (cli_out_set_stream): Replace with ...
          (cli_ui_out::set_stream): ... this new method.
          (cli_ui_out_impl): Remove.
          (cli_out_data_ctor): Remove.
          (cli_ui_out_impl::cli_ui_out_impl): New constructor.
          (cli_ui_out_impl::~cli_ui_out_impl): New destructor.
          (cli_out_new): Change return type to cli_ui_out *, instantiate a
          cli_ui_out.
          * cli-out.h (cli_ui_out_data): Remove, replace with class
          cli_ui_out.
          (class cli_ui_out): New class.
          (cli_ui_out_impl): Remove.
          (cli_out_data_ctor): Remove.
          (cli_out_new): Change return type to cli_ui_out*.
          (cli_out_set_stream): Remove.
          * cli/cli-interp.c (struct cli_interp) <cli_uiout>: Change type
          to cli_ui_out*.
          (cli_interpreter_resume): Adapt.
          (cli_interpreter_exec): Adapt.
          * mi/mi-out.c (mi_ui_out_data, mi_out_data): Remove.
          (mi_ui_out_impl): Remove.
          (mi_table_begin): Replace with ...
          (mi_ui_out::do_table_begin): ... this.
          (mi_table_body): Replace with ...
          (mi_ui_out::do_table_body): ... this.
          (mi_table_end): Replace with ...
          (mi_ui_out::do_table_end): ... this.
          (mi_table_header): Replace with ...
          (mi_ui_out::do_table_header): ... this.
          (mi_begin): Replace with ...
          (mi_ui_out::do_begin): ... this.
          (mi_end): Replace with ...
          (mi_ui_out::do_end): ... this.
          (mi_field_int): Replace with ...
          (mi_ui_out::do_field_int): ... this.
          (mi_field_skip): Replace with ...
          (mi_ui_out::do_field_skip): ... this.
          (mi_field_string): Replace with ...
          (mi_ui_out::do_field_string): ... this.
          (mi_field_fmt): Replace with ...
          (mi_ui_out::do_field_fmt): ... this.
          (mi_spaces): Replace with ...
          (mi_ui_out::do_spaces): ... this.
          (mi_text): Replace with ...
          (mi_ui_out::do_text): ... this.
          (mi_message): Replace with ...
          (mi_ui_out::do_message): ... this.
          (mi_wrap_hint): Replace with ...
          (mi_ui_out::do_wrap_hint): ... this.
          (mi_flush): Replace with ...
          (mi_ui_out::do_flush): ... this.
          (mi_redirect): Replace with ...
          (mi_ui_out::do_redirect):
          (field_separator): Replace with ...
          (mi_ui_out::field_separator):
          (mi_open): Replace with ...
          (mi_ui_out::open): ... this.
          (mi_close): Replace with ...
          (mi_ui_out::close): ... this.
          (mi_out_rewind): Replace with ...
          (mi_ui_out::rewind): ... this.
          (mi_out_put): Replace with ...
          (mi_ui_out::put): ... this.
          (mi_version): Replace with ...
          (mi_ui_out::version): ... this.
          (mi_out_data_ctor): Replace with ...
          (mi_ui_out::mi_ui_out): ... this.
          (mi_out_data_dtor): Replace with ...
          (mi_ui_out::~mi_ui_out): ... this.
          (mi_out_new): Change return type to mi_ui_out*, instantiate
          an mi_ui_out object.
          (as_mi_ui_out): New function.
          (mi_version): Update fallouts of struct ui_out to class ui_out
          transition.
          (mi_out_put): Likewise.
          (mi_out_rewind): Likewise.
          * mi/mi-out.h (mi_out_new): Change return type to mi_ui_out*.
          * tui/tui-out.c (tui_ui_out_data, tui_out_data, tui_ui_out_impl):
          Remove.
          (tui_field_int): Replace with ...
          (tui_ui_out::do_field_int): ... this.
          (tui_field_string): Replace with ...
          (tui_ui_out::do_field_string): ... this.
          (tui_field_fmt): Replace with ...
          (tui_ui_out::do_field_fmt): ... this.
          (tui_text): Replace with ...
          (tui_ui_out::do_text): ... this.
          (tui_out_new): Change return type to tui_ui_out*, instantiate
          tui_ui_out object.
          (tui_ui_out::tui_ui_out): New.
          * tui/tui-out.h: New file.
          * tui/tui.h (tui_out_new): Move declaration to tui/tui-out.h.
          * tui/tui-io.c: Include tui/tui-out.h.
          (tui_old_uiout): Change type to cli_ui_out*.
          (tui_setup_io): Use dynamic_cast.
          * tui/tui-io.h (tui_old_uiout): Change type to cli_ui_out*.
          * tui/tui-interp.c (tui_resume): Adapt.
          * ada-lang.c (print_it_exception): Update fallouts of struct
          ui_out to class ui_out transition.
          (print_one_exception): Likewise.
          (print_mention_exception): Likewise.
          * ada-tasks.c (print_ada_task_info): Likewise.
          (info_task): Likewise.
          (task_command): Likewise.
          * auto-load.c (print_script): Likewise.
          (auto_load_info_scripts): Likewise.
          (info_auto_load_cmd): Likewise.
          * break-catch-sig.c (signal_catchpoint_print_one): Likewise.
          * break-catch-syscall.c (print_it_catch_syscall): Likewise.
          (print_one_catch_syscall): Likewise.
          * break-catch-throw.c (print_it_exception_catchpoint): Likewise.
          (print_one_exception_catchpoint): Likewise.
          (print_one_detail_exception_catchpoint): Likewise.
          (print_mention_exception_catchpoint): Likewise.
          * breakpoint.c (maybe_print_thread_hit_breakpoint): Likewise.
          (print_solib_event): Likewise.
          (watchpoint_check): Likewise.
          (wrap_indent_at_field): Likewise.
          (print_breakpoint_location): Likewise.
          (output_thread_groups): Likewise.
          (print_one_breakpoint_location): Likewise.
          (breakpoint_1): Likewise.
          (default_collect_info): Likewise.
          (watchpoints_info): Likewise.
          (print_it_catch_fork): Likewise.
          (print_one_catch_fork): Likewise.
          (print_it_catch_vfork): Likewise.
          (print_one_catch_vfork): Likewise.
          (print_it_catch_solib): Likewise.
          (print_one_catch_solib): Likewise.
          (print_it_catch_exec): Likewise.
          (print_one_catch_exec): Likewise.
          (mention): Likewise.
          (print_it_ranged_breakpoint): Likewise.
          (print_one_ranged_breakpoint): Likewise.
          (print_one_detail_ranged_breakpoint): Likewise.
          (print_mention_ranged_breakpoint): Likewise.
          (print_it_watchpoint): Likewise.
          (print_mention_watchpoint): Likewise.
          (print_it_masked_watchpoint): Likewise.
          (print_one_detail_masked_watchpoint): Likewise.
          (print_mention_masked_watchpoint): Likewise.
          (bkpt_print_it): Likewise.
          (tracepoint_print_one_detail): Likewise.
          (tracepoint_print_mention): Likewise.
          (update_static_tracepoint): Likewise.
          (tracepoints_info): Likewise.
          (save_breakpoints): Likewise.
          * cli/cli-cmds.c (complete_command): Likewise.
          * cli/cli-logging.c (set_logging_redirect): Likewise.
          (pop_output_files): Likewise.
          (handle_redirections): Likewise.
          * cli/cli-script.c (print_command_lines): Likewise.
          * cli/cli-setshow.c (do_show_command): Likewise.
          (cmd_show_list): Likewise.
          * cp-abi.c (list_cp_abis): Likewise.
          (show_cp_abi_cmd): Likewise.
          * darwin-nat-info.c (darwin_debug_regions_recurse): Likewise.
          * disasm.c (gdb_pretty_print_insn): Likewise.
          (do_mixed_source_and_assembly_deprecated): Likewise.
          (do_mixed_source_and_assembly): Likewise.
          * gdb_bfd.c (print_one_bfd): Likewise.
          (maintenance_info_bfds): Likewise.
          * guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Likewise.
          * guile/scm-ports.c (ioscm_with_output_to_port_worker): Likewise.
          * i386-linux-tdep.c (i386_linux_handle_segmentation_fault): Likewise.
          * i386-tdep.c (i386_mpx_print_bounds): Likewise.
          * infcmd.c (run_command_1): Likewise.
          (print_return_value_1): Likewise.
          * inferior.c (print_selected_inferior): Likewise.
          (print_inferior): Likewise.
          * infrun.c (print_end_stepping_range_reason): Likewise.
          (print_signal_exited_reason): Likewise.
          (print_exited_reason): Likewise.
          (print_signal_received_reason): Likewise.
          (print_no_history_reason): Likewise.
          * interps.c (interp_set): Likewise.
          * linespec.c (decode_line_full): Likewise.
          * linux-thread-db.c (info_auto_load_libthread_db): Likewise.
          * mi/mi-cmd-env.c (mi_cmd_env_pwd): Likewise.
          (mi_cmd_env_path): Likewise.
          (mi_cmd_env_dir): Likewise.
          (mi_cmd_inferior_tty_show): Likewise.
          * mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file): Likewise.
          (print_partial_file_name): Likewise.
          (mi_cmd_file_list_exec_source_files): Likewise.
          * mi/mi-cmd-info.c (mi_cmd_info_ada_exceptions): Likewise.
          (mi_cmd_info_gdb_mi_command): Likewise.
          * mi/mi-cmd-stack.c (mi_cmd_stack_info_depth): Likewise.
          (mi_cmd_stack_list_args): Likewise.
          (list_arg_or_local): Likewise.
          * mi/mi-cmd-var.c (print_varobj): Likewise.
          (mi_cmd_var_create): Likewise.
          (mi_cmd_var_delete): Likewise.
          (mi_cmd_var_set_format): Likewise.
          (mi_cmd_var_show_format): Likewise.
          (mi_cmd_var_info_num_children): Likewise.
          (mi_cmd_var_list_children): Likewise.
          (mi_cmd_var_info_type): Likewise.
          (mi_cmd_var_info_path_expression): Likewise.
          (mi_cmd_var_info_expression): Likewise.
          (mi_cmd_var_show_attributes): Likewise.
          (mi_cmd_var_evaluate_expression): Likewise.
          (mi_cmd_var_assign): Likewise.
          (varobj_update_one): Likewise.
          * mi/mi-interp.c (as_mi_interp): Likewise.
          (mi_on_normal_stop_1): Likewise.
          (mi_tsv_modified): Likewise.
          (mi_breakpoint_created): Likewise.
          (mi_breakpoint_modified): Likewise.
          (mi_solib_loaded): Likewise.
          (mi_solib_unloaded): Likewise.
          (mi_command_param_changed): Likewise.
          (mi_memory_changed): Likewise.
          (mi_user_selected_context_changed): Likewise.
          * mi/mi-main.c (print_one_inferior): Likewise.
          (output_cores): Likewise.
          (list_available_thread_groups): Likewise.
          (mi_cmd_data_list_register_names): Likewise.
          (mi_cmd_data_list_changed_registers): Likewise.
          (output_register): Likewise.
          (mi_cmd_data_evaluate_expression): Likewise.
          (mi_cmd_data_read_memory): Likewise.
          (mi_cmd_data_read_memory_bytes): Likewise.
          (mi_cmd_list_features): Likewise.
          (mi_cmd_list_target_features): Likewise.
          (mi_cmd_add_inferior): Likewise.
          (mi_execute_command): Likewise.
          (mi_load_progress): Likewise.
          (print_variable_or_computed): Likewise.
          (mi_cmd_trace_frame_collected): Likewise.
          * mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Likewise.
          * osdata.c (info_osdata_command): Likewise.
          * probe.c (gen_ui_out_table_header_info): Likewise.
          (print_ui_out_not_applicables): Likewise.
          (print_ui_out_info): Likewise.
          (info_probes_for_ops): Likewise.
          (enable_probes_command): Likewise.
          (disable_probes_command): Likewise.
          * progspace.c (print_program_space): Likewise.
          * python/py-breakpoint.c (bppy_get_commands): Likewise.
          * python/py-framefilter.c (py_print_type): Likewise.
          (py_print_value): Likewise.
          (py_print_single_arg): Likewise.
          (enumerate_args): Likewise.
          (enumerate_locals): Likewise.
          (py_print_args): Likewise.
          (py_print_frame): Likewise.
          * record-btrace.c (btrace_ui_out_decode_error): Likewise.
          (btrace_call_history_insn_range): Likewise.
          (btrace_call_history_src_line): Likewise.
          (btrace_call_history): Likewise.
          * remote.c (show_remote_cmd): Likewise.
          * skip.c (skip_info): Likewise.
          * solib.c (info_sharedlibrary_command): Likewise.
          * source.c (print_source_lines_base): Likewise.
          * spu-tdep.c (info_spu_event_command): Likewise.
          (info_spu_signal_command): Likewise.
          (info_spu_mailbox_list): Likewise.
          (info_spu_dma_cmdlist): Likewise.
          (info_spu_dma_command): Likewise.
          (info_spu_proxydma_command): Likewise.
          * stack.c (print_stack_frame): Likewise.
          (print_frame_arg): Likewise.
          (read_frame_arg): Likewise.
          (print_frame_args): Likewise.
          (print_frame_info): Likewise.
          (print_frame): Likewise.
          * symfile.c (load_progress): Likewise.
          (generic_load): Likewise.
          (print_transfer_performance): Likewise.
          * thread.c (do_captured_list_thread_ids): Likewise.
          (print_thread_info_1): Likewise.
          (restore_selected_frame): Likewise.
          (do_captured_thread_select): Likewise.
          (print_selected_thread_frame): Likewise.
          * top.c (execute_command_to_string): Likewise.
          * tracepoint.c (tvariables_info_1): Likewise.
          (trace_status_mi): Likewise.
          (tfind_1): Likewise.
          (print_one_static_tracepoint_marker): Likewise.
          (info_static_tracepoint_markers_command): Likewise.
          * utils.c (do_ui_out_redirect_pop): Likewise.
          (fputs_maybe_filtered): Likewise.
      112e8700
  11. 14 Jul, 2016 1 commit
    • Tom Tromey's avatar
      Use getcurx in curses code · cecc8b99
      Tom Tromey authored
      As suggested by Pedro, this changes a few spots to use getcurx, rather
      than getyx.  This avoids some unused variable warnings.
      
      2016-07-14  Tom Tromey  <tom@tromey.com>
      
      	* tui/tui-winsource.c (tui_show_source_line): Use getcurx.
      	* tui/tui-io.c (tui_puts): Use getcurx.
      	(tui_redisplay_readline): Likewise.
      cecc8b99
  12. 21 Jun, 2016 2 commits
    • Pedro Alves's avatar
      Make gdb_in_secondary_prompt_p() be per UI · dbf30ca3
      Pedro Alves authored
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* top.c (gdb_secondary_prompt_depth): Delete.
      	(gdb_in_secondary_prompt_p): Add ui parameter.  Use it.
      	(gdb_readline_wrapper_cleanup, gdb_readline_wrapper): Adjust to
      	per-UI gdb_secondary_prompt_depth.
      	* top.h (struct ui) <secondary_prompt_depth>: New field.
      dbf30ca3
    • Pedro Alves's avatar
      Make command line editing (use of readline) be per UI · 3c216924
      Pedro Alves authored
      Due to the way that readline's API works (based on globals), we can
      only have one instance of readline in a process.  So the goal of this
      patch is to only allow editing in the main UI, and make sure that only
      one UI calls into readline.  Some MI paths touch readline variables
      currently, which is bad as that is changing variables that matter for
      the main console UI.  This patch fixes those.
      
      This actually fixes a nasty bug -- starting gdb in MI mode ("gdb
      -i=mi"), and then doing "set editing on" crashes GDB, because MI is
      not prepared to use readline:
      
       set editing on
       &"set editing on\n"
       =cmd-param-changed,param="editing",value="on"
       ^done
       (gdb)
       p 1
       readline: readline_callback_read_char() called with no handler!
       Aborted (core dumped)
      
      The fix for that was to add an interp_proc method to query the
      interpreter whether it actually supports editing.  New test included.
      
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	PR mi/20034
      	* cli/cli-interp.c: Include cli-interp.h and event-top.h.
      	(cli_interpreter_resume): Pass 1 to gdb_setup_readline.  Set the
      	UI's input_handler here.
      	(cli_interpreter_supports_command_editing): New function.
      	(cli_interp_procs): Install it.
      	* cli/cli-interp.h: New file.
      	* event-top.c (async_command_editing_p): Rename to ...
      	(set_editing_cmd_var): ... this.
      	(change_line_handler): Add parameter 'editing', and use it.  Bail
      	early if the interpreter doesn't support editing.  Don't touch
      	readline state if editing is off.
      	(gdb_rl_callback_handler_remove, gdb_rl_callback_handler_install)
      	(gdb_rl_callback_handler_reinstall): Assert the current UI is the
      	main UI.
      	(display_gdb_prompt): Don't call gdb_rl_callback_handler_remove if
      	not using readline.  Check whether the current UI is using command
      	editing instead of checking the async_command_editing_p global.
      	(set_async_editing_command): Delete.
      	(gdb_setup_readline): Add 'editing' parameter.  Only allow editing
      	on the main UI.  Don't touch readline state if editing is off.
      	(gdb_disable_readline): Don't touch readline state if editing is
      	off.
      	* event-top.h (gdb_setup_readline): Add 'int' parameter.
      	(set_async_editing_command): Delete declaration.
      	(change_line_handler, command_line_handler): Declare.
      	(async_command_editing_p): Rename to ...
      	(set_editing_cmd_var): ... this.
      	* infrun.c (reinstall_readline_callback_handler_cleanup): Check
      	whether the current UI has editing enabled rather than checking
      	the async_command_editing_p global.
      	* interps.c (interp_supports_command_editing): New function.
      	* interps.h (interp_supports_command_editing_ftype): New typedef.
      	(struct interp_procs) <supports_command_editing_proc>: New field.
      	(interp_supports_command_editing): Declare.
      	* mi/mi-interp.c (mi_interpreter_resume): Pass 0 to
      	gdb_setup_readline.  Don't clear the async_command_editing_p
      	global.  Update comments.
      	* top.c (gdb_readline_wrapper_line, gdb_readline_wrapper): Check
      	whether the current UI has editing enabled rather than checking
      	the async_command_editing_p global.  Don't touch readline state if
      	editing is off.
      	(undo_terminal_modifications_before_exit): Switch to the main UI.
      	Unconditionally call gdb_disable_readline.
      	(set_editing): New function.
      	(show_async_command_editing_p): Rename to ...
      	(show_editing): ... this.  Show the state of the current UI.
      	(_initialize_top): Adjust.
      	* top.h (struct ui) <command_editing>: New field.
      	* tui/tui-interp.c: Include cli/cli-interp.h.
      	(tui_resume): Pass 1 to gdb_setup_readline.  Set the UI's
      	input_handler.
      	(tui_interp_procs): Install
      	cli_interpreter_supports_command_editing.
      	* tui/tui-io.c (tui_getc): Check whether the current UI has
      	editing enabled rather than checking the async_command_editing_p
      	global.
      
      gdb/testsuite/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	PR mi/20034
      	* gdb.mi/mi-editing.exp: New file.
      3c216924
  13. 12 Apr, 2016 1 commit
    • Pedro Alves's avatar
      TUI: check whether in secondary prompt instead of immediate_quit · ab33ab13
      Pedro Alves authored
      As can be seen in the tui_redisplay_readline comment:
      
       "The command could call prompt_for_continue and we must not restore
       SingleKey so that the prompt and normal keymap are used."
      
      immediate_quit is being used as proxy for "secondary prompt".
      
      We have a better predicate nowadays, so use it.
      
      gdb/ChangeLog:
      2016-04-12  Pedro Alves  <palves@redhat.com>
      
      	* tui/tui-io.c (tui_redisplay_readline): Check
      	gdb_in_secondary_prompt_p instead of immediate_quit.
      	* tui/tui.c: Include top.h.
      	(tui_rl_startup_hook): Check gdb_in_secondary_prompt_p instead of
      	immediate_quit.
      ab33ab13
  14. 01 Jan, 2016 1 commit
  15. 13 Oct, 2015 1 commit
    • Pedro Alves's avatar
      More char constification · e6a959d6
      Pedro Alves authored
      Trivial constifications flagged by G++.  E.g.:
      
       src/gdb/c-varobj.c: In function ‘void c_describe_child(const varobj*, int, char**, value**, type**, char**)’:
       src/gdb/c-varobj.c:373:33: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
          char *join = was_ptr ? "->" : ".";
      				  ^
      
      gdb/ChangeLog:
      2015-10-13  Pedro Alves  <palves@redhat.com>
      
      	* ada-lang.c (ada_enum_name): Constify local.
      	* ada-typeprint.c (print_range_bound): Constify locals.
      	* c-varobj.c (c_describe_child): Likewise.
      	* cli/cli-setshow.c (do_set_command): Likewise.
      	* gdb_vecs.c (delim_string_to_char_ptr_vec_append): Likewise.
      	* dwarf2read.c (find_file_and_directory): Likewise.
      	(anonymous_struct_prefix, dwarf2_name): Likewise.
      	* gnu-v3-abi.c (gnuv3_rtti_type): Likewise.
      	* go-lang.c (unpack_mangled_go_symbol): Likewise.
      	* jv-typeprint.c (java_type_print_base): Likewise.
      	* ser-tcp.c (net_open): Likewise.
      	* symfile.c (deduce_language_from_filename): Likewise.
      	* symtab.c (gdb_mangle_name): Likewise.
      	* tui/tui-io.c (tui_redisplay_readline): Likewise.
      e6a959d6
  16. 25 Sep, 2015 1 commit
    • Simon Marchi's avatar
      Add casts to memory allocation related calls · 224c3ddb
      Simon Marchi authored
      Most allocation functions (if not all) return a void* pointing to the
      allocated memory.  In C++, we need to add an explicit cast when
      assigning the result to a pointer to another type (which is the case
      more often than not).
      
      The content of this patch is taken from Pedro's branch, from commit
      "(mostly) auto-generated patch to insert casts needed for C++".  I
      validated that the changes make sense and manually reflowed the code to
      make it respect the coding style.  I also found multiple places where I
      could use XNEW/XNEWVEC/XRESIZEVEC/etc.
      
      Thanks a lot to whoever did that automated script to insert casts, doing
      it completely by hand would have taken a ridiculous amount of time.
      
      Only files built on x86 with --enable-targets=all are modified.  This
      means that all other -nat.c files are untouched and will have to be
      dealt with later by using appropiate compilers.  Or maybe we can try to
      build them with a regular g++ just to know where to add casts, I don't
      know.
      
      I built-tested this with --enable-targets=all and reg-tested.
      
      Here's the changelog entry, which was not too bad to make despite the
      size, thanks to David Malcom's script.  I fixed some bits by hand, but
      there might be some wrong parts left (hopefully not).
      
      gdb/ChangeLog:
      
      	* aarch64-linux-tdep.c (aarch64_stap_parse_special_token): Add cast
      	to allocation result assignment.
      	* ada-exp.y (write_object_renaming): Likewise.
      	(write_ambiguous_var): Likewise.
      	(ada_nget_field_index): Likewise.
      	(write_var_or_type): Likewise.
      	* ada-lang.c (ada_decode_symbol): Likewise.
      	(ada_value_assign): Likewise.
      	(value_pointer): Likewise.
      	(cache_symbol): Likewise.
      	(add_nonlocal_symbols): Likewise.
      	(ada_name_for_lookup): Likewise.
      	(symbol_completion_add): Likewise.
      	(ada_to_fixed_type_1): Likewise.
      	(ada_get_next_arg): Likewise.
      	(defns_collected): Likewise.
      	* ada-lex.l (processId): Likewise.
      	(processString): Likewise.
      	* ada-tasks.c (read_known_tasks_array): Likewise.
      	(read_known_tasks_list): Likewise.
      	* ada-typeprint.c (decoded_type_name): Likewise.
      	* addrmap.c (addrmap_mutable_create_fixed): Likewise.
      	* amd64-tdep.c (amd64_push_arguments): Likewise.
      	(amd64_displaced_step_copy_insn): Likewise.
      	(amd64_classify_insn_at): Likewise.
      	(amd64_relocate_instruction): Likewise.
      	* amd64obsd-tdep.c (amd64obsd_sigtramp_p): Likewise.
      	* arch-utils.c (simple_displaced_step_copy_insn): Likewise.
      	(initialize_current_architecture): Likewise.
      	* arm-linux-tdep.c (arm_stap_parse_special_token): Likewise.
      	* arm-symbian-tdep.c (arm_symbian_osabi_sniffer): Likewise.
      	* arm-tdep.c (arm_exidx_new_objfile): Likewise.
      	(arm_push_dummy_call): Likewise.
      	(extend_buffer_earlier): Likewise.
      	(arm_adjust_breakpoint_address): Likewise.
      	(arm_skip_stub): Likewise.
      	* auto-load.c (filename_is_in_pattern): Likewise.
      	(maybe_add_script_file): Likewise.
      	(maybe_add_script_text): Likewise.
      	(auto_load_objfile_script_1): Likewise.
      	* auxv.c (ld_so_xfer_auxv): Likewise.
      	* ax-general.c (new_agent_expr): Likewise.
      	(grow_expr): Likewise.
      	(ax_reg_mask): Likewise.
      	* bcache.c (bcache_full): Likewise.
      	* breakpoint.c (program_breakpoint_here_p): Likewise.
      	* btrace.c (parse_xml_raw): Likewise.
      	* build-id.c (build_id_to_debug_bfd): Likewise.
      	* buildsym.c (end_symtab_with_blockvector): Likewise.
      	* c-exp.y (string_exp): Likewise.
      	(qualified_name): Likewise.
      	(write_destructor_name): Likewise.
      	(operator_stoken): Likewise.
      	(parse_number): Likewise.
      	(scan_macro_expansion): Likewise.
      	(yylex): Likewise.
      	(c_print_token): Likewise.
      	* c-lang.c (c_get_string): Likewise.
      	(emit_numeric_character): Likewise.
      	* charset.c (wchar_iterate): Likewise.
      	* cli/cli-cmds.c (complete_command): Likewise.
      	(make_command): Likewise.
      	* cli/cli-dump.c (restore_section_callback): Likewise.
      	(restore_binary_file): Likewise.
      	* cli/cli-interp.c (cli_interpreter_exec): Likewise.
      	* cli/cli-script.c (execute_control_command): Likewise.
      	* cli/cli-setshow.c (do_set_command): Likewise.
      	* coff-pe-read.c (add_pe_forwarded_sym): Likewise.
      	(read_pe_exported_syms): Likewise.
      	* coffread.c (coff_read_struct_type): Likewise.
      	(coff_read_enum_type): Likewise.
      	* common/btrace-common.c (btrace_data_append): Likewise.
      	* common/buffer.c (buffer_grow): Likewise.
      	* common/filestuff.c (gdb_fopen_cloexec): Likewise.
      	* common/format.c (parse_format_string): Likewise.
      	* common/gdb_vecs.c (delim_string_to_char_ptr_vec_append): Likewise.
      	* common/xml-utils.c (xml_escape_text): Likewise.
      	* compile/compile-object-load.c (copy_sections): Likewise.
      	(compile_object_load): Likewise.
      	* compile/compile-object-run.c (compile_object_run): Likewise.
      	* completer.c (filename_completer): Likewise.
      	* corefile.c (read_memory_typed_address): Likewise.
      	(write_memory_unsigned_integer): Likewise.
      	(write_memory_signed_integer): Likewise.
      	(complete_set_gnutarget): Likewise.
      	* corelow.c (get_core_register_section): Likewise.
      	* cp-name-parser.y (d_grab): Likewise.
      	(allocate_info): Likewise.
      	(cp_new_demangle_parse_info): Likewise.
      	* cp-namespace.c (cp_scan_for_anonymous_namespaces): Likewise.
      	(cp_lookup_symbol_in_namespace): Likewise.
      	(lookup_namespace_scope): Likewise.
      	(find_symbol_in_baseclass): Likewise.
      	(cp_lookup_nested_symbol): Likewise.
      	(cp_lookup_transparent_type_loop): Likewise.
      	* cp-support.c (copy_string_to_obstack): Likewise.
      	(make_symbol_overload_list): Likewise.
      	(make_symbol_overload_list_namespace): Likewise.
      	(make_symbol_overload_list_adl_namespace): Likewise.
      	(first_component_command): Likewise.
      	* cp-valprint.c (cp_print_value): Likewise.
      	* ctf.c (ctf_xfer_partial): Likewise.
      	* d-exp.y (StringExp): Likewise.
      	* d-namespace.c (d_lookup_symbol_in_module): Likewise.
      	(lookup_module_scope): Likewise.
      	(find_symbol_in_baseclass): Likewise.
      	(d_lookup_nested_symbol): Likewise.
      	* dbxread.c (find_stab_function_addr): Likewise.
      	(read_dbx_symtab): Likewise.
      	(dbx_end_psymtab): Likewise.
      	(cp_set_block_scope): Likewise.
      	* dcache.c (dcache_alloc): Likewise.
      	* demangle.c (_initialize_demangler): Likewise.
      	* dicos-tdep.c (dicos_load_module_p): Likewise.
      	* dictionary.c (dict_create_hashed_expandable): Likewise.
      	(dict_create_linear_expandable): Likewise.
      	(expand_hashtable): Likewise.
      	(add_symbol_linear_expandable): Likewise.
      	* dwarf2-frame.c (add_cie): Likewise.
      	(add_fde): Likewise.
      	(dwarf2_build_frame_info): Likewise.
      	* dwarf2expr.c (dwarf_expr_grow_stack): Likewise.
      	(dwarf_expr_fetch_address): Likewise.
      	(add_piece): Likewise.
      	(execute_stack_op): Likewise.
      	* dwarf2loc.c (chain_candidate): Likewise.
      	(dwarf_entry_parameter_to_value): Likewise.
      	(read_pieced_value): Likewise.
      	(write_pieced_value): Likewise.
      	* dwarf2read.c (dwarf2_read_section): Likewise.
      	(add_type_unit): Likewise.
      	(read_comp_units_from_section): Likewise.
      	(fixup_go_packaging): Likewise.
      	(dwarf2_compute_name): Likewise.
      	(dwarf2_physname): Likewise.
      	(create_dwo_unit_in_dwp_v1): Likewise.
      	(create_dwo_unit_in_dwp_v2): Likewise.
      	(read_func_scope): Likewise.
      	(read_call_site_scope): Likewise.
      	(dwarf2_attach_fields_to_type): Likewise.
      	(process_structure_scope): Likewise.
      	(mark_common_block_symbol_computed): Likewise.
      	(read_common_block): Likewise.
      	(abbrev_table_read_table): Likewise.
      	(guess_partial_die_structure_name): Likewise.
      	(fixup_partial_die): Likewise.
      	(add_file_name): Likewise.
      	(dwarf2_const_value_data): Likewise.
      	(dwarf2_const_value_attr): Likewise.
      	(build_error_marker_type): Likewise.
      	(guess_full_die_structure_name): Likewise.
      	(anonymous_struct_prefix): Likewise.
      	(typename_concat): Likewise.
      	(dwarf2_canonicalize_name): Likewise.
      	(dwarf2_name): Likewise.
      	(write_constant_as_bytes): Likewise.
      	(dwarf2_fetch_constant_bytes): Likewise.
      	(copy_string): Likewise.
      	(parse_macro_definition): Likewise.
      	* elfread.c (elf_symfile_segments): Likewise.
      	(elf_rel_plt_read): Likewise.
      	(elf_gnu_ifunc_resolve_by_cache): Likewise.
      	(elf_gnu_ifunc_resolve_by_got): Likewise.
      	(elf_read_minimal_symbols): Likewise.
      	(elf_gnu_ifunc_record_cache): Likewise.
      	* event-top.c (top_level_prompt): Likewise.
      	(command_line_handler): Likewise.
      	* exec.c (resize_section_table): Likewise.
      	* expprint.c (print_subexp_standard): Likewise.
      	* fbsd-tdep.c (fbsd_collect_regset_section_cb): Likewise.
      	* findcmd.c (parse_find_args): Likewise.
      	* findvar.c (address_from_register): Likewise.
      	* frame.c (get_prev_frame_always): Likewise.
      	* gdb_bfd.c (gdb_bfd_ref): Likewise.
      	(get_section_descriptor): Likewise.
      	* gdb_obstack.c (obconcat): Likewise.
      	(obstack_strdup): Likewise.
      	* gdbtypes.c (lookup_function_type_with_arguments): Likewise.
      	(create_set_type): Likewise.
      	(lookup_unsigned_typename): Likewise.
      	(lookup_signed_typename): Likewise.
      	(resolve_dynamic_union): Likewise.
      	(resolve_dynamic_struct): Likewise.
      	(add_dyn_prop): Likewise.
      	(copy_dynamic_prop_list): Likewise.
      	(arch_flags_type): Likewise.
      	(append_composite_type_field_raw): Likewise.
      	* gdbtypes.h (INIT_FUNC_SPECIFIC): Likewise.
      	* gnu-v3-abi.c (gnuv3_rtti_type): Likewise.
      	* go-exp.y (string_exp): Likewise.
      	* go-lang.c (go_demangle): Likewise.
      	* guile/guile.c (compute_scheme_string): Likewise.
      	* guile/scm-cmd.c (gdbscm_parse_command_name): Likewise.
      	(gdbscm_canonicalize_command_name): Likewise.
      	* guile/scm-ports.c (ioscm_init_stdio_buffers): Likewise.
      	(ioscm_init_memory_port): Likewise.
      	(ioscm_reinit_memory_port): Likewise.
      	* guile/scm-utils.c (gdbscm_gc_xstrdup): Likewise.
      	(gdbscm_gc_dup_argv): Likewise.
      	* h8300-tdep.c (h8300_push_dummy_call): Likewise.
      	* hppa-tdep.c (internalize_unwinds): Likewise.
      	(read_unwind_info): Likewise.
      	* i386-cygwin-tdep.c (core_process_module_section): Likewise.
      	(windows_core_xfer_shared_libraries): Likewise.
      	* i386-tdep.c (i386_displaced_step_copy_insn): Likewise.
      	(i386_stap_parse_special_token_triplet): Likewise.
      	(i386_stap_parse_special_token_three_arg_disp): Likewise.
      	* i386obsd-tdep.c (i386obsd_sigtramp_p): Likewise.
      	* inf-child.c (inf_child_fileio_readlink): Likewise.
      	* inf-ptrace.c (inf_ptrace_fetch_register): Likewise.
      	(inf_ptrace_store_register): Likewise.
      	* infrun.c (follow_exec): Likewise.
      	(displaced_step_prepare_throw): Likewise.
      	(save_stop_context): Likewise.
      	(save_infcall_suspend_state): Likewise.
      	* jit.c (jit_read_descriptor): Likewise.
      	(jit_read_code_entry): Likewise.
      	(jit_symtab_line_mapping_add_impl): Likewise.
      	(finalize_symtab): Likewise.
      	(jit_unwind_reg_get_impl): Likewise.
      	* jv-exp.y (QualifiedName): Likewise.
      	* jv-lang.c (get_java_utf8_name): Likewise.
      	(type_from_class): Likewise.
      	(java_demangle_type_signature): Likewise.
      	(java_class_name_from_physname): Likewise.
      	* jv-typeprint.c (java_type_print_base): Likewise.
      	* jv-valprint.c (java_value_print): Likewise.
      	* language.c (add_language): Likewise.
      	* linespec.c (add_sal_to_sals_basic): Likewise.
      	(add_sal_to_sals): Likewise.
      	(decode_objc): Likewise.
      	(find_linespec_symbols): Likewise.
      	* linux-fork.c (fork_save_infrun_state): Likewise.
      	* linux-nat.c (linux_nat_detach): Likewise.
      	(linux_nat_fileio_readlink): Likewise.
      	* linux-record.c (record_linux_sockaddr): Likewise.
      	(record_linux_msghdr): Likewise.
      	(Do): Likewise.
      	* linux-tdep.c (linux_core_info_proc_mappings): Likewise.
      	(linux_collect_regset_section_cb): Likewise.
      	(linux_get_siginfo_data): Likewise.
      	* linux-thread-db.c (try_thread_db_load_from_pdir_1): Likewise.
      	(try_thread_db_load_from_dir): Likewise.
      	(thread_db_load_search): Likewise.
      	(info_auto_load_libthread_db): Likewise.
      	* m32c-tdep.c (m32c_m16c_address_to_pointer): Likewise.
      	(m32c_m16c_pointer_to_address): Likewise.
      	* m68hc11-tdep.c (m68hc11_pseudo_register_write): Likewise.
      	* m68k-tdep.c (m68k_get_longjmp_target): Likewise.
      	* machoread.c (macho_check_dsym): Likewise.
      	* macroexp.c (resize_buffer): Likewise.
      	(gather_arguments): Likewise.
      	(maybe_expand): Likewise.
      	* macrotab.c (new_macro_key): Likewise.
      	(new_source_file): Likewise.
      	(new_macro_definition): Likewise.
      	* mdebugread.c (parse_symbol): Likewise.
      	(parse_type): Likewise.
      	(parse_partial_symbols): Likewise.
      	(psymtab_to_symtab_1): Likewise.
      	* mem-break.c (default_memory_insert_breakpoint): Likewise.
      	* mi/mi-cmd-break.c (mi_argv_to_format): Likewise.
      	* mi/mi-main.c (mi_cmd_data_read_memory): Likewise.
      	(mi_cmd_data_read_memory_bytes): Likewise.
      	(mi_cmd_data_write_memory_bytes): Likewise.
      	(mi_cmd_trace_frame_collected): Likewise.
      	* mi/mi-parse.c (mi_parse_argv): Likewise.
      	(mi_parse): Likewise.
      	* minidebug.c (lzma_open): Likewise.
      	(lzma_pread): Likewise.
      	* mips-tdep.c (mips_read_fp_register_single): Likewise.
      	(mips_print_fp_register): Likewise.
      	* mipsnbsd-tdep.c (mipsnbsd_get_longjmp_target): Likewise.
      	* mipsread.c (read_alphacoff_dynamic_symtab): Likewise.
      	* mt-tdep.c (mt_register_name): Likewise.
      	(mt_registers_info): Likewise.
      	(mt_push_dummy_call): Likewise.
      	* namespace.c (add_using_directive): Likewise.
      	* nat/linux-btrace.c (perf_event_read): Likewise.
      	(linux_enable_bts): Likewise.
      	* nat/linux-osdata.c (linux_common_core_of_thread): Likewise.
      	* nat/linux-ptrace.c (linux_ptrace_test_ret_to_nx): Likewise.
      	* nto-tdep.c (nto_find_and_open_solib): Likewise.
      	(nto_parse_redirection): Likewise.
      	* objc-lang.c (objc_demangle): Likewise.
      	(find_methods): Likewise.
      	* objfiles.c (get_objfile_bfd_data): Likewise.
      	(set_objfile_main_name): Likewise.
      	(allocate_objfile): Likewise.
      	(objfile_relocate): Likewise.
      	(update_section_map): Likewise.
      	* osabi.c (generic_elf_osabi_sniff_abi_tag_sections): Likewise.
      	* p-exp.y (exp): Likewise.
      	(yylex): Likewise.
      	* p-valprint.c (pascal_object_print_value): Likewise.
      	* parse.c (initialize_expout): Likewise.
      	(mark_completion_tag): Likewise.
      	(copy_name): Likewise.
      	(parse_float): Likewise.
      	(type_stack_reserve): Likewise.
      	* ppc-linux-tdep.c (ppc_stap_parse_special_token): Likewise.
      	(ppu2spu_prev_register): Likewise.
      	* ppc-ravenscar-thread.c (supply_register_at_address): Likewise.
      	* printcmd.c (printf_wide_c_string): Likewise.
      	(printf_pointer): Likewise.
      	* probe.c (parse_probes): Likewise.
      	* python/py-cmd.c (gdbpy_parse_command_name): Likewise.
      	(cmdpy_init): Likewise.
      	* python/py-gdb-readline.c (gdbpy_readline_wrapper): Likewise.
      	* python/py-symtab.c (set_sal): Likewise.
      	* python/py-unwind.c (pyuw_sniffer): Likewise.
      	* python/python.c (python_interactive_command): Likewise.
      	(compute_python_string): Likewise.
      	* ravenscar-thread.c (get_running_thread_id): Likewise.
      	* record-full.c (record_full_exec_insn): Likewise.
      	(record_full_core_open_1): Likewise.
      	* regcache.c (regcache_raw_read_signed): Likewise.
      	(regcache_raw_read_unsigned): Likewise.
      	(regcache_cooked_read_signed): Likewise.
      	(regcache_cooked_read_unsigned): Likewise.
      	* remote-fileio.c (remote_fileio_func_open): Likewise.
      	(remote_fileio_func_rename): Likewise.
      	(remote_fileio_func_unlink): Likewise.
      	(remote_fileio_func_stat): Likewise.
      	(remote_fileio_func_system): Likewise.
      	* remote-mips.c (mips_xfer_memory): Likewise.
      	(mips_load_srec): Likewise.
      	(pmon_end_download): Likewise.
      	* remote.c (new_remote_state): Likewise.
      	(map_regcache_remote_table): Likewise.
      	(remote_register_number_and_offset): Likewise.
      	(init_remote_state): Likewise.
      	(get_memory_packet_size): Likewise.
      	(remote_pass_signals): Likewise.
      	(remote_program_signals): Likewise.
      	(remote_start_remote): Likewise.
      	(remote_check_symbols): Likewise.
      	(remote_query_supported): Likewise.
      	(extended_remote_attach): Likewise.
      	(process_g_packet): Likewise.
      	(store_registers_using_G): Likewise.
      	(putpkt_binary): Likewise.
      	(read_frame): Likewise.
      	(compare_sections_command): Likewise.
      	(remote_hostio_pread): Likewise.
      	(remote_hostio_readlink): Likewise.
      	(remote_file_put): Likewise.
      	(remote_file_get): Likewise.
      	(remote_pid_to_exec_file): Likewise.
      	(_initialize_remote): Likewise.
      	* rs6000-aix-tdep.c (rs6000_aix_ld_info_to_xml): Likewise.
      	(rs6000_aix_core_xfer_shared_libraries_aix): Likewise.
      	* rs6000-tdep.c (ppc_displaced_step_copy_insn): Likewise.
      	(bfd_uses_spe_extensions): Likewise.
      	* s390-linux-tdep.c (s390_displaced_step_copy_insn): Likewise.
      	* score-tdep.c (score7_malloc_and_get_memblock): Likewise.
      	* solib-dsbt.c (decode_loadmap): Likewise.
      	(fetch_loadmap): Likewise.
      	(scan_dyntag): Likewise.
      	(enable_break): Likewise.
      	(dsbt_relocate_main_executable): Likewise.
      	* solib-frv.c (fetch_loadmap): Likewise.
      	(enable_break2): Likewise.
      	(frv_relocate_main_executable): Likewise.
      	* solib-spu.c (spu_relocate_main_executable): Likewise.
      	(spu_bfd_open): Likewise.
      	* solib-svr4.c (lm_info_read): Likewise.
      	(read_program_header): Likewise.
      	(find_program_interpreter): Likewise.
      	(scan_dyntag): Likewise.
      	(elf_locate_base): Likewise.
      	(open_symbol_file_object): Likewise.
      	(read_program_headers_from_bfd): Likewise.
      	(svr4_relocate_main_executable): Likewise.
      	* solib-target.c (solib_target_relocate_section_addresses): Likewise.
      	* solib.c (solib_find_1): Likewise.
      	(exec_file_find): Likewise.
      	(solib_find): Likewise.
      	* source.c (openp): Likewise.
      	(print_source_lines_base): Likewise.
      	(forward_search_command): Likewise.
      	* sparc-ravenscar-thread.c (supply_register_at_address): Likewise.
      	* spu-tdep.c (spu2ppu_prev_register): Likewise.
      	(spu_get_overlay_table): Likewise.
      	* stabsread.c (patch_block_stabs): Likewise.
      	(define_symbol): Likewise.
      	(again:): Likewise.
      	(read_member_functions): Likewise.
      	(read_one_struct_field): Likewise.
      	(read_enum_type): Likewise.
      	(common_block_start): Likewise.
      	* stack.c (read_frame_arg): Likewise.
      	(backtrace_command): Likewise.
      	* stap-probe.c (stap_parse_register_operand): Likewise.
      	* symfile.c (syms_from_objfile_1): Likewise.
      	(find_separate_debug_file): Likewise.
      	(load_command): Likewise.
      	(load_progress): Likewise.
      	(load_section_callback): Likewise.
      	(reread_symbols): Likewise.
      	(add_filename_language): Likewise.
      	(allocate_compunit_symtab): Likewise.
      	(read_target_long_array): Likewise.
      	(simple_read_overlay_table): Likewise.
      	* symtab.c (symbol_set_names): Likewise.
      	(resize_symbol_cache): Likewise.
      	(rbreak_command): Likewise.
      	(completion_list_add_name): Likewise.
      	(completion_list_objc_symbol): Likewise.
      	(add_filename_to_list): Likewise.
      	* target-descriptions.c (maint_print_c_tdesc_cmd): Likewise.
      	* target-memory.c (target_write_memory_blocks): Likewise.
      	* target.c (target_read_string): Likewise.
      	(read_whatever_is_readable): Likewise.
      	(target_read_alloc_1): Likewise.
      	(simple_search_memory): Likewise.
      	(target_fileio_read_alloc_1): Likewise.
      	* tilegx-tdep.c (tilegx_push_dummy_call): Likewise.
      	* top.c (command_line_input): Likewise.
      	* tracefile-tfile.c (tfile_fetch_registers): Likewise.
      	* tracefile.c (tracefile_fetch_registers): Likewise.
      	* tracepoint.c (add_memrange): Likewise.
      	(init_collection_list): Likewise.
      	(add_aexpr): Likewise.
      	(trace_dump_actions): Likewise.
      	(parse_trace_status): Likewise.
      	(parse_tracepoint_definition): Likewise.
      	(parse_tsv_definition): Likewise.
      	(parse_static_tracepoint_marker_definition): Likewise.
      	* tui/tui-file.c (tui_sfileopen): Likewise.
      	(tui_file_adjust_strbuf): Likewise.
      	* tui/tui-io.c (tui_expand_tabs): Likewise.
      	* tui/tui-source.c (tui_set_source_content): Likewise.
      	* typeprint.c (find_global_typedef): Likewise.
      	* ui-file.c (do_ui_file_xstrdup): Likewise.
      	(ui_file_obsavestring): Likewise.
      	(mem_file_write): Likewise.
      	* utils.c (make_hex_string): Likewise.
      	(get_regcomp_error): Likewise.
      	(puts_filtered_tabular): Likewise.
      	(gdb_realpath_keepfile): Likewise.
      	(ldirname): Likewise.
      	(gdb_bfd_errmsg): Likewise.
      	(substitute_path_component): Likewise.
      	* valops.c (search_struct_method): Likewise.
      	(find_oload_champ_namespace_loop): Likewise.
      	* valprint.c (print_decimal_chars): Likewise.
      	(read_string): Likewise.
      	(generic_emit_char): Likewise.
      	* varobj.c (varobj_delete): Likewise.
      	(varobj_value_get_print_value): Likewise.
      	* vaxobsd-tdep.c (vaxobsd_sigtramp_sniffer): Likewise.
      	* windows-tdep.c (display_one_tib): Likewise.
      	* xcoffread.c (read_xcoff_symtab): Likewise.
      	(process_xcoff_symbol): Likewise.
      	(swap_sym): Likewise.
      	(scan_xcoff_symtab): Likewise.
      	(xcoff_initial_scan): Likewise.
      	* xml-support.c (gdb_xml_end_element): Likewise.
      	(xml_process_xincludes): Likewise.
      	(xml_fetch_content_from_file): Likewise.
      	* xml-syscall.c (xml_list_of_syscalls): Likewise.
      	* xstormy16-tdep.c (xstormy16_push_dummy_call): Likewise.
      
      gdb/gdbserver/ChangeLog:
      
      	* ax.c (gdb_parse_agent_expr): Add cast to allocation result
      	assignment.
      	(gdb_unparse_agent_expr): Likewise.
      	* hostio.c (require_data): Likewise.
      	(handle_pread): Likewise.
      	* linux-low.c (disable_regset): Likewise.
      	(fetch_register): Likewise.
      	(store_register): Likewise.
      	(get_dynamic): Likewise.
      	(linux_qxfer_libraries_svr4): Likewise.
      	* mem-break.c (delete_fast_tracepoint_jump): Likewise.
      	(set_fast_tracepoint_jump): Likewise.
      	(uninsert_fast_tracepoint_jumps_at): Likewise.
      	(reinsert_fast_tracepoint_jumps_at): Likewise.
      	(validate_inserted_breakpoint): Likewise.
      	(clone_agent_expr): Likewise.
      	* regcache.c (init_register_cache): Likewise.
      	* remote-utils.c (putpkt_binary_1): Likewise.
      	(decode_M_packet): Likewise.
      	(decode_X_packet): Likewise.
      	(look_up_one_symbol): Likewise.
      	(relocate_instruction): Likewise.
      	(monitor_output): Likewise.
      	* server.c (handle_search_memory): Likewise.
      	(handle_qxfer_exec_file): Likewise.
      	(handle_qxfer_libraries): Likewise.
      	(handle_qxfer): Likewise.
      	(handle_query): Likewise.
      	(handle_v_cont): Likewise.
      	(handle_v_run): Likewise.
      	(captured_main): Likewise.
      	* target.c (write_inferior_memory): Likewise.
      	* thread-db.c (try_thread_db_load_from_dir): Likewise.
      	* tracepoint.c (init_trace_buffer): Likewise.
      	(add_tracepoint_action): Likewise.
      	(add_traceframe): Likewise.
      	(add_traceframe_block): Likewise.
      	(cmd_qtdpsrc): Likewise.
      	(cmd_qtdv): Likewise.
      	(cmd_qtstatus): Likewise.
      	(response_source): Likewise.
      	(response_tsv): Likewise.
      	(cmd_qtnotes): Likewise.
      	(gdb_collect): Likewise.
      	(initialize_tracepoint): Likewise.
      224c3ddb
  17. 21 Aug, 2015 3 commits
    • Patrick Palka's avatar
      tui: don't overwrite a secondary prompt that was given no input · 948578a9
      Patrick Palka authored
      This patch fixes the following bug in TUI:
      
        (gdb) break foo
        No symbol table is loaded.  Use the "file" command.
        Make breakpoint pending on future shared library load? (y or [n]) <ENTER>
      
      By submitting an empty command line to a secondary prompt, the line
      corresponding to the secondary prompt is undesirably cleared and
      overwritten.  Outside of a secondary prompt, clearing the prompt line
      after submitting an empty command line is intended behavior which
      complements GDB's repeat-command shorthand.  But inside a secondary
      prompt, this behavior is undesired since the shorthand is not applicable
      in that case.  We should retain the secondary-prompt line even when it's
      given no input.
      
      This patch makes sure that a prompt that was given an empty command line
      is cleared and overwritten only if it's not a secondary prompt.  To
      acheive this, a new predicate is defined which informs us whether the
      current input handler is a secondary prompt.
      
      gdb/ChangeLog:
      
      	* top.h (gdb_in_secondary_prompt_p): Declare.
      	* top.c (gdb_secondary_prompt_depth): Define.
      	(gdb_in_secondary_prompt_p): Define.
      	(gdb_readline_wrapper_cleanup): Decrement
      	gdb_secondary_prompt_depth.
      	(gdb_readline_wrapper): Increment gdb_secondary_prompt_depth.
      	* tui/tui-io.c (tui_getc): Don't clear the prompt line if we
      	are in a secondary prompt.
      948578a9
    • Patrick Palka's avatar
      Use tui_putc to output newline entered by the user · 7a8bcb88
      Patrick Palka authored
      This is necessary to make sure that start_line is updated after a
      command has been entered.  Usually, start_line gets updated anyway
      because most commands output text, and outputting text is done through
      the function tui_puts, which updates start_line.  However if a command
      does not output text, then tui_puts will not get called and start_line
      will not get updated in time for the next prompt to be displayed.
      
      One can observe this bug by executing the command "delete" within TUI.
      After executing, the prompt line
      
        (gdb) delete
      
      gets overwritten by the next prompt.  With this patch, the prompt line
      gets preserved.
      
      gdb/ChangeLog:
      
      	* tui/tui-io.c (tui_getc): Use tui_putc instead of waddch to
      	emit the newline.
      7a8bcb88
    • Patrick Palka's avatar
      Remove fields curch and cur_line from TUI_CMD_WIN · 6f1cb6ea
      Patrick Palka authored
      These fields are currently used to track the location of the cursor
      inside the command window.  But their usefulness is questionable because
      ncurses already internally keeps track of the location of the cursor,
      whose coordinates we can query using the functions getyx(), getcurx() or
      getcury().  It is an unnecessary pain to keep these fields in sync with
      ncurses, and their meaning is not well-defined anyway.  For instance, it
      is not clear whether the coordinates held in these fields are
      authoritative, or whether the coordinates reported by ncurses are.
      
      So to keep things simple, this patch removes these fields and replaces
      existing reads of these fields with calls to the appropriate ncurses
      querying functions, and replaces writes to these fields with calls to
      wmove() (when necessary and applicable).
      
      In the function tui_cont_sig(), I removed the call to wmove() entirely
      because moving to (start_line, curch) makes no sense.  The move should
      have been to (cur_line, curch) -- which would now be a no-op.
      
      Tested on x86_64 Fedora 22, no obvious regressions.
      
      gdb/ChangeLog:
      
      	* tui/tui-data.h (tui_command_info): Remove fields cur_line and
      	curch.
      	* tui/tui-data.c (tui_clear_win_detail) [CMD_WIN]: Don't set
      	cur_line or curch, instead call wmove().
      	(init_win_info) [CMD_WIN]: Likewise.
      	* tui/tui-io.c (tui_puts): Likewise. Don't read cur_line,
      	instead call getcury().
      	(tui_redisplay_readline): Don't set cur_line or curch.
      	(tui_mld_erase_entire_line): Don't read cur_line, instead call
      	getcury().
      	(tui_cont_sig): Remove call to wmove.
      	(tui_getc): Don't read cur_line or curch, instead call getcury()
      	or getyx().  Don't set curch.
      	* tui/tui-win.c (make_visible_with_new_height) [CMD_WIN]: Don't
      	set cur_line or curch.  Always move cursor to (0,0).
      6f1cb6ea
  18. 21 Mar, 2015 1 commit
  19. 20 Mar, 2015 1 commit
    • Pedro Alves's avatar
      constify tui/tui-io.c · cd46431b
      Pedro Alves authored
      gdb:
      
      2015-03-20  Pedro Alves  <palves@redhat.com>
      
      	* tui/tui-io.c (tui_expand_tabs): Make "s1" const.
      cd46431b
  20. 18 Feb, 2015 1 commit
    • Patrick Palka's avatar
      Asynchronously resize the TUI · c4ef48c6
      Patrick Palka authored
      This patch teaches the TUI to resize itself asynchronously instead of
      synchronously.  Asynchronously resizing the screen when the underlying
      terminal gets resized is the more intuitive behavior and is surprisingly
      simple to implement thanks to GDB's async infrastructure.
      
      The implementation is straightforward.  TUI's SIGWINCH handler is just
      tweaked to asynchronously invoke a new callback,
      tui_async_resize_screen, which is responsible for safely resizing the
      screen.  Care must be taken to not to attempt to asynchronously resize
      the screen while the TUI is not active.  When the TUI is not active, the
      callback will do nothing, but the screen will yet be resized in the next
      call to tui_enable() by virtue of win_resized being TRUE.
      
      (So, after the patch there are still two places where the screen gets
      resized: one in tui_enable() and the other now in
      tui_async_resize_screen() as opposed to being in
      tui_handle_resize_during_io().  The one in tui_enable() is still
      necessary to handle the case where the terminal gets resized inside the
      CLI: in that case, the TUI still needs resizing, but it must wait until
      the TUI gets re-enabled.)
      
      gdb/ChangeLog:
      
      	* tui/tui-io.c (tui_handle_resize_during_io): Remove this
      	function.
      	(tui_putc): Don't call tui_handle_resize_during_io.
      	(tui_getc): Likewise.
      	(tui_mld_getc): Likewise.
      	* tui/tui-win.c: Include event-loop.h and tui/tui-io.h.
      	(tui_sigwinch_token): New static variable.
      	(tui_initialize_win): Adjust documentation.  Set
      	tui_sigwinch_token.
      	(tui_async_resize_screen): New asynchronous callback.
      	(tui_sigwinch_handler): Adjust documentation.  Asynchronously
      	invoke tui_async_resize_screen.
      c4ef48c6
  21. 17 Feb, 2015 1 commit
    • Patrick Palka's avatar
      Remove superfluous function key_is_command_char() · 69efdff1
      Patrick Palka authored
      The function key_is_command_char() is simply a predicate that determines
      whether the function tui_dispatch_ctrl_char() will do anything useful.
      Since tui_dispatch_ctrl_char() performs the same checks as
      key_is_command_char() it is unnecessary to keep key_is_command_char()
      around.  This patch removes this useless function and instead
      unconditionally calls tui_dispatch_ctrl_char() inside its only caller,
      tui_getc().
      
      gdb/ChangeLog:
      
      	* tui/tui-io.c (tui_getc): Don't call key_is_command_char.
      	(key_is_command_char): Delete.
      69efdff1
  22. 11 Feb, 2015 2 commits
    • Patrick Palka's avatar
      Fix a pair of screen-resizing issues in TUI · fc6b1256
      Patrick Palka authored
      This patch fixes a pair of TUI issues related to screen resizing:
      
      1. In tui_handle_resize_during_io(), when the TUI screen gets resized,
      we fail to update GDB's idea about the height of the output window.
      
      You can see this bug by doing:
      
        a. Enter TUI mode.
        b. "show height"
        c. Resize the terminal.
        d. "show height"
      
      And observe that despite resizing the terminal, the reported height
      remains unchanged.  Note that a similar issue exists in the CLI.
      
      The fix for this is simple: call tui_update_gdb_sizes() after performing
      a resize, so that the "height" variable remains consistent with the
      height of TUI's output window.
      
      2. In tui_enable(), the call to tui_update_gdb_sizes() may clobber
      readline's idea of the actual screen dimensions, and a subsequent
      pending resize will use bogus terminal dimensions.
      
      You can see this bug by doing:
      
        a. Enter TUI mode.
        b. Exit TUI mode.
        c. Resize the terminal.
        d. Enter TUI mode.
        e. Press a key to resize the screen.
      
      And observe that the terminal gets incorrectly resized to the wrong
      dimensions.  To fix this issue, we should oppurtunistically resize the
      screen in tui_enable().  That way we eliminate the possibility of a
      pending resize triggering right after we call tui_update_gdb_sizes().
      
      gdb/ChangeLog:
      
      	* tui/tui-io.c (tui_handle_resize_during_io): Call
      	tui_update_gdb_sizes() after resizing the screen.
      	* tui/tui.c (tui_enable): Resize the terminal before
      	calling tui_update_gdb_sizes().
      fc6b1256
    • Patrick Palka's avatar
      Fix truncation of TUI command history · d9080678
      Patrick Palka authored
      If we submit a command while the prompt cursor is somewhere other than
      at the end of the command line, the command line gets truncated as the
      command window gets shifted one line up.  This happens because we fail
      to properly move the cursor to the end of the command line before
      transmitting the newline to ncurses.  We need to move the cursor because
      when ncurses outputs a newline it truncates any text that appears
      past the end of the cursor.
      
      The fix is generic enough to work properly even in multi-line secondary
      prompts like the quit prompt.
      
      gdb/ChangeLog:
      
      	* tui/tui-io.c (tui_getc): Move cursor to the end of the command
      	line before printing a newline.
      d9080678
  23. 04 Feb, 2015 1 commit
    • Doug Evans's avatar
      Speed up GDB's TUI output · 518be979
      Doug Evans authored
      In the TUI mode, we call wrefresh after outputting every single
      character.  This results in the I/O becoming very slow.  Fix this by
      delaying refreshing the console window until an explicit flush of
      gdb_stdout is requested, or a write to any other (unbuffered) file is
      done.
      
      2015-02-04  Doug Evans  <dje@google.com>
      	    Pedro Alves  <palves@redhat.com>
      	    Eli Zaretskii  <eliz@gnu.org>
      
      	PR tui/17810
      	* tui/tui-command.c (tui_refresh_cmd_win): New function.
      	* tui/tui-command.c (tui_refresh_cmd_win): Declare.
      	* tui/tui-file.c: #include tui/tui-command.h.
      	(tui_file_fputs): Refresh command window if stream is not gdb_stdout.
      	(tui_file_flush): Refresh command window if stream is gdb_stdout.
      	* tui/tui-io.c (tui_puts): Remove calls to wrefresh, fflush.
      518be979
  24. 31 Jan, 2015 3 commits
    • Gary Benson's avatar
      Add max-completions parameter, and implement tab-completion limiting. · ef0b411a
      Gary Benson authored
      This commit adds a new exception, MAX_COMPLETIONS_REACHED_ERROR, to be
      thrown whenever the completer has generated too many candidates to
      be useful.  A new user-settable variable, "max_completions", is added
      to control this behaviour.  A top-level completion limit is added to
      complete_line_internal, as the final check to ensure the user never
      sees too many completions.  An additional limit is added to
      default_make_symbol_completion_list_break_on, to halt time-consuming
      symbol table expansions.
      
      gdb/ChangeLog:
      
      	PR cli/9007
      	PR cli/11920
      	PR cli/15548
      	* cli/cli-cmds.c (complete_command): Notify user if max-completions
      	reached.
      	* common/common-exceptions.h (enum errors)
      	<MAX_COMPLETIONS_REACHED_ERROR>: New value.
      	* completer.h (get_max_completions_reached_message): New declaration.
      	(max_completions): Likewise.
      	(completion_tracker_t): New typedef.
      	(new_completion_tracker): New declaration.
      	(make_cleanup_free_completion_tracker): Likewise.
      	(maybe_add_completion_enum): New enum.
      	(maybe_add_completion): New declaration.
      	(throw_max_completions_reached_error): Likewise.
      	* completer.c (max_completions): New global variable.
      	(new_completion_tracker): New function.
      	(free_completion_tracker): Likewise.
      	(make_cleanup_free_completion_tracker): Likewise.
      	(maybe_add_completions): Likewise.
      	(throw_max_completions_reached_error): Likewise.
      	(complete_line): Remove duplicates and limit result to max_completions
      	entries.
      	(get_max_completions_reached_message): New function.
      	(gdb_display_match_list): Handle max_completions.
      	(_initialize_completer): New declaration and function.
      	* symtab.c: Include completer.h.
      	(completion_tracker): New static variable.
      	(completion_list_add_name): Call maybe_add_completion.
      	(default_make_symbol_completion_list_break_on_1): Renamed from
      	default_make_symbol_completion_list_break_on.  Maintain
      	completion_tracker across calls to completion_list_add_name.
      	(default_make_symbol_completion_list_break_on): New function.
      	* top.c (init_main): Set rl_completion_display_matches_hook.
      	* tui/tui-io.c: Include completer.h.
      	(tui_old_rl_display_matches_hook): New static global.
      	(tui_rl_display_match_list): Notify user if max-completions reached.
      	(tui_setup_io): Save/restore rl_completion_display_matches_hook.
      	* NEWS (New Options): Mention set/show max-completions.
      
      gdb/doc/ChangeLog:
      
      	* gdb.texinfo (Command Completion): Document new
      	"set/show max-completions" option.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.base/completion.exp: Disable completion limiting for
      	existing tests.  Add new tests to check completion limiting.
      	* gdb.linespec/ls-errs.exp: Disable completion limiting.
      ef0b411a
    • Doug Evans's avatar
      Unify CLI/TUI interface to readline tab completion. · 82083d6d
      Doug Evans authored
      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.
      82083d6d
    • Eli Zaretskii's avatar
      Make sure TABs are expanded in TUI windows on MS-Windows. · 312809f8
      Eli Zaretskii authored
      gdb/
      2015-01-31  Eli Zaretskii  <eliz@gnu.org>
      
      	* tui/tui-io.c (tui_expand_tabs): New function.
      	(tui_puts, tui_redisplay_readline): Expand TABs into the
      	appropriate number of spaces.
      	* tui/tui-regs.c: Include tui-io.h.
      	(tui_register_format): Call tui_expand_tabs to expand TABs into
      	the appropriate number of spaces.
      	* tui/tui-io.h: Add prototype for tui_expand_tabs.
      312809f8
  25. 09 Jan, 2015 1 commit
    • Patrick Palka's avatar
      Consolidate the custom TUI query hook with the default query hook · 588dcc3e
      Patrick Palka authored
      This patch primarily rewrites defaulted_query() to use
      gdb_readline_wrapper() to prompt the user for input, like
      prompt_for_continue() does.  The motivation for this rewrite is to be
      able to reuse the default query hook in TUI, obviating the need for a
      custom TUI query hook.
      
      However, having TUI use the default query mechanism exposed a couple of
      latent bugs in tui_redisplay_readline() related to the handling of
      multi-line prompts, in particular GDB's multi-line quit prompt.
      
      The first issue is an off-by-one error in the calculation of the height
      of the prompt.  The check in question should be col <= prev_col, not c <
      prev_col, to properly account for the case when a prompt contains
      multiple consecutive newlines.  Failing to do so makes TUI have the
      wrong idea of the vertical height of the prompt.  This patch fixes the
      column check.
      
      The second issue is that cur_line does not get updated to reflect the
      cursor position if the user's prompt cursor is at the end of the prompt
      (i.e. if rl_point == rl_end).  cur_line only gets updated if rl_point
      lies between 0..rl_end-1 because that is the bounds of the for loop
      responsible for updating cur_line.  This patch changes the loop's bounds
      to 0..rl_end so that cur_line always gets updated.
      
      With these two bug fixes out of the way, the default query mechanism
      works well in TUI even with multi-line prompts like GDB's quit prompt.
      
      gdb/ChangeLog:
      
      	* utils.c (defaulted_query): Rewrite to use gdb_readline_wrapper
      	to prompt for input.
      	* tui/tui-hooks.c (tui_query_hook): Remove.
      	(tui_install_hooks): Don't set deprecated_query_hook.
      	* tui/tui-io.c (tui_redisplay_readline): Fix off-by-one error in
      	height calculation.  Always update the command window's cur_line.
      588dcc3e
  26. 01 Jan, 2015 1 commit
  27. 23 Nov, 2014 1 commit
    • Patrick Palka's avatar
      Fix the processing of Meta-key commands in TUI · d64e57fa
      Patrick Palka authored
      This patch fixes the annoying bug where key sequences such as Alt_F or
      Alt_B (go forward or backwards by a word) do not behave promptly in TUI.
      You have to press a third key in order for the key sequence to register.
      
      This is mostly ncurses' fault.  Calling wgetch() normally causes ncurses
      to read only a single key from stdin.  However if the key read is the
      start-sequence key (^[ a.k.a. ESC) then wgetch() reads TWO keys from
      stdin, storing the 2nd key into an internal FIFO buffer and returning
      the start-sequence key.  The extraneous read of the 2nd key makes us
      miss its corresponding stdin event, so the event loop blocks until a
      third key is pressed.  This explains why such key sequences do not
      behave promptly in TUI.
      
      To fix this issue, we must somehow compensate for the missed stdin event
      corresponding to the 2nd byte of a key sequence.  This patch achieves
      this by hacking  up the stdin event handler to conditionally execute the
      readline callback multiple times in a row.  This is done via a new
      global variable, call_stdin_event_handler_again_p, which is set from
      tui_getc() when we receive a start-sequence key and notice extra pending
      input in the ncurses buffer.
      
      Tested on x86_64-unknown-linux-gnu.
      
      gdb/ChangeLog:
      
      	* event-top.h (call_stdin_event_handler_again_p): Declare.
      	* event-top.c (call_stdin_event_handler_again_p): Define.
      	(stdin_event_handler): Use it.
      	* tui/tui-io.c (tui_getc): Prepare to call the stdin event
      	handler again if there is pending input following a
      	start sequence.
      d64e57fa
  28. 29 Aug, 2014 1 commit
    • Gary Benson's avatar
      Replace hardwired error handlers in tui_initialize_io · e0e6bcab
      Gary Benson authored
      tui_initialize_io contains a pair of hardwired fprintf/exit error
      handlers.  I was unable to find any documentation as to why they're
      hardwired (the code appeared in a monolithic block back in 2001:
      https://sourceware.org/ml/gdb-patches/2001-07/msg00490.html) and I
      was also unable to come up with a situation where error would not
      be suitable, so I have replaced both handlers with calls to error.
      
      gdb/ChangeLog:
      
      	* tui/tui-io.c (tui_initialize_io): Replace two fprintf/exit
      	pairs with calls to error.  Wrap the message with _().
      e0e6bcab
  29. 07 Aug, 2014 1 commit
    • Gary Benson's avatar
      Move stdio.h to common-defs.h · d02f550d
      Gary Benson authored
      This commit moves the inclusion of stdio.h to common-defs.h and
      removes all other inclusions.
      
      gdb/
      2014-08-07  Gary Benson  <gbenson@redhat.com>
      
      	* common/common-defs.h: Include stdio.h.
      	* defs.h: Do not include stdio.h.
      	* ada-lang.c: Likewise.
      	* common/buffer.c: Likewise.
      	* common/common-utils.c: Likewise.
      	* cp-name-parser.y: Likewise.
      	* gnu-nat.c: Likewise.
      	* go32-nat.c: Likewise.
      	* i386gnu-nat.c: Likewise.
      	* proc-api.c: Likewise.
      	* proc-events.c: Likewise.
      	* proc-flags.c: Likewise.
      	* proc-why.c: Likewise.
      	* python/python-internal.h: Likewise.
      	* target-memory.c: Likewise.
      	* tui/tui-io.c: Likewise.
      	* tui/tui.c: Likewise.
      
      gdb/gdbserver/
      2014-08-07  Gary Benson  <gbenson@redhat.com>
      
      	* server.h: Do not include stdio.h.
      	* linux-low.c: Likewise.
      	* remote-utils.c: Likewise.
      	* spu-low.c: Likewise.
      	* utils.c: Likewise.
      	* wincecompat.c: Likewise.
      d02f550d
  30. 24 Jul, 2014 1 commit
    • Pedro Alves's avatar
      Fix pagination crash when the TUI is active · 36d6eb95
      Pedro Alves authored
      The TUI currently crashes when the user types <return> in response to
      a pagination prompt:
      
        $ gdb --tui ...
        *the TUI is now active*
        (gdb) set height 2
        (gdb) help
        List of classes of commands:
      
        Program received signal SIGSEGV, Segmentation fault.
        strlen () at ../sysdeps/x86_64/strlen.S:106
        106             movdqu  (%rax), %xmm12
      
        (top-gdb) bt
        #0  strlen () at ../sysdeps/x86_64/strlen.S:106
        #1  0x000000000086be5f in xstrdup (s=0x0) at ../src/libiberty/xstrdup.c:33
        #2  0x00000000005163f9 in tui_prep_terminal (notused1=1) at ../src/gdb/tui/tui-io.c:296
        #3  0x000000000077a7ee in _rl_callback_newline () at ../src/readline/callback.c:82
        #4  0x000000000077a853 in rl_callback_handler_install (prompt=0x0, linefunc=0x618b60 <command_line_handler>) at ../src/readline/callback.c:102
        #5  0x0000000000718a5c in gdb_readline_wrapper_cleanup (arg=0xfd14d0) at ../src/gdb/top.c:788
        #6  0x0000000000596d08 in do_my_cleanups (pmy_chain=0xcf0b38 <cleanup_chain>, old_chain=0x1043d10) at ../src/gdb/cleanups.c:155
        #7  0x0000000000596d75 in do_cleanups (old_chain=0x1043d10) at ../src/gdb/cleanups.c:177
        #8  0x0000000000718bd9 in gdb_readline_wrapper (prompt=0x7fffffffcfa0 "---Type <return> to continue, or q <return> to quit---")
            at ../src/gdb/top.c:835
        #9  0x000000000071cf74 in prompt_for_continue () at ../src/gdb/utils.c:1894
        #10 0x000000000071d434 in fputs_maybe_filtered (linebuffer=0x1043db0 "List of classes of commands:\n\n", stream=0xf72e20, filter=1)
            at ../src/gdb/utils.c:2111
        #11 0x000000000071da0f in vfprintf_maybe_filtered (stream=0xf72e20, format=0x89aef8 "List of classes of %scommands:\n\n", args=0x7fffffffd118, filter=1)
            at ../src/gdb/utils.c:2339
        #12 0x000000000071da4a in vfprintf_filtered (stream=0xf72e20, format=0x89aef8 "List of classes of %scommands:\n\n", args=0x7fffffffd118)
            at ../src/gdb/utils.c:2347
        #13 0x000000000071dc72 in fprintf_filtered (stream=0xf72e20, format=0x89aef8 "List of classes of %scommands:\n\n") at ../src/gdb/utils.c:2399
        #14 0x00000000004f90ab in help_list (list=0xe6d100, cmdtype=0x89ad8c "", class=all_classes, stream=0xf72e20)
            at ../src/gdb/cli/cli-decode.c:1038
        #15 0x00000000004f8dba in help_cmd (arg=0x0, stream=0xf72e20) at ../src/gdb/cli/cli-decode.c:946
      
      Git 0017922d added:
      
          @@ -776,6 +777,12 @@ gdb_readline_wrapper_cleanup (void *arg)
      
           gdb_assert (input_handler == gdb_readline_wrapper_line);
           input_handler = cleanup->handler_orig;
        +
        +  /* Reinstall INPUT_HANDLER in readline, without displaying a
        +     prompt.  */
        +  if (async_command_editing_p)
        +    rl_callback_handler_install (NULL, input_handler);
      
      and tui_prep_terminal simply misses handling the case of a NULL
      rl_prompt.
      
      I also checked that readline's sources do similar checks.
      
      gdb/
      2014-07-24  Pedro Alves  <palves@redhat.com>
      
      	* tui/tui-io.c (tui_prep_terminal): Handle NULL rl_prompt.
      36d6eb95
  31. 20 Jun, 2014 1 commit
    • Jan Kratochvil's avatar
      Fix --with-system-readline with readline-6.3 patch 5 · 840ed64d
      Jan Kratochvil authored
      I have filed now:
      	--with-system-readline uses bundled readline include files
      	https://sourceware.org/bugzilla/show_bug.cgi?id=17077
      
      To see any effect of the patch below you have to do:
      	rm -rf readline
      Otherwise readline include files get used the bundled ones from GDB which are
      currently 6.2 while system readline may be 6.3 already.
      
      You also have to use system readline-6.3 including its upstream patch:
      	[Bug-readline] Readline-6.3 Official Patch 5
      	http://lists.gnu.org/archive/html/bug-readline/2014-04/msg00018.html
      	Message-ID: <140415125618.AA57598.SM@caleb.ins.cwru.edu>
      
      In short it happens on Fedora Rawhide since:
      	readline-6.3-1.fc21
      	https://koji.fedoraproject.org/koji/buildinfo?buildID=538941
      
      The error is:
      	../../gdb/tui/tui-io.c:132:1: error: 'Function' is deprecated [-Werror=deprecated-declarations]
      	 static Function *tui_old_rl_getc_function;
      	 ^
      	../../gdb/tui/tui-io.c:133:1: error: 'VFunction' is deprecated [-Werror=deprecated-declarations]
      	 static VFunction *tui_old_rl_redisplay_function;
      	 ^
      	../../gdb/tui/tui-io.c:134:1: error: 'VFunction' is deprecated [-Werror=deprecated-declarations]
      	 static VFunction *tui_old_rl_prep_terminal;
      	 ^
      	../../gdb/tui/tui-io.c:135:1: error: 'VFunction' is deprecated [-Werror=deprecated-declarations]
      	 static VFunction *tui_old_rl_deprep_terminal;
      	 ^
      
      It is since bash change:
      lib/readline/rltypedefs.h
             - remove old Function/VFunction/CPFunction/CPPFunction typedefs as
      	 suggested by Tom Tromey <tromey@redhat.com>
      
      The new typedefs used below are present in readline/rltypedefs.h since:
      	git://git.savannah.gnu.org/bash.git
      	commit 28ef6c316f1aff914bb95ac09787a3c83c1815fd
      	Date:   Fri Apr 6 19:14:31 2001 +0000
      
      gdb/
      2014-06-20  Jan Kratochvil  <jan.kratochvil@redhat.com>
      
      	Fix --with-system-readline with readline-6.3 patch 5.
      	* tui/tui-io.c (tui_old_rl_getc_function, tui_old_rl_redisplay_function)
      	(tui_old_rl_prep_terminal, tui_old_rl_deprep_terminal): Use rl_*_t
      	types.
      
      Message-ID: <20140620105004.GA22236@host2.jankratochvil.net>
      840ed64d
  32. 01 Jan, 2014 1 commit
  33. 06 Sep, 2013 1 commit