1. 17 Jan, 2019 1 commit
    • Tom Tromey's avatar
      Replace "the the" with "the" · 6471e7d2
      Tom Tromey authored
      This replaces "the the" with "the" in various comments.
      
      Tested by rebuilding.  This didn't test the solib-dsbt.c change, but
      it looks harmless.
      
      gdb/ChangeLog
      2019-01-17  Tom Tromey  <tromey@bapiya>
      
      	* valprint.c: Replace "the the" with "the".
      	* symtab.c: Replace "the the" with "the".
      	* solib.c: Replace "the the" with "the".
      	* solib-dsbt.c: Replace "the the" with "the".
      	* linespec.c: Replace "the the" with "the".
      	* dwarf2loc.h: Replace "the the" with "the".
      	* amd64-windows-tdep.c: Replace "the the" with "the".
      	* aarch64-tdep.c: Replace "the the" with "the".
      6471e7d2
  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. 30 Dec, 2018 1 commit
    • Tom Tromey's avatar
      Change input_handler to take a unique_xmalloc_ptr · 95bc9f0b
      Tom Tromey authored
      This changes ui::input_handler to take a unique_xmalloc_ptr.  This
      clarifies the ownership transfer of input_handler's argument.
      
      gdb/ChangeLog
      2018-12-30  Tom Tromey  <tom@tromey.com>
      
      	* event-top.h (command_line_handler): Update.
      	* top.c (class gdb_readline_wrapper_cleanup) <m_handler_orig>:
      	Update.
      	(gdb_readline_wrapper_line): Update.
      	* top.h (struct ui) <input_handler>: Take a unique_xmalloc_ptr.
      	(handle_line_of_input): Update.
      	* event-top.c: Update.
      	(gdb_readline_no_editing_callback): Update.
      	(command_line_handler): Take a unique_xmalloc_ptr.
      	(handle_line_of_input): Take a const char *.
      	(command_line_append_input_line): Take a const char *.
      95bc9f0b
  4. 22 Nov, 2018 1 commit
    • Pedro Alves's avatar
      Per-inferior thread list, thread ranges/iterators, down with ALL_THREADS, etc. · 08036331
      Pedro Alves authored
      As preparation for multi-target, this patch makes each inferior have
      its own thread list.
      
      This isn't absolutely necessary for multi-target, but simplifies
      things.  It originally stemmed from the desire to eliminate the
      init_thread_list calls sprinkled around, plus it makes it more
      efficient to iterate over threads of a given inferior (no need to
      always iterate over threads of all inferiors).
      
      We still need to iterate over threads of all inferiors in a number of
      places, which means we'd need adjust the ALL_THREADS /
      ALL_NON_EXITED_THREADS macros.  However, naively tweaking those macros
      to have an extra for loop, like:
      
           #define ALL_THREADS (thr, inf) \
             for (inf = inferior_list; inf; inf = inf->next) \
      	 for (thr = inf->thread_list; thr; thr = thr->next)
      
      causes problems with code that does "break" or "continue" within the
      ALL_THREADS loop body.  Plus, we need to declare the extra "inf" local
      variable in order to pass it as temporary variable to ALL_THREADS
      (etc.)
      
      It gets even trickier when we consider extending the macros to filter
      out threads matching a ptid_t and a target.  The macros become tricker
      to read/write.  Been there.
      
      An alternative (which was my next attempt), is to replace the
      ALL_THREADS etc. iteration style with for_each_all_threads,
      for_each_non_exited_threads, etc. functions which would take a
      callback as parameter, which would usually be passed a lambda.
      However, I did not find that satisfactory at all, because the
      resulting code ends up a little less natural / more noisy to read,
      write and debug/step-through (due to use of lambdas), and in many
      places where we use "continue;" to skip to the next thread now need to
      use "return;".  (I ran into hard to debug bugs caused by a
      continue/return confusion.)
      
      I.e., before:
      
          ALL_NON_EXITED_THREADS (tp)
            {
      	if (tp->not_what_I_want)
      	  continue;
      	// do something
            }
      
      would turn into:
      
          for_each_non_exited_thread ([&] (thread_info *tp)
            {
      	if (tp->not_what_I_want)
      	  return;
      	// do something
            });
      
      Lastly, the solution I settled with was to replace the ALL_THREADS /
      ALL_NON_EXITED_THREADS / ALL_INFERIORS macros with (C++20-like) ranges
      and iterators, such that you can instead naturaly iterate over
      threads/inferiors using range-for, like e.g,.:
      
         // all threads, including THREAD_EXITED threads.
         for (thread_info *tp : all_threads ())
           { .... }
      
         // all non-exited threads.
         for (thread_info *tp : all_non_exited_threads ())
           { .... }
      
         // all non-exited threads of INF inferior.
         for (thread_info *tp : inf->non_exited_threads ())
           { .... }
      
      The all_non_exited_threads() function takes an optional filter ptid_t as
      parameter, which is quite convenient when we need to iterate over
      threads matching that filter.  See e.g., how the
      set_executing/set_stop_requested/finish_thread_state etc. functions in
      thread.c end up being simplified.
      
      Most of the patch thus is about adding the infrustructure for allowing
      the above.  Later on when we get to actual multi-target, these
      functions/ranges/iterators will gain a "target_ops *" parameter so
      that e.g., we can iterate over all threads of a given target that
      match a given filter ptid_t.
      
      The only entry points users needs to be aware of are the
      all_threads/all_non_exited_threads etc. functions seen above.  Thus,
      those functions are declared in gdbthread.h/inferior.h.  The actual
      iterators/ranges are mainly "internals" and thus are put out of view
      in the new thread-iter.h/thread-iter.c/inferior-iter.h files.  That
      keeps the gdbthread.h/inferior.h headers quite a bit more readable.
      
      A common/safe-iterator.h header is added which adds a template that
      can be used to build "safe" iterators, which are forward iterators
      that can be used to replace the ALL_THREADS_SAFE macro and other
      instances of the same idiom in future.
      
      There's a little bit of shuffling of code between
      gdbthread.h/thread.c/inferior.h in the patch.  That is necessary in
      order to avoid circular dependencies between the
      gdbthread.h/inferior.h headers.
      
      As for the init_thread_list calls sprinkled around, they're all
      eliminated by this patch, and a new, central call is added to
      inferior_appeared.  Note how also related to that, there's a call to
      init_wait_for_inferior in remote.c that is eliminated.
      init_wait_for_inferior is currently responsible for discarding skipped
      inline frames, which had to be moved elsewhere.  Given that nowadays
      we always have a thread even for single-threaded processes, the
      natural place is to delete a frame's inline frame info when we delete
      the thread.  I.e., from clear_thread_inferior_resources.
      
      gdb/ChangeLog:
      2018-11-22  Pedro Alves  <palves@redhat.com>
      
      	* Makefile.in (COMMON_SFILES): Add thread-iter.c.
      	* breakpoint.c (breakpoints_should_be_inserted_now): Replace
      	ALL_NON_EXITED_THREADS with all_non_exited_threads.
      	(print_one_breakpoint_location): Replace ALL_INFERIORS with
      	all_inferiors.
      	* bsd-kvm.c: Include inferior.h.
      	* btrace.c (btrace_free_objfile): Replace ALL_NON_EXITED_THREADS
      	with all_non_exited_threads.
      	* common/filtered-iterator.h: New.
      	* common/safe-iterator.h: New.
      	* corelow.c (core_target_open): Don't call init_thread_list here.
      	* darwin-nat.c (thread_info_from_private_thread_info): Replace
      	ALL_THREADS with all_threads.
      	* fbsd-nat.c (fbsd_nat_target::resume): Replace
      	ALL_NON_EXITED_THREADS with inf->non_exited_threads.
      	* fbsd-tdep.c (fbsd_make_corefile_notes): Replace
      	ALL_NON_EXITED_THREADS with inf->non_exited_threads.
      	* fork-child.c (postfork_hook): Don't call init_thread_list here.
      	* gdbarch-selftests.c (register_to_value_test): Adjust.
      	* gdbthread.h: Don't include "inferior.h" here.
      	(struct inferior): Forward declare.
      	(enum step_over_calls_kind): Moved here from inferior.h.
      	(thread_info::deletable): Definition moved to thread.c.
      	(find_thread_ptid (inferior *, ptid_t)): Declare.
      	(ALL_THREADS, ALL_THREADS_BY_INFERIOR, ALL_THREADS_SAFE): Delete.
      	Include "thread-iter.h".
      	(all_threads, all_non_exited_threads, all_threads_safe): New.
      	(any_thread_p): Declare.
      	(thread_list): Delete.
      	* infcmd.c (signal_command): Replace ALL_NON_EXITED_THREADS with
      	all_non_exited_threads.
      	(proceed_after_attach_callback): Delete.
      	(proceed_after_attach): Take an inferior pointer instead of an
      	integer PID.  Adjust to use range-for.
      	(attach_post_wait): Pass down inferior pointer instead of pid.
      	Use range-for instead of ALL_NON_EXITED_THREADS.
      	(detach_command): Remove init_thread_list call.
      	* inferior-iter.h: New.
      	* inferior.c (struct delete_thread_of_inferior_arg): Delete.
      	(delete_thread_of_inferior): Delete.
      	(delete_inferior, exit_inferior_1): Use range-for with
      	inf->threads_safe() instead of iterate_over_threads.
      	(inferior_appeared): Call init_thread_list here.
      	(discard_all_inferiors): Use all_non_exited_inferiors.
      	(find_inferior_id, find_inferior_pid): Use all_inferiors.
      	(iterate_over_inferiors): Use all_inferiors_safe.
      	(have_inferiors, number_of_live_inferiors): Use
      	all_non_exited_inferiors.
      	(number_of_inferiors): Use all_inferiors and std::distance.
      	(print_inferior): Use all_inferiors.
      	* inferior.h: Include gdbthread.h.
      	(enum step_over_calls_kind): Moved to gdbthread.h.
      	(struct inferior) <thread_list>: New field.
      	<threads, non_exited_threads, threads_safe>: New methods.
      	(ALL_INFERIORS): Delete.
      	Include "inferior-iter.h".
      	(ALL_NON_EXITED_INFERIORS): Delete.
      	(all_inferiors_safe, all_inferiors, all_non_exited_inferiors): New
      	functions.
      	* inflow.c (child_interrupt, child_pass_ctrlc): Replace
      	ALL_NON_EXITED_THREADS with all_non_exited_threads.
      	* infrun.c (follow_exec): Use all_threads_safe.
      	(clear_proceed_status, proceed): Use all_non_exited_threads.
      	(init_wait_for_inferior): Don't clear inline frame state here.
      	(infrun_thread_stop_requested, for_each_just_stopped_thread): Use
      	all_threads instead of ALL_NON_EXITED_THREADS.
      	(random_pending_event_thread): Use all_non_exited_threads instead
      	of ALL_NON_EXITED_THREADS.  Use a lambda for repeated code.
      	(clean_up_just_stopped_threads_fsms): Use all_non_exited_threads
      	instead of ALL_NON_EXITED_THREADS.
      	(handle_no_resumed): Use all_non_exited_threads instead of
      	ALL_NON_EXITED_THREADS.  Use all_inferiors instead of
      	ALL_INFERIORS.
      	(restart_threads, switch_back_to_stepped_thread): Use
      	all_non_exited_threads instead of ALL_NON_EXITED_THREADS.
      	* linux-nat.c (check_zombie_leaders): Replace ALL_INFERIORS with
      	all_inferiors.
      	(kill_unfollowed_fork_children): Use inf->non_exited_threads
      	instead of ALL_NON_EXITED_THREADS.
      	* linux-tdep.c (linux_make_corefile_notes): Use
      	inf->non_exited_threads instead of ALL_NON_EXITED_THREADS.
      	* linux-thread-db.c (thread_db_target::update_thread_list):
      	Replace ALL_INFERIORS with all_inferiors.
      	(thread_db_target::thread_handle_to_thread_info): Use
      	inf->non_exited_threads instead of ALL_NON_EXITED_THREADS.
      	* mi/mi-interp.c (multiple_inferiors_p): New.
      	(mi_on_resume_1): Simplify using all_non_exited_threads and
      	multiple_inferiors_p.
      	* mi/mi-main.c (mi_cmd_thread_list_ids): Use all_non_exited_threads
      	instead of ALL_NON_EXITED_THREADS.
      	* nto-procfs.c (nto_procfs_target::open): Don't call
      	init_thread_list here.
      	* record-btrace.c (record_btrace_target_open)
      	(record_btrace_target::stop_recording)
      	(record_btrace_target::close)
      	(record_btrace_target::record_is_replaying)
      	(record_btrace_target::resume, record_btrace_target::wait)
      	(record_btrace_target::record_stop_replaying): Use
      	all_non_exited_threads instead of ALL_NON_EXITED_THREADS.
      	* record-full.c (record_full_wait_1): Use all_non_exited_threads
      	instead of ALL_NON_EXITED_THREADS.
      	* regcache.c (cooked_read_test): Remove reference to global
      	thread_list.
      	* remote-sim.c (gdbsim_target::create_inferior): Don't call
      	init_thread_list here.
      	* remote.c (remote_target::update_thread_list): Use
      	all_threads_safe instead of ALL_NON_EXITED_THREADS.
      	(remote_target::process_initial_stop_replies): Replace
      	ALL_INFERIORS with all_non_exited_inferiors and use
      	all_non_exited_threads instead of ALL_NON_EXITED_THREADS.
      	(remote_target::open_1): Don't call init_thread_list here.
      	(remote_target::append_pending_thread_resumptions)
      	(remote_target::remote_resume_with_hc): Use all_non_exited_threads
      	instead of ALL_NON_EXITED_THREADS.
      	(remote_target::commit_resume)
      	(remote_target::remove_new_fork_children): Replace ALL_INFERIORS
      	with all_non_exited_inferiors and use all_non_exited_threads
      	instead of ALL_NON_EXITED_THREADS.
      	(remote_target::kill_new_fork_children): Use
      	all_non_exited_threads instead of ALL_NON_EXITED_THREADS.  Remove
      	init_thread_list and init_wait_for_inferior calls.
      	(remote_target::remote_btrace_maybe_reopen)
      	(remote_target::thread_handle_to_thread_info): Use
      	all_non_exited_threads instead of ALL_NON_EXITED_THREADS.
      	* target.c (target_terminal::restore_inferior)
      	(target_terminal_is_ours_kind): Replace ALL_INFERIORS with
      	all_non_exited_inferiors.
      	* thread-iter.c: New file.
      	* thread-iter.h: New file.
      	* thread.c: Include "inline-frame.h".
      	(thread_list): Delete.
      	(clear_thread_inferior_resources): Call clear_inline_frame_state.
      	(init_thread_list): Use all_threads_safe instead of
      	ALL_THREADS_SAFE.  Adjust to per-inferior thread lists.
      	(new_thread): Adjust to per-inferior thread lists.
      	(add_thread_silent): Pass inferior to find_thread_ptid.
      	(thread_info::deletable): New, moved from the header.
      	(delete_thread_1): Adjust to per-inferior thread lists.
      	(find_thread_global_id): Use inf->threads().
      	(find_thread_ptid): Use find_inferior_ptid and pass inferior to
      	find_thread_ptid.
      	(find_thread_ptid(inferior*, ptid_t)): New overload.
      	(iterate_over_threads): Use all_threads_safe.
      	(any_thread_p): New.
      	(thread_count): Use all_threads and std::distance.
      	(live_threads_count): Use all_non_exited_threads and
      	std::distance.
      	(valid_global_thread_id): Use all_threads.
      	(in_thread_list): Use find_thread_ptid.
      	(first_thread_of_inferior): Adjust to per-inferior thread lists.
      	(any_thread_of_inferior, any_live_thread_of_inferior): Use
      	inf->non_exited_threads().
      	(prune_threads, delete_exited_threads): Use all_threads_safe.
      	(thread_change_ptid): Pass inferior pointer to find_thread_ptid.
      	(set_resumed, set_running): Use all_non_exited_threads.
      	(is_thread_state, is_stopped, is_exited, is_running)
      	(is_executing): Delete.
      	(set_executing, set_stop_requested, finish_thread_state): Use
      	all_non_exited_threads.
      	(print_thread_info_1): Use all_inferiors and all_threads.
      	(thread_apply_all_command): Use all_non_exited_threads.
      	(thread_find_command): Use all_threads.
      	(update_threads_executing): Use all_non_exited_threads.
      	* tid-parse.c (parse_thread_id): Use inf->threads.
      	* x86-bsd-nat.c (x86bsd_dr_set): Use inf->non_exited_threads ().
      08036331
  5. 03 Jul, 2018 3 commits
    • Tom Tromey's avatar
      Remove ptid_equal · d7e15655
      Tom Tromey authored
      Remove ptid_equal in favor of using "==".
      
      gdb/ChangeLog
      2018-07-03  Tom Tromey  <tom@tromey.com>
      
      	* common/ptid.c (ptid_equal): Remove.
      	* common/ptid.h (ptid_equal): Don't declare.
      	* ada-tasks.c: Update.
      	* breakpoint.c: Update.
      	* common/agent.c: Update.
      	* corelow.c: Update.
      	* darwin-nat-info.c: Update.
      	* darwin-nat.c: Update.
      	* dcache.c: Update.
      	* dtrace-probe.c: Update.
      	* dummy-frame.c: Update.
      	* fbsd-nat.c: Update.
      	* frame.c: Update.
      	* gdbthread.h: Update.
      	* gnu-nat.c: Update.
      	* go32-nat.c: Update.
      	* inf-loop.c: Update.
      	* inf-ptrace.c: Update.
      	* infcall.c: Update.
      	* infcmd.c: Update.
      	* inflow.c: Update.
      	* infrun.c: Update.
      	* linux-fork.c: Update.
      	* linux-nat.c: Update.
      	* linux-thread-db.c: Update.
      	* mi/mi-cmd-var.c: Update.
      	* mi/mi-interp.c: Update.
      	* mi/mi-main.c: Update.
      	* nto-procfs.c: Update.
      	* ppc-linux-tdep.c: Update.
      	* procfs.c: Update.
      	* python/py-inferior.c: Update.
      	* python/py-record-btrace.c: Update.
      	* python/py-record.c: Update.
      	* ravenscar-thread.c: Update.
      	* regcache.c: Update.
      	* remote-sim.c: Update.
      	* remote.c: Update.
      	* sol-thread.c: Update.
      	* solib.c: Update.
      	* target.c: Update.
      	* tui/tui-stack.c: Update.
      	* varobj.c: Update.
      	* windows-nat.c: Update.
      	* windows-tdep.c: Update.
      
      gdb/gdbserver/ChangeLog
      2018-07-03  Tom Tromey  <tom@tromey.com>
      
      	* linux-low.c: Update.
      	* lynx-low.c: Update.
      	* mem-break.c: Update.
      	* nto-low.c: Update.
      	* remote-utils.c: Update.
      	* server.c: Update.
      	* spu-low.c: Update.
      	* target.c: Update.
      	* win32-low.c: Update.
      d7e15655
    • Tom Tromey's avatar
      Remove ptid_is_pid · 0e998d96
      Tom Tromey authored
      This removes ptid_is_pid in favor of the ptid_t::is_pid method.
      
      gdb/ChangeLog
      2018-07-03  Tom Tromey  <tom@tromey.com>
      
      	* common/ptid.c (ptid_is_pid): Remove.
      	* common/ptid.h (ptid_is_pid): Don't declare.
      	* infrun.c: Update.
      	* linux-nat.c: Update.
      	* mi/mi-interp.c: Update.
      	* remote.c: Update.
      	* thread.c: Update.
      
      gdb/gdbserver/ChangeLog
      2018-07-03  Tom Tromey  <tom@tromey.com>
      
      	* linux-low.c: Update.
      0e998d96
    • Tom Tromey's avatar
      Remove ptid_get_pid · e99b03dc
      Tom Tromey authored
      This removes ptid_get_pid in favor of calling the ptid_t::pid method.
      
      gdb/ChangeLog
      2018-07-03  Tom Tromey  <tom@tromey.com>
      
      	* common/ptid.c (ptid_get_pid): Remove.
      	* common/ptid.h (ptid_get_pid): Don't declare.
      	* aarch64-linux-nat.c: Update.
      	* ada-lang.c: Update.
      	* aix-thread.c: Update.
      	* alpha-bsd-nat.c: Update.
      	* amd64-fbsd-nat.c: Update.
      	* amd64-linux-nat.c: Update.
      	* arm-linux-nat.c: Update.
      	* arm-nbsd-nat.c: Update.
      	* auxv.c: Update.
      	* break-catch-syscall.c: Update.
      	* breakpoint.c: Update.
      	* bsd-uthread.c: Update.
      	* corelow.c: Update.
      	* ctf.c: Update.
      	* darwin-nat.c: Update.
      	* fbsd-nat.c: Update.
      	* fbsd-tdep.c: Update.
      	* gcore.c: Update.
      	* gnu-nat.c: Update.
      	* hppa-nbsd-nat.c: Update.
      	* hppa-obsd-nat.c: Update.
      	* i386-fbsd-nat.c: Update.
      	* ia64-linux-nat.c: Update.
      	* inf-ptrace.c: Update.
      	* infcmd.c: Update.
      	* inferior.c: Update.
      	* inferior.h: Update.
      	* inflow.c: Update.
      	* infrun.c: Update.
      	* linux-fork.c: Update.
      	* linux-nat.c: Update.
      	* linux-tdep.c: Update.
      	* linux-thread-db.c: Update.
      	* m68k-bsd-nat.c: Update.
      	* mi/mi-interp.c: Update.
      	* mi/mi-main.c: Update.
      	* mips-linux-nat.c: Update.
      	* mips-nbsd-nat.c: Update.
      	* mips64-obsd-nat.c: Update.
      	* nat/aarch64-linux-hw-point.c: Update.
      	* nat/aarch64-linux.c: Update.
      	* nat/linux-btrace.c: Update.
      	* nat/linux-osdata.c: Update.
      	* nat/linux-procfs.c: Update.
      	* nat/x86-linux-dregs.c: Update.
      	* nto-procfs.c: Update.
      	* obsd-nat.c: Update.
      	* ppc-linux-nat.c: Update.
      	* ppc-nbsd-nat.c: Update.
      	* ppc-obsd-nat.c: Update.
      	* proc-service.c: Update.
      	* procfs.c: Update.
      	* python/py-inferior.c: Update.
      	* python/py-infthread.c: Update.
      	* ravenscar-thread.c: Update.
      	* record.c: Update.
      	* remote-sim.c: Update.
      	* remote.c: Update.
      	* rs6000-nat.c: Update.
      	* s390-linux-nat.c: Update.
      	* sh-nbsd-nat.c: Update.
      	* sol-thread.c: Update.
      	* sparc-nat.c: Update.
      	* sparc64-tdep.c: Update.
      	* spu-linux-nat.c: Update.
      	* spu-tdep.c: Update.
      	* target-debug.h: Update.
      	* target.c: Update.
      	* thread.c: Update.
      	* tid-parse.c: Update.
      	* tracefile-tfile.c: Update.
      	* vax-bsd-nat.c: Update.
      	* windows-nat.c: Update.
      	* x86-linux-nat.c: Update.
      	* x86-nat.c: Update.
      
      gdb/gdbserver/ChangeLog
      2018-07-03  Tom Tromey  <tom@tromey.com>
      
      	* linux-low.c: Update.
      	* linux-mips-low.c: Update.
      	* lynx-low.c: Update.
      	* mem-break.c: Update.
      	* nto-low.c: Update.
      	* remote-utils.c: Update.
      	* server.c: Update.
      	* spu-low.c: Update.
      	* target.c: Update.
      	* tracepoint.c: Update.
      e99b03dc
  6. 21 Jun, 2018 1 commit
    • Pedro Alves's avatar
      Use thread_info and inferior pointers more throughout · 00431a78
      Pedro Alves authored
      This is more preparation bits for multi-target support.
      
      In a multi-target scenario, we need to address the case of different
      processes/threads running on different targets that happen to have the
      same PID/PTID.  E.g., we can have both process 123 in target 1, and
      process 123 in target 2, while they're in reality different processes
      running on different machines.  Or maybe we've loaded multiple
      instances of the same core file.  Etc.
      
      To address this, in my WIP multi-target branch, threads and processes
      are uniquely identified by the (process_stratum target_ops *, ptid_t)
      and (process_stratum target_ops *, pid) tuples respectively.  I.e.,
      each process_stratum instance has its own thread/process number space.
      
      As you can imagine, that requires passing around target_ops * pointers
      in a number of functions where we're currently passing only a ptid_t
      or an int.  E.g., when we look up a thread_info object by ptid_t in
      find_thread_ptid, the ptid_t alone isn't sufficient.
      
      In many cases though, we already have the thread_info or inferior
      pointer handy, but we "lose" it somewhere along the call stack, only
      to look it up again by ptid_t/pid.  Since thread_info or inferior
      objects know their parent target, if we pass around thread_info or
      inferior pointers when possible, we avoid having to add extra
      target_ops parameters to many functions, and also, we eliminate a
      number of by ptid_t/int lookups.
      
      So that's what this patch does.  In a bit more detail:
      
      - Changes a number of functions and methods to take a thread_info or
        inferior pointer instead of a ptid_t or int parameter.
      
      - Changes a number of structure fields from ptid_t/int to inferior or
        thread_info pointers.
      
      - Uses the inferior_thread() function whenever possible instead of
        inferior_ptid.
      
      - Uses thread_info pointers directly when possible instead of the
        is_running/is_stopped etc. routines that require a lookup.
      
      - A number of functions are eliminated along the way, such as:
      
        int valid_gdb_inferior_id (int num);
        int pid_to_gdb_inferior_id (int pid);
        int gdb_inferior_id_to_pid (int num);
        int in_inferior_list (int pid);
      
      - A few structures and places hold a thread_info pointer across
        inferior execution, so now they take a strong reference to the
        (refcounted) thread_info object to avoid the thread_info pointer
        getting stale.  This is done in enable_thread_stack_temporaries and
        in the infcall.c code.
      
      - Related, there's a spot in infcall.c where using a RAII object to
        handle the refcount would be handy, so a gdb::ref_ptr specialization
        for thread_info is added (thread_info_ref, in gdbthread.h), along
        with a gdb_ref_ptr policy that works for all refcounted_object types
        (in common/refcounted-object.h).
      
      gdb/ChangeLog:
      2018-06-21  Pedro Alves  <palves@redhat.com>
      
      	* ada-lang.h (ada_get_task_number): Take a thread_info pointer
      	instead of a ptid_t.  All callers adjusted.
      	* ada-tasks.c (ada_get_task_number): Likewise.  All callers
      	adjusted.
      	(print_ada_task_info, display_current_task_id, task_command_1):
      	Adjust.
      	* breakpoint.c (watchpoint_in_thread_scope): Adjust to use
      	inferior_thread.
      	(breakpoint_kind): Adjust.
      	(remove_breakpoints_pid): Rename to ...
      	(remove_breakpoints_inf): ... this.  Adjust to take an inferior
      	pointer.  All callers adjusted.
      	(bpstat_clear_actions): Use inferior_thread.
      	(get_bpstat_thread): New.
      	(bpstat_do_actions): Use it.
      	(bpstat_check_breakpoint_conditions, bpstat_stop_status): Adjust
      	to take a thread_info pointer.  All callers adjusted.
      	(set_longjmp_breakpoint_for_call_dummy, set_momentary_breakpoint)
      	(breakpoint_re_set_thread): Use inferior_thread.
      	* breakpoint.h (struct inferior): Forward declare.
      	(bpstat_stop_status): Update.
      	(remove_breakpoints_pid): Delete.
      	(remove_breakpoints_inf): New.
      	* bsd-uthread.c (bsd_uthread_target::wait)
      	(bsd_uthread_target::update_thread_list): Use find_thread_ptid.
      	* btrace.c (btrace_add_pc, btrace_enable, btrace_fetch)
      	(maint_btrace_packet_history_cmd)
      	(maint_btrace_clear_packet_history_cmd): Adjust.
      	(maint_btrace_clear_cmd, maint_info_btrace_cmd): Adjust to use
      	inferior_thread.
      	* cli/cli-interp.c: Include "inferior.h".
      	* common/refcounted-object.h (struct
      	refcounted_object_ref_policy): New.
      	* compile/compile-object-load.c: Include gdbthread.h.
      	(store_regs): Use inferior_thread.
      	* corelow.c (core_target::close): Use current_inferior.
      	(core_target_open): Adjust to use first_thread_of_inferior and use
      	the current inferior.
      	* ctf.c (ctf_target::close): Adjust to use current_inferior.
      	* dummy-frame.c (dummy_frame_id) <ptid>: Delete, replaced by ...
      	<thread>: ... this new field.  All references adjusted.
      	(dummy_frame_pop, dummy_frame_discard, register_dummy_frame_dtor):
      	Take a thread_info pointer instead of a ptid_t.
      	* dummy-frame.h (dummy_frame_push, dummy_frame_pop)
      	(dummy_frame_discard, register_dummy_frame_dtor): Take a
      	thread_info pointer instead of a ptid_t.
      	* elfread.c: Include "inferior.h".
      	(elf_gnu_ifunc_resolver_stop, elf_gnu_ifunc_resolver_return_stop):
      	Use inferior_thread.
      	* eval.c (evaluate_subexp): Likewise.
      	* frame.c (frame_pop, has_stack_frames, find_frame_sal): Use
      	inferior_thread.
      	* gdb_proc_service.h (struct thread_info): Forward declare.
      	(struct ps_prochandle) <ptid>: Delete, replaced by ...
      	<thread>: ... this new field.  All references adjusted.
      	* gdbarch.h, gdbarch.c: Regenerate.
      	* gdbarch.sh (get_syscall_number): Replace 'ptid' parameter with a
      	'thread' parameter.  All implementations and callers adjusted.
      	* gdbthread.h (thread_info) <set_running>: New method.
      	(delete_thread, delete_thread_silent): Take a thread_info pointer
      	instead of a ptid.
      	(global_thread_id_to_ptid, ptid_to_global_thread_id): Delete.
      	(first_thread_of_process): Delete, replaced by ...
      	(first_thread_of_inferior): ... this new function.  All callers
      	adjusted.
      	(any_live_thread_of_process): Delete, replaced by ...
      	(any_live_thread_of_inferior): ... this new function.  All callers
      	adjusted.
      	(switch_to_thread, switch_to_no_thread): Declare.
      	(is_executing): Delete.
      	(enable_thread_stack_temporaries): Update comment.
      	<enable_thread_stack_temporaries>: Take a thread_info pointer
      	instead of a ptid_t.  Incref the thread.
      	<~enable_thread_stack_temporaries>: Decref the thread.
      	<m_ptid>: Delete
      	<m_thr>: New.
      	(thread_stack_temporaries_enabled_p, push_thread_stack_temporary)
      	(get_last_thread_stack_temporary)
      	(value_in_thread_stack_temporaries, can_access_registers_thread):
      	Take a thread_info pointer instead of a ptid_t.  All callers
      	adjusted.
      	* infcall.c (get_call_return_value): Use inferior_thread.
      	(run_inferior_call): Work with thread pointers instead of ptid_t.
      	(call_function_by_hand_dummy): Work with thread pointers instead
      	of ptid_t.  Use thread_info_ref.
      	* infcmd.c (proceed_thread_callback): Access thread's state
      	directly.
      	(ensure_valid_thread, ensure_not_running): Use inferior_thread,
      	access thread's state directly.
      	(continue_command): Use inferior_thread.
      	(info_program_command): Use find_thread_ptid and access thread
      	state directly.
      	(proceed_after_attach_callback): Use thread state directly.
      	(notice_new_inferior): Take a thread_info pointer instead of a
      	ptid_t.  All callers adjusted.
      	(exit_inferior): Take an inferior pointer instead of a pid.  All
      	callers adjusted.
      	(exit_inferior_silent): New.
      	(detach_inferior): Delete.
      	(valid_gdb_inferior_id, pid_to_gdb_inferior_id)
      	(gdb_inferior_id_to_pid, in_inferior_list): Delete.
      	(detach_inferior_command, kill_inferior_command): Use
      	find_inferior_id instead of valid_gdb_inferior_id and
      	gdb_inferior_id_to_pid.
      	(inferior_command): Use inferior and thread pointers.
      	* inferior.h (struct thread_info): Forward declare.
      	(notice_new_inferior): Take a thread_info pointer instead of a
      	ptid_t.  All callers adjusted.
      	(detach_inferior): Delete declaration.
      	(exit_inferior, exit_inferior_silent): Take an inferior pointer
      	instead of a pid.  All callers adjusted.
      	(gdb_inferior_id_to_pid, pid_to_gdb_inferior_id, in_inferior_list)
      	(valid_gdb_inferior_id): Delete.
      	* infrun.c (follow_fork_inferior, proceed_after_vfork_done)
      	(handle_vfork_child_exec_or_exit, follow_exec): Adjust.
      	(struct displaced_step_inferior_state) <pid>: Delete, replaced by
      	...
      	<inf>: ... this new field.
      	<step_ptid>: Delete, replaced by ...
      	<step_thread>: ... this new field.
      	(get_displaced_stepping_state): Take an inferior pointer instead
      	of a pid.  All callers adjusted.
      	(displaced_step_in_progress_any_inferior): Adjust.
      	(displaced_step_in_progress_thread): Take a thread pointer instead
      	of a ptid_t.  All callers adjusted.
      	(displaced_step_in_progress, add_displaced_stepping_state): Take
      	an inferior pointer instead of a pid.  All callers adjusted.
      	(get_displaced_step_closure_by_addr): Adjust.
      	(remove_displaced_stepping_state): Take an inferior pointer
      	instead of a pid.  All callers adjusted.
      	(displaced_step_prepare_throw, displaced_step_prepare)
      	(displaced_step_fixup): Take a thread pointer instead of a ptid_t.
      	All callers adjusted.
      	(start_step_over): Adjust.
      	(infrun_thread_ptid_changed): Remove bit updating ptids in the
      	displaced step queue.
      	(do_target_resume): Adjust.
      	(fetch_inferior_event): Use inferior_thread.
      	(context_switch, get_inferior_stop_soon): Take an
      	execution_control_state pointer instead of a ptid_t.  All callers
      	adjusted.
      	(switch_to_thread_cleanup): Delete.
      	(stop_all_threads): Use scoped_restore_current_thread.
      	* inline-frame.c: Include "gdbthread.h".
      	(inline_state) <inline_state>: Take a thread pointer instead of a
      	ptid_t.  All callers adjusted.
      	<ptid>: Delete, replaced by ...
      	<thread>: ... this new field.
      	(find_inline_frame_state): Take a thread pointer instead of a
      	ptid_t.  All callers adjusted.
      	(skip_inline_frames, step_into_inline_frame)
      	(inline_skipped_frames, inline_skipped_symbol): Take a thread
      	pointer instead of a ptid_t.  All callers adjusted.
      	* inline-frame.h (skip_inline_frames, step_into_inline_frame)
      	(inline_skipped_frames, inline_skipped_symbol): Likewise.
      	* linux-fork.c (delete_checkpoint_command): Adjust to use thread
      	pointers directly.
      	* linux-nat.c (get_detach_signal): Likewise.
      	* linux-thread-db.c (thread_from_lwp): New 'stopped' parameter.
      	(thread_db_notice_clone): Adjust.
      	(thread_db_find_new_threads_silently)
      	(thread_db_find_new_threads_2, thread_db_find_new_threads_1): Take
      	a thread pointer instead of a ptid_t.  All callers adjusted.
      	* mi/mi-cmd-var.c: Include "inferior.h".
      	(mi_cmd_var_update_iter): Update to use thread pointers.
      	* mi/mi-interp.c (mi_new_thread): Update to use the thread's
      	inferior directly.
      	(mi_output_running_pid, mi_inferior_count): Delete, bits factored
      	out to ...
      	(mi_output_running): ... this new function.
      	(mi_on_resume_1): Adjust to use it.
      	(mi_user_selected_context_changed): Adjust to use inferior_thread.
      	* mi/mi-main.c (proceed_thread): Adjust to use thread pointers
      	directly.
      	(interrupt_thread_callback): : Adjust to use thread and inferior
      	pointers.
      	* proc-service.c: Include "gdbthread.h".
      	(ps_pglobal_lookup): Adjust to use the thread's inferior directly.
      	* progspace-and-thread.c: Include "inferior.h".
      	* progspace.c: Include "inferior.h".
      	* python/py-exitedevent.c (create_exited_event_object): Adjust to
      	hold a reference to an inferior_object.
      	* python/py-finishbreakpoint.c (bpfinishpy_init): Adjust to use
      	inferior_thread.
      	* python/py-inferior.c (struct inferior_object): Give the type a
      	tag name instead of a typedef.
      	(python_on_normal_stop): No need to check if the current thread is
      	listed.
      	(inferior_to_inferior_object): Change return type to
      	inferior_object.  All callers adjusted.
      	(find_thread_object): Delete, bits factored out to ...
      	(thread_to_thread_object): ... this new function.
      	* python/py-infthread.c (create_thread_object): Use
      	inferior_to_inferior_object.
      	(thpy_is_stopped): Use thread pointer directly.
      	(gdbpy_selected_thread): Use inferior_thread.
      	* python/py-record-btrace.c (btpy_list_object) <ptid>: Delete
      	field, replaced with ...
      	<thread>: ... this new field.  All users adjusted.
      	(btpy_insn_or_gap_new): Drop const.
      	(btpy_list_new): Take a thread pointer instead of a ptid_t.  All
      	callers adjusted.
      	* python/py-record.c: Include "gdbthread.h".
      	(recpy_insn_new, recpy_func_new): Take a thread pointer instead of
      	a ptid_t.  All callers adjusted.
      	(gdbpy_current_recording): Use inferior_thread.
      	* python/py-record.h (recpy_record_object) <ptid>: Delete
      	field, replaced with ...
      	<thread>: ... this new field.  All users adjusted.
      	(recpy_element_object) <ptid>: Delete
      	field, replaced with ...
      	<thread>: ... this new field.  All users adjusted.
      	(recpy_insn_new, recpy_func_new): Take a thread pointer instead of
      	a ptid_t.  All callers adjusted.
      	* python/py-threadevent.c: Include "gdbthread.h".
      	(get_event_thread): Use thread_to_thread_object.
      	* python/python-internal.h (struct inferior_object): Forward
      	declare.
      	(find_thread_object, find_inferior_object): Delete declarations.
      	(thread_to_thread_object, inferior_to_inferior_object): New
      	declarations.
      	* record-btrace.c: Include "inferior.h".
      	(require_btrace_thread): Use inferior_thread.
      	(record_btrace_frame_sniffer)
      	(record_btrace_tailcall_frame_sniffer): Use inferior_thread.
      	(get_thread_current_frame): Use scoped_restore_current_thread and
      	switch_to_thread.
      	(get_thread_current_frame): Use thread pointer directly.
      	(record_btrace_replay_at_breakpoint): Use thread's inferior
      	pointer directly.
      	* record-full.c: Include "inferior.h".
      	* regcache.c: Include "gdbthread.h".
      	(get_thread_arch_regcache): Use the inferior's address space
      	directly.
      	(get_thread_regcache, registers_changed_thread): New.
      	* regcache.h (get_thread_regcache(thread_info *thread)): New
      	overload.
      	(registers_changed_thread): New.
      	(remote_target) <remote_detach_1>: Swap order of parameters.
      	(remote_add_thread): <remote_add_thread>: Return the new thread.
      	(get_remote_thread_info(ptid_t)): New overload.
      	(remote_target::remote_notice_new_inferior): Use thread pointers
      	directly.
      	(remote_target::process_initial_stop_replies): Use
      	thread_info::set_running.
      	(remote_target::remote_detach_1, remote_target::detach)
      	(extended_remote_target::detach): Adjust.
      	* stack.c (frame_show_address): Use inferior_thread.
      	* target-debug.h (target_debug_print_thread_info_pp): New.
      	* target-delegates.c: Regenerate.
      	* target.c (default_thread_address_space): Delete.
      	(memory_xfer_partial_1): Use current_inferior.
      	(target_detach): Use current_inferior.
      	(target_thread_address_space): Delete.
      	(generic_mourn_inferior): Use current_inferior.
      	* target.h (struct target_ops) <thread_address_space>: Delete.
      	(target_thread_address_space): Delete.
      	* thread.c (init_thread_list): Use ALL_THREADS_SAFE.  Use thread
      	pointers directly.
      	(delete_thread_1, delete_thread, delete_thread_silent): Take a
      	thread pointer instead of a ptid_t.  Adjust all callers.
      	(ptid_to_global_thread_id, global_thread_id_to_ptid): Delete.
      	(first_thread_of_process): Delete, replaced by ...
      	(first_thread_of_inferior): ... this new function.  All callers
      	adjusted.
      	(any_thread_of_process): Rename to ...
      	(any_thread_of_inferior): ... this, and take an inferior pointer.
      	(any_live_thread_of_process): Rename to ...
      	(any_live_thread_of_inferior): ... this, and take an inferior
      	pointer.
      	(thread_stack_temporaries_enabled_p, push_thread_stack_temporary)
      	(value_in_thread_stack_temporaries)
      	(get_last_thread_stack_temporary): Take a thread pointer instead
      	of a ptid_t.  Adjust all callers.
      	(thread_info::set_running): New.
      	(validate_registers_access): Use inferior_thread.
      	(can_access_registers_ptid): Rename to ...
      	(can_access_registers_thread): ... this, and take a thread
      	pointer.
      	(print_thread_info_1): Adjust to compare thread pointers instead
      	of ptids.
      	(switch_to_no_thread, switch_to_thread): Make extern.
      	(scoped_restore_current_thread::~scoped_restore_current_thread):
      	Use m_thread pointer directly.
      	(scoped_restore_current_thread::scoped_restore_current_thread):
      	Use inferior_thread.
      	(thread_command): Use thread pointer directly.
      	(thread_num_make_value_helper): Use inferior_thread.
      	* top.c (execute_command): Use inferior_thread.
      	* tui/tui-interp.c: Include "inferior.h".
      	* varobj.c (varobj_create): Use inferior_thread.
      	(value_of_root_1): Use find_thread_global_id instead of
      	global_thread_id_to_ptid.
      00431a78
  7. 25 May, 2018 4 commits
    • Tom Tromey's avatar
      Add "name" method to class interp · d525a99b
      Tom Tromey authored
      In a review Pedro pointed out that interp::name is intended to be
      read-only, and so an accessor would be a better fit.  This patch
      renames the field and adds a "name" method that is used instead.
      
      ChangeLog
      2018-05-25  Tom Tromey  <tom@tromey.com>
      
      	* tui/tui.c (tui_enable): Update.
      	* mi/mi-interp.c (mi_interp::init): Update.
      	* interps.h (class interp) <name>: New method.
      	<m_name>: Rename from name.
      	(~scoped_restore_interp): Update.
      	* interps.c (interp::interp): Update.
      	(interp_add, interp_set, interp_lookup_existing)
      	(current_interp_named_p): Update.
      d525a99b
    • Tom Tromey's avatar
      Remove interp_name · da505cff
      Tom Tromey authored
      This removes the interp_name function.  It is only used a few spots --
      one of which was only calling it on "this".  It's simpler to remove
      it; and should class interp become opaque in the future, it will be
      just as easy to update the two remaining spots to use an accessor.
      
      ChangeLog
      2018-05-25  Tom Tromey	<tom@tromey.com>
      
      	* interps.c (interp_name): Remove.
      	* mi/mi-interp.c (mi_interp::init): Update.
      	* interps.h (interp_name): Remove.
      	(~scoped_restore_interp): Update.
      	* tui/tui.c (tui_enable): Update.
      da505cff
    • Tom Tromey's avatar
      Remove interp_ui_out · 29f94340
      Tom Tromey authored
      The function interp_ui_out simply calls the interp_ui_out method.
      However, if it is passed a NULL interpreter, it first finds the
      current interpreter.  I believe, though, that NULL is never passed
      here, and I think it's simpler to just remove this function and
      require callers to be more explicit.
      
      ChangeLog
      2018-05-25  Tom Tromey	<tom@tromey.com>
      
      	* utils.c (fputs_maybe_filtered): Update.
      	* linespec.c (decode_line_full): Update.
      	* mi/mi-interp.c (mi_on_normal_stop_1, mi_tsv_modified)
      	(mi_print_breakpoint_for_event, mi_solib_loaded)
      	(mi_solib_unloaded, mi_command_param_changed, mi_memory_changed)
      	(mi_user_selected_context_changed): Update.
      	* mi/mi-main.c (mi_execute_command): Update.
      	* cli/cli-script.c (execute_control_command): Update.
      	* python/python.c (execute_gdb_command): Update.
      	* solib.c (info_sharedlibrary_command): Update.
      	* interps.c (interp_ui_out): Remove.
      	* interps.h (interp_ui_out): Remove.
      29f94340
    • Tom Tromey's avatar
      Change the as_*_interp functions to use dynamic_cast · 716b8bc5
      Tom Tromey authored
      This changes the various as_*_interp functions to be implemented using
      dynamic_cast.  I believe this is a small improvement, because it is
      more typesafe -- the C++ runtime does the type-checking for us.
      
      ChangeLog
      2018-05-25  Tom Tromey  <tom@tromey.com>
      
      	* tui/tui-interp.c (as_tui_interp): Use dynamic_cast.
      	* mi/mi-interp.c (as_mi_interp): Use dynamic_cast.
      	* cli/cli-interp.c (as_cli_interp): Use dynamic_cast.
      716b8bc5
  8. 09 Apr, 2018 1 commit
    • Simon Marchi's avatar
      Remove VEC(tsv_s), use std::vector instead · c252925c
      Simon Marchi authored
      This patch removes VEC(tsv_s), using an std::vector instead.  I C++ified
      trace_state_variable a bit in the process, using std::string for the
      name.  I also thought it would be nicer to pass a const reference to
      target_download_trace_state_variable, since we know it will never be
      NULL.  This highlighted that the make-target-delegates script didn't
      handle references well, so I adjusted this as well.  It will surely be
      useful in the future.
      
      gdb/ChangeLog:
      
      	* tracepoint.h (struct trace_state_variable): Add constructor.
      	<name>: Change type to std::string.
      	* tracepoint.c (tsv_s): Remove.
      	(DEF_VEC_O(tsv_s)): Remove.
      	(tvariables): Change to std::vector.
      	(create_trace_state_variable): Adjust to std::vector.
      	(find_trace_state_variable): Likewise.
      	(find_trace_state_variable_by_number): Likewise.
      	(delete_trace_state_variable): Likewise.
      	(trace_variable_command): Adjust to std::string.
      	(delete_trace_variable_command): Likewise.
      	(tvariables_info_1): Adjust to std::vector.
      	(save_trace_state_variables): Likewise.
      	(start_tracing): Likewise.
      	(merge_uploaded_trace_state_variables): Adjust to std::vector
      	and std::string.
      	* target.h (struct target_ops)
      	<to_download_trace_state_variable>: Pass reference to
      	trace_state_variable.
      	* target-debug.h (target_debug_print_const_trace_state_variable_r): New.
      	* target-delegates.c: Re-generate.
      	* mi/mi-interp.c (mi_tsv_created): Adjust to std::string.
      	(mi_tsv_deleted): Likewise.
      	* mi/mi-main.c (mi_cmd_trace_frame_collected): Likewise.
      	* remote.c (remote_download_trace_state_variable): Change
      	pointer to reference and adjust.
      	* make-target-delegates (parse_argtypes): Handle references.
      	(write_function_header): Likewise.
      	(munge_type): Likewise.
      c252925c
  9. 19 Mar, 2018 1 commit
    • Tom Tromey's avatar
      Convert observers to C++ · 76727919
      Tom Tromey authored
      This converts observers from using a special source-generating script
      to be plain C++.  This version of the patch takes advantage of C++11
      by using std::function and variadic templates; incorporates Pedro's
      patches; and renames the header file to "observable.h" (this change
      eliminates the need for a clean rebuild).
      
      Note that Pedro's patches used a template lambda in tui-hooks.c, but
      this failed to compile on some buildbot instances (presumably due to
      differing C++ versions); I replaced this with an ordinary template
      function.
      
      Regression tested on the buildbot.
      
      gdb/ChangeLog
      2018-03-19  Pedro Alves  <palves@redhat.com>
      	    Tom Tromey  <tom@tromey.com>
      
      	* unittests/observable-selftests.c: New file.
      	* common/observable.h: New file.
      	* observable.h: New file.
      	* ada-lang.c, ada-tasks.c, agent.c, aix-thread.c, annotate.c,
      	arm-tdep.c, auto-load.c, auxv.c, break-catch-syscall.c,
      	breakpoint.c, bsd-uthread.c, cli/cli-interp.c, cli/cli-setshow.c,
      	corefile.c, dummy-frame.c, event-loop.c, event-top.c, exec.c,
      	extension.c, frame.c, gdbarch.c, guile/scm-breakpoint.c,
      	infcall.c, infcmd.c, inferior.c, inflow.c, infrun.c, jit.c,
      	linux-tdep.c, linux-thread-db.c, m68klinux-tdep.c,
      	mi/mi-cmd-break.c, mi/mi-interp.c, mi/mi-main.c, objfiles.c,
      	ppc-linux-nat.c, ppc-linux-tdep.c, printcmd.c, procfs.c,
      	python/py-breakpoint.c, python/py-finishbreakpoint.c,
      	python/py-inferior.c, python/py-unwind.c, ravenscar-thread.c,
      	record-btrace.c, record-full.c, record.c, regcache.c, remote.c,
      	riscv-tdep.c, sol-thread.c, solib-aix.c, solib-spu.c, solib.c,
      	spu-multiarch.c, spu-tdep.c, stack.c, symfile-mem.c, symfile.c,
      	symtab.c, thread.c, top.c, tracepoint.c, tui/tui-hooks.c,
      	tui/tui-interp.c, valops.c: Update all users.
      	* tui/tui-hooks.c (tui_bp_created_observer)
      	(tui_bp_deleted_observer, tui_bp_modified_observer)
      	(tui_inferior_exit_observer, tui_before_prompt_observer)
      	(tui_normal_stop_observer, tui_register_changed_observer):
      	Remove.
      	(tui_observers_token): New global.
      	(attach_or_detach, tui_attach_detach_observers): New functions.
      	(tui_install_hooks, tui_remove_hooks): Use
      	tui_attach_detach_observers.
      	* record-btrace.c (record_btrace_thread_observer): Remove.
      	(record_btrace_thread_observer_token): New global.
      	* observer.sh: Remove.
      	* observer.c: Rename to observable.c.
      	* observable.c (namespace gdb_observers): Define new objects.
      	(observer_debug): Move into gdb_observers namespace.
      	(struct observer, struct observer_list, xalloc_observer_list_node)
      	(xfree_observer_list_node, generic_observer_attach)
      	(generic_observer_detach, generic_observer_notify): Remove.
      	(_initialize_observer): Update.
      	Don't include observer.inc.
      	* Makefile.in (generated_files): Remove observer.h, observer.inc.
      	(clean mostlyclean): Likewise.
      	(observer.h, observer.inc): Remove targets.
      	(SUBDIR_UNITTESTS_SRCS): Add observable-selftests.c.
      	(COMMON_SFILES): Use observable.c, not observer.c.
      	* .gitignore: Remove observer.h.
      
      gdb/doc/ChangeLog
      2018-03-19  Tom Tromey  <tom@tromey.com>
      
      	* observer.texi: Remove.
      
      gdb/testsuite/ChangeLog
      2018-03-19  Tom Tromey  <tom@tromey.com>
      
      	* gdb.gdb/observer.exp: Remove.
      76727919
  10. 02 Jan, 2018 1 commit
  11. 05 Dec, 2017 1 commit
    • Simon Marchi's avatar
      Remove some unused variables · 798a7429
      Simon Marchi authored
      This patch removes some unused variables, found with -Wunused.  I have
      not removed everything reported by -Wunused, because some expressions
      such as
      
        struct type *arg_type = check_typedef (value_type);
      
      in bfin-tdep.c could have an unexpected but important side-effect.  I
      removed others that I considered more low-risk, such as:
      
        struct gdbarch *gdbarch = get_objfile_arch (objfile);
      
      I tested building with Python 2/Python 3/no Python, with/without expat,
      with/without libipt and with/without babeltrace.
      
      gdb/ChangeLog:
      
      	* ada-lang.c (ada_collect_symbol_completion_matches): Remove
      	unused variables.
      	(ada_is_redundant_range_encoding): Likewise.
      	* ada-varobj.c (ada_varobj_get_value_of_array_variable):
      	Likewise.
      	* alpha-tdep.c (alpha_software_single_step): Likewise.
      	* arm-tdep.c (_initialize_arm_tdep): Likewise.
      	* auto-load.c (info_auto_load_cmd): Likewise.
      	* break-catch-syscall.c (insert_catch_syscall): Likewise.
      	(remove_catch_syscall): Likewise.
      	* breakpoint.c (condition_completer): Likewise.
      	(clear_command): Likewise.
      	(update_breakpoint_locations): Likewise.
      	* btrace.c (btrace_disable): Likewise.
      	(btrace_teardown): Likewise.
      	(btrace_maint_update_pt_packets): Likewise.
      	(maint_btrace_clear_cmd): Likewise.
      	* cli/cli-decode.c (lookup_cmd_1): Likewise.
      	(lookup_cmd_composition): Likewise.
      	* cli/cli-dump.c (scan_filename): Likewise.
      	(restore_command): Likewise.
      	* compile/compile-loc2c.c (compute_stack_depth): Likewise.
      	* compile/compile-object-load.c (compile_object_load): Likewise.
      	* compile/compile-object-run.c (compile_object_run): Likewise.
      	* compile/compile.c (compile_to_object): Likewise.
      	* completer.c (filename_completer): Likewise.
      	(complete_files_symbols): Likewise.
      	(complete_expression): Likewise.
      	* corelow.c (core_open): Likewise.
      	* ctf.c (ctf_start): Likewise.
      	(ctf_write_status): Likewise.
      	(ctf_write_uploaded_tsv): Likewise.
      	(ctf_write_definition_end): Likewise.
      	(ctf_open_dir): Likewise.
      	(ctf_xfer_partial): Likewise.
      	(ctf_trace_find): Likewise.
      	* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
      	Likewise.
      	* dwarf2loc.c (allocate_piece_closure): Likewise.
      	(indirect_pieced_value): Likewise.
      	(dwarf2_evaluate_loc_desc_full): Likewise.
      	* dwarf2read.c (dw2_expand_marked_cus): Likewise.
      	(dw2_expand_symtabs_matching): Likewise.
      	(dw2_map_symbol_filenames): Likewise.
      	(read_and_check_comp_unit_head): Likewise.
      	(read_cutu_die_from_dwo): Likewise.
      	(lookup_dwo_unit): Likewise.
      	(read_comp_units_from_section): Likewise.
      	(dwarf2_compute_name): Likewise.
      	(handle_DW_AT_stmt_list): Likewise.
      	(create_cus_hash_table): Likewise.
      	(create_dwp_v2_section): Likewise.
      	(dwarf2_rnglists_process): Likewise.
      	(dwarf2_ranges_process): Likewise.
      	(dwarf2_record_block_ranges): Likewise.
      	(is_vtable_name): Likewise.
      	(read_formatted_entries): Likewise.
      	(skip_form_bytes): Likewise.
      	* elfread.c (elf_symtab_read): Likewise.
      	* exec.c (exec_file_command): Likewise.
      	* f-valprint.c (f_val_print): Likewise.
      	(info_common_command_for_block): Likewise.
      	* guile/guile.c (initialize_scheme_side): Likewise.
      	* guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Likewise.
      	* guile/scm-cmd.c (cmdscm_completer): Likewise.
      	(gdbscm_register_command_x): Likewise.
      	* guile/scm-frame.c (gdbscm_frame_read_var): Likewise.
      	* guile/scm-param.c (gdbscm_parameter_value): Likewise.
      	* guile/scm-ports.c (file_port_magic): Likewise.
      	* guile/scm-pretty-print.c (ppscm_search_pp_list): Likewise.
      	(ppscm_pretty_print_one_value): Likewise.
      	(ppscm_print_children): Likewise.
      	* guile/scm-string.c (gdbscm_string_to_argv): Likewise.
      	* guile/scm-symtab.c (gdbscm_sal_symtab): Likewise.
      	* guile/scm-type.c (gdbscm_type_next_field_x): Likewise.
      	* guile/scm-utils.c (gdbscm_parse_function_args): Likewise.
      	* i386-tdep.c (i386_register_reggroup_p): Likewise.
      	* infcmd.c (run_command_1): Likewise.
      	(until_next_fsm_clean_up): Likewise.
      	* linespec.c (linespec_complete): Likewise.
      	(find_label_symbols): Likewise.
      	* m2-valprint.c (m2_val_print): Likewise.
      	* memattr.c (require_user_regions): Likewise.
      	(lookup_mem_region): Likewise.
      	(disable_mem_command): Likewise.
      	(mem_delete): Likewise.
      	* mep-tdep.c (mep_register_name): Likewise.
      	(mep_analyze_prologue): Likewise.
      	* mi/mi-cmd-file.c (mi_cmd_file_list_shared_libraries): Likewise.
      	* mi/mi-interp.c (mi_on_sync_execution_done): Likewise.
      	* mi/mi-main.c (mi_cmd_trace_frame_collected): Likewise.
      	* microblaze-linux-tdep.c (microblaze_linux_init_abi): Likewise.
      	* minidebug.c (lzma_open): Likewise.
      	* minsyms.c (lookup_minimal_symbol): Likewise.
      	* mips-linux-tdep.c (mips64_fill_fpregset): Likewise.
      	* mips-tdep.c (mips_stub_frame_sniffer): Likewise.
      	(mips_o64_return_value): Likewise.
      	(mips_single_step_through_delay): Likewise.
      	(_initialize_mips_tdep): Likewise.
      	* nios2-tdep.c (nios2_push_dummy_call): Likewise.
      	(nios2_software_single_step): Likewise.
      	* parse.c (find_minsym_type_and_address): Likewise.
      	* psymtab.c (psym_relocate): Likewise.
      	* python/py-breakpoint.c (bppy_get_commands): Likewise.
      	(gdbpy_breakpoint_modified): Likewise.
      	* python/py-infevents.c (create_inferior_call_event_object):
      	Likewise.
      	* python/py-record-btrace.c (btpy_list_item): Likewise.
      	* python/py-type.c (typy_str): Likewise.
      	* python/py-value.c (valpy_call): Likewise.
      	* python/python.c (do_start_initialization): Likewise.
      	* record-btrace.c (record_btrace_insn_history_range): Likewise.
      	(record_btrace_call_history_range): Likewise.
      	(record_btrace_record_method): Likewise.
      	(record_btrace_xfer_partial): Likewise.
      	(btrace_get_frame_function): Likewise.
      	* record-full.c (record_full_open): Likewise.
      	* record.c (get_context_size): Likewise.
      	* registry.h (DEFINE_REGISTRY): Likewise.
      	* remote-fileio.c (remote_fileio_request): Likewise.
      	* remote.c (remote_update_thread_list): Likewise.
      	(remote_check_symbols): Likewise.
      	(remote_commit_resume): Likewise.
      	(remote_interrupt): Likewise.
      	(remote_insert_breakpoint): Likewise.
      	(compare_sections_command): Likewise.
      	* rust-exp.y (super_name): Likewise.
      	(lex_string): Likewise.
      	(convert_ast_to_type): Likewise.
      	(convert_ast_to_expression): Likewise.
      	* rust-lang.c (rust_print_struct_def): Likewise.
      	(rust_print_type): Likewise.
      	(rust_evaluate_subexp): Likewise.
      	* rx-tdep.c (rx_register_type): Likewise.
      	* ser-event.c (serial_event_clear): Likewise.
      	* serial.c (serial_open): Likewise.
      	* spu-tdep.c (spu_overlay_new_objfile): Likewise.
      	* symfile.c (section_is_overlay): Likewise.
      	(overlay_unmapped_address): Likewise.
      	(overlay_mapped_address): Likewise.
      	(simple_overlay_update_1): Likewise.
      	(simple_overlay_update): Likewise.
      	* symtab.c (symbol_find_demangled_name): Likewise.
      	(search_symbols): Likewise.
      	* target-descriptions.c (tdesc_predefined_type): Likewise.
      	* target.c (target_commit_resume): Likewise.
      	* thread.c (print_selected_thread_frame): Likewise.
      	* top.c (new_ui_command): Likewise.
      	(gdb_readline_no_editing): Likewise.
      	* tracefile-tfile.c (tfile_open): Likewise.
      	* tracepoint.c (create_tsv_from_upload): Likewise.
      	* utils.c (quit): Likewise.
      	(defaulted_query): Likewise.
      	* valarith.c (value_concat): Likewise.
      	* xml-syscall.c (xml_list_syscalls_by_group): Likewise.
      	* xml-tdesc.c (target_fetch_description_xml): Likewise.
      	* xtensa-tdep.c (xtensa_pseudo_register_read): Likewise.
      	(xtensa_pseudo_register_write): Likewise.
      
      gdb/gdbserver/ChangeLog:
      
      	* regcache.c (registers_to_string): Remove unused variable.
      798a7429
  12. 10 Oct, 2017 1 commit
    • Pedro Alves's avatar
      Eliminate catch_exceptions/catch_exceptions_with_msg · 65630365
      Pedro Alves authored
      This patch gets rid of catch_exceptions / catch_exceptions_with_msg.
      The latter is done mostly by getting rid of the three remaining
      vestigial libgdb wrapper functions, which are really pointless
      nowadays.  This results in a good number of simplifications.
      
      (I checked that Insight doesn't use those functions.)
      
      The gdb.mi/mi-pthreads.exp change is necessary because this actually
      fixes a bug, IMO -- the patch stops MI's -thread-select causing output
      on the CLI stream.
      
      I.e., before:
       -thread-select 123456789
       &"Thread ID 123456789 not known.\n"
       ^error,msg="Thread ID 123456789 not known."
       (gdb)
      
      After:
       -thread-select 123456789
       ^error,msg="Thread ID 123456789 not known."
       (gdb)
      
      gdb/ChangeLog
      2017-10-10  Pedro Alves <palves@redhat.com>
      	    Tom Tromey  <tom@tromey.com>
      
      	* breakpoint.c (struct captured_breakpoint_query_args)
      	(do_captured_breakpoint_query, gdb_breakpoint_query): Delete.
      	(print_breakpoint): New.
      	* breakpoint.h (print_breakpoint): Declare.
      	* common/common-exceptions.h (enum return_reason): Remove
      	references to catch_exceptions.
      	* exceptions.c (catch_exceptions, catch_exceptions_with_msg):
      	Delete.
      	* exceptions.h (catch_exceptions_ftype, catch_exceptions)
      	(catch_exception_ftype, catch_exceptions_with_msg): Delete.
      	* gdb.h: Delete.
      	* gdbthread.h (thread_select): Declare.
      	* mi/mi-cmd-break.c: Don't include gdb.h.
      	(breakpoint_notify): Use print_breakpoint.
      	* mi/mi-cmd-catch.c: Don't include gdb.h.
      	* mi/mi-interp.c: Don't include gdb.h.
      	(mi_print_breakpoint_for_event): New.
      	(mi_breakpoint_created, mi_breakpoint_modified): Use
      	mi_print_breakpoint_for_event.
      	* mi/mi-main.c: Don't include gdb.h.
      	(mi_cmd_thread_select): Parse the global thread ID here.  Use
      	thread_select instead of gdb_thread_select.
      	(mi_cmd_thread_list_ids): Output "thread-ids" tuple here instead
      	of using gdb_list_thread_ids.
      	* remote-fileio.c (do_remote_fileio_request): Change type.  Reply
      	FILEIO_ENOSYS here.
      	(remote_fileio_request): Use TRY/CATCH instead of
      	catch_exceptions.
      	* symfile-mem.c (struct symbol_file_add_from_memory_args)
      	(symbol_file_add_from_memory_wrapper): Delete.
      	(add_vsyscall_page): Use TRY/CATCH instead of catch_exceptions.
      	* thread.c: Don't include gdb.h.
      	(do_captured_list_thread_ids, gdb_list_thread_ids): Delete.
      	(thread_alive): Use thread_select.
      	(do_captured_thread_select): Delete, parts salvaged as ...
      	(thread_select): ... this new function.
      	(gdb_thread_select): Delete.
      
      gdb/testsuite/ChangeLog
      2017-10-10  Pedro Alves <palves@redhat.com>
      
      	* gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Don't
      	expect CLI output.
      65630365
  13. 20 Sep, 2017 1 commit
    • Tom Tromey's avatar
      Remove make_cleanup_restore_target_terminal · 223ffa71
      Tom Tromey authored
      This removes make_cleanup_restore_target_terminal and generally
      C++-ifies target terminal handling.  It changes all target_terminal_*
      functions to be static members of a new target_terminal class and
      changes the cleanup to be a scoped_* class.
      make_cleanup_override_quit_handler is also removed in favor of simply
      using scoped_restore.
      
      Note that there are some files in this patch that I could not compile.
      Considering that some of the rewrites were automated, and that none of
      these files involed cleanups, I feel that this is relatively safe.
      
      Regression tested by the buildbot.
      
      gdb/ChangeLog
      2017-09-20  Tom Tromey  <tom@tromey.com>
      
      	* windows-nat.c (get_windows_debug_event, windows_wait)
      	(do_initial_windows_stuff, windows_attach): Update.
      	* utils.c (vwarning, internal_vproblem): Update.
      	(ui_unregister_input_event_handler_cleanup)
      	(prepare_to_handle_input): Remove.
      	(class scoped_input_handler): New.
      	(defaulted_query, prompt_for_continue): Update.
      	* tui/tui-hooks.c (tui_refresh_frame_and_register_information):
      	Update.
      	* top.c (undo_terminal_modifications_before_exit): Update.
      	* target/target.h (target_terminal_init, target_terminal_inferior)
      	(target_terminal_ours): Don't declare.
      	(class target_terminal): New.
      	* target.h (target_terminal_is_inferior, target_terminal_is_ours)
      	(target_terminal_ours_for_output)
      	(make_cleanup_restore_target_terminal): Don't declare.
      	(target_terminal_info): Remove.
      	* target.c (enum terminal_state, terminal_state): Remove.
      	(target_terminal::terminal_state): Define.
      	(target_terminal::init): Rename from target_terminal_init.
      	(target_terminal::inferior): Rename from
      	target_terminal_inferior.
      	(target_terminal::ours): Rename from target_terminal_ours.
      	(target_terminal::ours_for_output): Rename from
      	target_terminal_ours_for_output.
      	(target_terminal::info): New method.
      	(cleanup_restore_target_terminal)
      	(make_cleanup_restore_target_terminal): Remove.
      	* solib.c (handle_solib_event): Update.
      	* remote.c (remote_serial_quit_handler): Update.
      	(remote_terminal_inferior, remote_wait_as): Update.
      	* record-full.c (record_full_wait_1): Update.
      	* nto-procfs.c (procfs_create_inferior): Update.
      	* nat/fork-inferior.c (startup_inferior): Update.
      	* mi/mi-interp.c (mi_new_thread, mi_thread_exit)
      	(mi_record_changed, mi_inferior_added, mi_inferior_appeared)
      	(mi_inferior_exit, mi_inferior_removed, mi_traceframe_changed)
      	(mi_tsv_created, mi_tsv_deleted, mi_tsv_modified)
      	(mi_breakpoint_created, mi_breakpoint_deleted)
      	(mi_breakpoint_modified, mi_on_resume, mi_solib_loaded)
      	(mi_solib_unloaded, mi_command_param_changed, mi_memory_changed)
      	(mi_user_selected_context_changed, report_initial_inferior):
      	Update.
      	* linux-nat.c (linux_nat_attach, linux_nat_terminal_ours)
      	(linux_nat_terminal_inferior): Update.
      	* infrun.c (follow_fork_inferior)
      	(handle_vfork_child_exec_or_exit, do_target_resume)
      	(check_curr_ui_sync_execution_done, handle_inferior_event_1)
      	(handle_signal_stop, maybe_remove_breakpoints, normal_stop):
      	Update.
      	* inflow.c (child_terminal_init, info_terminal_command): Update.
      	* infcmd.c (post_create_inferior, continue_1, prepare_one_step)
      	(attach_command): Update.
      	* infcall.c (call_thread_fsm_should_stop): Update.
      	* gnu-nat.c (gnu_attach): Update.
      	* extension.c (struct active_ext_lang_state)
      	(restore_active_ext_lang): Update.
      	* exceptions.c (print_flush): Update.
      	* event-top.c (async_enable_stdin, default_quit_handler): Update.
      	(struct quit_handler_cleanup_data, restore_quit_handler)
      	(restore_quit_handler_dtor, make_cleanup_override_quit_handler):
      	Remove.
      	* cp-support.c (gdb_demangle): Update.
      	* breakpoint.c (update_inserted_breakpoint_locations)
      	(insert_breakpoint_locations, handle_jit_event)
      	(disable_breakpoints_in_unloaded_shlib): Update.
      	* annotate.c (annotate_breakpoints_invalid)
      	(annotate_frames_invalid): Update.
      
      gdb/gdbserver/ChangeLog
      2017-09-20  Tom Tromey  <tom@tromey.com>
      
      	* target.c (target_terminal::terminal_state): Define.
      	(target_terminal::init): Rename from target_terminal_init.
      	(target_terminal::inferior): Rename from
      	target_terminal_inferior.
      	(target_terminal::ours): Rename from target_terminal_ours.
      	(target_terminal::ours_for_output, target_terminal::info): New.
      223ffa71
  14. 09 Sep, 2017 2 commits
    • Tom Tromey's avatar
      Remove make_cleanup_ui_out_redirect_pop · ca5909c7
      Tom Tromey authored
      This patch introduces ui_out_redirect_pop.  All uses of
      make_cleanup_ui_out_redirect_pop are replaced with this new class.
      
      ChangeLog
      2017-09-09  Tom Tromey  <tom@tromey.com>
      
      	* mi/mi-interp.c (mi_user_selected_context_changed): Use
      	ui_out_redirect_pop.
      	* guile/scm-ports.c (ioscm_with_output_to_port_worker): Use
      	ui_out_redirect_pop.
      	* utils.c (do_ui_out_redirect_pop)
      	(make_cleanup_ui_out_redirect_pop): Remove.
      	* top.c (execute_command_to_string): Use ui_out_redirect_pop.
      	* utils.h (make_cleanup_ui_out_redirect_pop): Remove.
      	* ui-out.h (ui_out_redirect_pop): New class.
      ca5909c7
    • John Baldwin's avatar
      Remove unnecessary function prototypes. · 481695ed
      John Baldwin authored
      These prototypes were required when compiling GDB as C but are not
      required for C++.
      
      gdb/ChangeLog:
      
      	* aarch64-linux-nat.c: Remove _initialize_aarch64_linux_nat
      	prototype.
      	* aarch64-linux-tdep.c: Remove _initialize_aarch64_linux_tdep
      	prototype.
      	* aarch64-newlib-tdep.c: Remove _initialize_aarch64_newlib_tdep
      	prototype.
      	* aarch64-tdep.c: Remove _initialize_aarch64_tdep prototype.
      	* ada-exp.y: Remove _initialize_ada_exp prototype.
      	* ada-lang.c: Remove _initialize_ada_language prototype.
      	* ada-tasks.c: Remove _initialize_tasks prototype.
      	* addrmap.c: Remove _initialize_addrmap prototype.
      	* agent.c: Remove _initialize_agent prototype.
      	* aix-thread.c: Remove _initialize_aix_thread prototype.
      	* alpha-bsd-nat.c: Remove _initialize_alphabsd_nat prototype.
      	* alpha-linux-nat.c: Remove _initialize_alpha_linux_nat prototype.
      	* alpha-linux-tdep.c: Remove _initialize_alpha_linux_tdep
      	prototype.
      	* alpha-nbsd-tdep.c: Remove _initialize_alphanbsd_tdep prototype.
      	* alpha-obsd-tdep.c: Remove _initialize_alphaobsd_tdep prototype.
      	* alpha-tdep.c: Remove _initialize_alpha_tdep prototype.
      	* amd64-darwin-tdep.c: Remove _initialize_amd64_darwin_tdep
      	prototype.
      	* amd64-dicos-tdep.c: Remove _initialize_amd64_dicos_tdep
      	prototype.
      	* amd64-fbsd-nat.c: Remove _initialize_amd64fbsd_nat prototype.
      	* amd64-fbsd-tdep.c: Remove _initialize_amd64fbsd_tdep prototype.
      	* amd64-linux-nat.c: Remove _initialize_amd64_linux_nat prototype.
      	* amd64-linux-tdep.c: Remove _initialize_amd64_linux_tdep
      	prototype.
      	* amd64-nbsd-nat.c: Remove _initialize_amd64nbsd_nat prototype.
      	* amd64-nbsd-tdep.c: Remove _initialize_amd64nbsd_tdep prototype.
      	* amd64-obsd-nat.c: Remove _initialize_amd64obsd_nat prototype.
      	* amd64-obsd-tdep.c: Remove _initialize_amd64obsd_tdep prototype.
      	* amd64-sol2-tdep.c: Remove _initialize_amd64_sol2_tdep prototype.
      	* amd64-tdep.c: Remove _initialize_amd64_tdep prototype.
      	* amd64-windows-nat.c: Remove _initialize_amd64_windows_nat
      	prototype.
      	* amd64-windows-tdep.c: Remove _initialize_amd64_windows_tdep
      	prototype.
      	* annotate.c: Remove _initialize_annotate prototype.
      	* arc-newlib-tdep.c: Remove _initialize_arc_newlib_tdep prototype.
      	* arc-tdep.c: Remove _initialize_arc_tdep prototype.
      	* arch-utils.c: Remove _initialize_gdbarch_utils prototype.
      	* arm-linux-nat.c: Remove _initialize_arm_linux_nat prototype.
      	* arm-linux-tdep.c: Remove _initialize_arm_linux_tdep prototype.
      	* arm-nbsd-tdep.c: Remove _initialize_arm_netbsd_tdep prototype.
      	* arm-obsd-tdep.c: Remove _initialize_armobsd_tdep prototype.
      	* arm-symbian-tdep.c: Remove _initialize_arm_symbian_tdep
      	prototype.
      	* arm-tdep.c: Remove _initialize_arm_tdep prototype.
      	* arm-wince-tdep.c: Remove _initialize_arm_wince_tdep prototype.
      	* auto-load.c: Remove _initialize_auto_load prototype.
      	* auxv.c: Remove _initialize_auxv prototype.
      	* avr-tdep.c: Remove _initialize_avr_tdep prototype.
      	* ax-gdb.c: Remove _initialize_ax_gdb prototype.
      	* bfin-linux-tdep.c: Remove _initialize_bfin_linux_tdep prototype.
      	* bfin-tdep.c: Remove _initialize_bfin_tdep prototype.
      	* break-catch-sig.c: Remove _initialize_break_catch_sig prototype.
      	* break-catch-syscall.c: Remove _initialize_break_catch_syscall
      	prototype.
      	* break-catch-throw.c: Remove _initialize_break_catch_throw
      	prototype.
      	* breakpoint.c: Remove _initialize_breakpoint prototype.
      	* bsd-uthread.c: Remove _initialize_bsd_uthread prototype.
      	* btrace.c: Remove _initialize_btrace prototype.
      	* charset.c: Remove _initialize_charset prototype.
      	* cli/cli-cmds.c: Remove _initialize_cli_cmds prototype.
      	* cli/cli-dump.c: Remove _initialize_cli_dump prototype.
      	* cli/cli-interp.c: Remove _initialize_cli_interp prototype.
      	* cli/cli-logging.c: Remove _initialize_cli_logging prototype.
      	* cli/cli-script.c: Remove _initialize_cli_script prototype.
      	* coff-pe-read.c: Remove _initialize_coff_pe_read prototype.
      	* coffread.c: Remove _initialize_coffread prototype.
      	* compile/compile.c: Remove _initialize_compile prototype.
      	* complaints.c: Remove _initialize_complaints prototype.
      	* completer.c: Remove _initialize_completer prototype.
      	* copying.awk: Remove _initialize_copying prototype.
      	* copying.c: Regenerate.
      	* core-regset.c: Remove _initialize_core_regset prototype.
      	* corefile.c: Remove _initialize_core prototype.
      	* corelow.c: Remove _initialize_corelow prototype.
      	* cp-abi.c: Remove _initialize_cp_abi prototype.
      	* cp-namespace.c: Remove _initialize_cp_namespace prototype.
      	* cp-support.c: Remove _initialize_cp_support prototype.
      	* cp-valprint.c: Remove _initialize_cp_valprint prototype.
      	* cris-linux-tdep.c: Remove _initialize_cris_linux_tdep prototype.
      	* cris-tdep.c: Remove _initialize_cris_tdep prototype.
      	* ctf.c: Remove _initialize_ctf prototype.
      	* d-lang.c: Remove _initialize_d_language prototype.
      	* darwin-nat-info.c: Remove _initialize_darwin_info_commands
      	prototype.
      	* darwin-nat.c: Remove _initialize_darwin_inferior prototype.
      	* dbxread.c: Remove _initialize_dbxread prototype.
      	* dcache.c: Remove _initialize_dcache prototype.
      	* demangle.c: Remove _initialize_demangler prototype.
      	* disasm-selftests.c: Remove _initialize_disasm_selftests
      	prototype.
      	* disasm.c: Remove _initialize_disasm prototype.
      	* dtrace-probe.c: Remove _initialize_dtrace_probe prototype.
      	* dummy-frame.c: Remove _initialize_dummy_frame prototype.
      	* dwarf2-frame-tailcall.c: Remove _initialize_tailcall_frame
      	prototype.
      	* dwarf2-frame.c: Remove _initialize_dwarf2_frame prototype.
      	* dwarf2expr.c: Remove _initialize_dwarf2expr prototype.
      	* dwarf2loc.c: Remove _initialize_dwarf2loc prototype.
      	* dwarf2read.c: Remove _initialize_dwarf2_read prototype.
      	* elfread.c: Remove _initialize_elfread prototype.
      	* exec.c: Remove _initialize_exec prototype.
      	* extension.c: Remove _initialize_extension prototype.
      	* f-lang.c: Remove _initialize_f_language prototype.
      	* f-valprint.c: Remove _initialize_f_valprint prototype.
      	* fbsd-nat.c: Remove _initialize_fbsd_nat prototype.
      	* fbsd-tdep.c: Remove _initialize_fbsd_tdep prototype.
      	* filesystem.c: Remove _initialize_filesystem prototype.
      	* findcmd.c: Remove _initialize_mem_search prototype.
      	* fork-child.c: Remove _initialize_fork_child prototype.
      	* frame-base.c: Remove _initialize_frame_base prototype.
      	* frame-unwind.c: Remove _initialize_frame_unwind prototype.
      	* frame.c: Remove _initialize_frame prototype.
      	* frv-linux-tdep.c: Remove _initialize_frv_linux_tdep prototype.
      	* frv-tdep.c: Remove _initialize_frv_tdep prototype.
      	* ft32-tdep.c: Remove _initialize_ft32_tdep prototype.
      	* gcore.c: Remove _initialize_gcore prototype.
      	* gdb_bfd.c: Remove _initialize_gdb_bfd prototype.
      	* gdbarch.c: Regenerate.
      	* gdbarch.sh: Remove _initialize_gdbarch prototype.
      	* gdbtypes.c: Remove _initialize_gdbtypes prototype.
      	* gnu-nat.c: Remove _initialize_gnu_nat prototype.
      	* gnu-v2-abi.c: Remove _initialize_gnu_v2_abi prototype.
      	* gnu-v3-abi.c: Remove _initialize_gnu_v3_abi prototype.
      	* go-lang.c: Remove _initialize_go_language prototype.
      	* go32-nat.c: Remove _initialize_go32_nat prototype.
      	* guile/guile.c: Remove _initialize_guile prototype.
      	* h8300-tdep.c: Remove _initialize_h8300_tdep prototype.
      	* hppa-linux-nat.c: Remove _initialize_hppa_linux_nat prototype.
      	* hppa-linux-tdep.c: Remove _initialize_hppa_linux_tdep prototype.
      	* hppa-nbsd-nat.c: Remove _initialize_hppanbsd_nat prototype.
      	* hppa-nbsd-tdep.c: Remove _initialize_hppanbsd_tdep prototype.
      	* hppa-obsd-nat.c: Remove _initialize_hppaobsd_nat prototype.
      	* hppa-obsd-tdep.c: Remove _initialize_hppaobsd_tdep prototype.
      	* hppa-tdep.c: Remove _initialize_hppa_tdep prototype.
      	* i386-bsd-nat.c: Remove _initialize_i386bsd_nat prototype.
      	* i386-cygwin-tdep.c: Remove _initialize_i386_cygwin_tdep
      	prototype.
      	* i386-darwin-tdep.c: Remove _initialize_i386_darwin_tdep
      	prototype.
      	* i386-dicos-tdep.c: Remove _initialize_i386_dicos_tdep prototype.
      	* i386-fbsd-nat.c: Remove _initialize_i386fbsd_nat prototype.
      	* i386-fbsd-tdep.c: Remove _initialize_i386fbsd_tdep prototype.
      	* i386-gnu-nat.c: Remove _initialize_i386gnu_nat prototype.
      	* i386-gnu-tdep.c: Remove _initialize_i386gnu_tdep prototype.
      	* i386-linux-nat.c: Remove _initialize_i386_linux_nat prototype.
      	* i386-linux-tdep.c: Remove _initialize_i386_linux_tdep prototype.
      	* i386-nbsd-nat.c: Remove _initialize_i386nbsd_nat prototype.
      	* i386-nbsd-tdep.c: Remove _initialize_i386nbsd_tdep prototype.
      	* i386-nto-tdep.c: Remove _initialize_i386nto_tdep prototype.
      	* i386-obsd-nat.c: Remove _initialize_i386obsd_nat prototype.
      	* i386-obsd-tdep.c: Remove _initialize_i386obsd_tdep prototype.
      	* i386-sol2-nat.c: Remove _initialize_amd64_sol2_nat prototype.
      	* i386-sol2-tdep.c: Remove _initialize_amd64_sol2_tdep prototype.
      	* i386-tdep.c: Remove _initialize_i386_tdep prototype.
      	* i386-windows-nat.c: Remove _initialize_i386_windows_nat
      	prototype.
      	* ia64-libunwind-tdep.c: Remove _initialize_libunwind_frame
      	prototype.
      	* ia64-linux-nat.c: Remove _initialize_ia64_linux_nat prototype.
      	* ia64-linux-tdep.c: Remove _initialize_ia64_linux_tdep prototype.
      	* ia64-tdep.c: Remove _initialize_ia64_tdep prototype.
      	* ia64-vms-tdep.c: Remove _initialize_ia64_vms_tdep prototype.
      	* infcall.c: Remove _initialize_infcall prototype.
      	* infcmd.c: Remove _initialize_infcmd prototype.
      	* inferior.c: Remove _initialize_inferiors prototype.
      	* inflow.c: Remove _initialize_inflow prototype.
      	* infrun.c: Remove _initialize_infrun prototype.
      	* interps.c: Remove _initialize_interpreter prototype.
      	* iq2000-tdep.c: Remove _initialize_iq2000_tdep prototype.
      	* jit.c: Remove _initialize_jit prototype.
      	* language.c: Remove _initialize_language prototype.
      	* linux-fork.c: Remove _initialize_linux_fork prototype.
      	* linux-nat.c: Remove _initialize_linux_nat prototype.
      	* linux-tdep.c: Remove _initialize_linux_tdep prototype.
      	* linux-thread-db.c: Remove _initialize_thread_db prototype.
      	* lm32-tdep.c: Remove _initialize_lm32_tdep prototype.
      	* m2-lang.c: Remove _initialize_m2_language prototype.
      	* m32c-tdep.c: Remove _initialize_m32c_tdep prototype.
      	* m32r-linux-nat.c: Remove _initialize_m32r_linux_nat prototype.
      	* m32r-linux-tdep.c: Remove _initialize_m32r_linux_tdep prototype.
      	* m32r-tdep.c: Remove _initialize_m32r_tdep prototype.
      	* m68hc11-tdep.c: Remove _initialize_m68hc11_tdep prototype.
      	* m68k-bsd-nat.c: Remove _initialize_m68kbsd_nat prototype.
      	* m68k-bsd-tdep.c: Remove _initialize_m68kbsd_tdep prototype.
      	* m68k-linux-nat.c: Remove _initialize_m68k_linux_tdep prototype.
      	* m68k-linux-tdep.c: Remove _initialize_m68k_linux_tdep prototype.
      	* m68k-tdep.c: Remove _initialize_m68k_tdep prototype.
      	* m88k-bsd-nat.c: Remove _initialize_m68kbsd_nat prototype.
      	* m88k-tdep.c: Remove _initialize_m68kbsd_tdep prototype.
      	* machoread.c: Remove _initialize_machoread prototype.
      	* macrocmd.c: Remove _initialize_macrocmd prototype.
      	* macroscope.c: Remove _initialize_macroscope prototype.
      	* maint.c: Remove _initialize_maint_cmds prototype.
      	* mdebugread.c: Remove _initialize_mdebugread prototype.
      	* memattr.c: Remove _initialize_mem prototype.
      	* mep-tdep.c: Remove _initialize_mep_tdep prototype.
      	* mi/mi-cmd-env.c: Remove _initialize_mi_cmd_env prototype.
      	* mi/mi-cmds.c: Remove _initialize_mi_cmds prototype.
      	* mi/mi-interp.c: Remove _initialize_mi_interp prototype.
      	* mi/mi-main.c: Remove _initialize_mi_main prototype.
      	* microblaze-linux-tdep.c: Remove
      	_initialize_microblaze_linux_tdep prototype.
      	* microblaze-tdep.c: Remove _initialize_microblaze_tdep prototype.
      	* mips-fbsd-nat.c: Remove _initialize_mips_fbsd_nat prototype.
      	* mips-fbsd-tdep.c: Remove _initialize_mips_fbsd_tdep prototype.
      	* mips-linux-nat.c: Remove _initialize_mips_linux_nat prototype.
      	* mips-linux-tdep.c: Remove _initialize_mips_linux_tdep prototype.
      	* mips-nbsd-nat.c: Remove _initialize_mipsnbsd_nat prototype.
      	* mips-nbsd-tdep.c: Remove _initialize_mipsnbsd_tdep prototype.
      	* mips-sde-tdep.c: Remove _initialize_mips_sde_tdep prototype.
      	* mips-tdep.c: Remove _initialize_mips_tdep prototype.
      	* mips64-obsd-nat.c: Remove _initialize_mips64obsd_nat prototype.
      	* mips64-obsd-tdep.c: Remove _initialize_mips64obsd_tdep
      	prototype.
      	* mipsread.c: Remove _initialize_mipsread prototype.
      	* mn10300-linux-tdep.c: Remove _initialize_mn10300_linux_tdep
      	prototype.
      	* mn10300-tdep.c: Remove _initialize_mn10300_tdep prototype.
      	* moxie-tdep.c: Remove _initialize_moxie_tdep prototype.
      	* msp430-tdep.c: Remove _initialize_msp430_tdep prototype.
      	* mt-tdep.c: Remove _initialize_mt_tdep prototype.
      	* nds32-tdep.c: Remove _initialize_nds32_tdep prototype.
      	* nios2-linux-tdep.c: Remove _initialize_nios2_linux_tdep
      	prototype.
      	* nios2-tdep.c: Remove _initialize_nios2_tdep prototype.
      	* nto-procfs.c: Remove _initialize_procfs prototype.
      	* nto-tdep.c: Remove _initialize_nto_tdep prototype.
      	* objc-lang.c: Remove _initialize_objc_language prototype.
      	* objfiles.c: Remove _initialize_objfiles prototype.
      	* observer.c: Remove observer_test_first_notification_function,
      	observer_test_second_notification_function,
      	observer_test_third_notification_function, and
      	_initialize_observer prototypes.
      	* opencl-lang.c: Remove _initialize_opencl_language prototypes.
      	* osabi.c: Remove _initialize_gdb_osabi prototype.
      	* osdata.c: Remove _initialize_osdata prototype.
      	* p-valprint.c: Remove _initialize_pascal_valprint prototype.
      	* parse.c: Remove _initialize_parse prototype.
      	* ppc-fbsd-nat.c: Remove _initialize_ppcfbsd_nat prototype.
      	* ppc-fbsd-tdep.c: Remove _initialize_ppcfbsd_tdep prototype.
      	* ppc-linux-nat.c: Remove _initialize_ppc_linux_nat prototype.
      	* ppc-linux-tdep.c: Remove _initialize_ppc_linux_tdep prototype.
      	* ppc-nbsd-nat.c: Remove _initialize_ppcnbsd_nat prototype.
      	* ppc-nbsd-tdep.c: Remove _initialize_ppcnbsd_tdep prototype.
      	* ppc-obsd-nat.c: Remove _initialize_ppcobsd_nat prototype.
      	* ppc-obsd-tdep.c: Remove _initialize_ppcobsd_tdep prototype.
      	* printcmd.c: Remove _initialize_printcmd prototype.
      	* probe.c: Remove _initialize_probe prototype.
      	* proc-api.c: Remove _initialize_proc_api prototype.
      	* proc-events.c: Remove _initialize_proc_events prototype.
      	* proc-service.c: Remove _initialize_proc_service prototype.
      	* procfs.c: Remove _initialize_procfs prototype.
      	* psymtab.c: Remove _initialize_psymtab prototype.
      	* python/python.c: Remove _initialize_python prototype.
      	* ravenscar-thread.c: Remove _initialize_ravenscar prototype.
      	* record-btrace.c: Remove _initialize_record_btrace prototype.
      	* record-full.c: Remove _initialize_record_full prototype.
      	* record.c: Remove _initialize_record prototype.
      	* regcache.c: Remove _initialize_regcache prototype.
      	* reggroups.c: Remove _initialize_reggroup prototype.
      	* remote-notif.c: Remove _initialize_notif prototype.
      	* remote-sim.c: Remove _initialize_remote_sim prototype.
      	* remote.c: Remove _initialize_remote prototype.
      	* reverse.c: Remove _initialize_reverse prototype.
      	* rl78-tdep.c: Remove _initialize_rl78_tdep prototype.
      	* rs6000-aix-tdep.c: Remove _initialize_rs6000_aix_tdep prototype.
      	* rs6000-lynx178-tdep.c: Remove _initialize_rs6000_lynx178_tdep
      	prototype.
      	* rs6000-nat.c: Remove _initialize_rs6000_nat prototype.
      	* rs6000-tdep.c: Remove _initialize_rs6000_tdep prototype.
      	* rust-exp.y: Remove _initialize_rust_exp prototype.
      	* rx-tdep.c: Remove _initialize_rx_tdep prototype.
      	* s390-linux-nat.c: Remove _initialize_s390_nat prototype.
      	* s390-linux-tdep.c: Remove _initialize_s390_tdep prototype.
      	* score-tdep.c: Remove _initialize_score_tdep prototype.
      	* selftest-arch.c: Remove _initialize_selftests_foreach_arch
      	prototype.
      	* ser-go32.c: Remove _initialize_ser_dos prototype.
      	* ser-mingw.c: Remove _initialize_ser_windows prototype.
      	* ser-pipe.c: Remove _initialize_ser_pipe prototype.
      	* ser-tcp.c: Remove _initialize_ser_tcp prototype.
      	* ser-unix.c: Remove _initialize_ser_hardwire prototype.
      	* serial.c: Remove _initialize_serial prototype.
      	* sh-linux-tdep.c: Remove _initialize_sh_linux_tdep prototype.
      	* sh-nbsd-nat.c: Remove _initialize_shnbsd_nat prototype.
      	* sh-nbsd-tdep.c: Remove _initialize_shnbsd_tdep prototype.
      	* sh-tdep.c: Remove _initialize_sh_tdep prototype.
      	* skip.c: Remove _initialize_step_skip prototype.
      	* sol-thread.c: Remove _initialize_sol_thread prototype.
      	* solib-aix.c: Remove _initialize_solib_aix prototype.
      	* solib-darwin.c: Remove _initialize_darwin_solib prototype.
      	* solib-dsbt.c: Remove _initialize_dsbt_solib prototype.
      	* solib-frv.c: Remove _initialize_frv_solib prototype.
      	* solib-spu.c: Remove _initialize_spu_solib prototype.
      	* solib-svr4.c: Remove _initialize_svr4_solib prototype.
      	* solib-target.c: Remove _initialize_solib_target prototype.
      	* solib.c: Remove _initialize_solib prototype.
      	* source.c: Remove _initialize_source prototype.
      	* sparc-linux-nat.c: Remove _initialize_sparc_linux_nat prototype.
      	* sparc-linux-tdep.c: Remove _initialize_sparc_linux_tdep
      	prototype.
      	* sparc-nat.c: Remove _initialize_sparc_nat prototype.
      	* sparc-nbsd-nat.c: Remove _initialize_sparcnbsd_nat prototype.
      	* sparc-nbsd-tdep.c: Remove _initialize_sparcnbsd_tdep prototype.
      	* sparc-obsd-tdep.c: Remove _initialize_sparc32obsd_tdep
      	prototype.
      	* sparc-sol2-nat.c: Remove _initialize_sparc_sol2_nat prototype.
      	* sparc-sol2-tdep.c: Remove _initialize_sparc_sol2_tdep prototype.
      	* sparc-tdep.c: Remove _initialize_sparc_tdep prototype.
      	* sparc64-fbsd-nat.c: Remove _initialize_sparc64fbsd_nat
      	prototype.
      	* sparc64-fbsd-tdep.c: Remove _initialize_sparc64fbsd_tdep
      	prototype.
      	* sparc64-linux-nat.c: Remove _initialize_sparc64_linux_nat
      	prototype.
      	* sparc64-linux-tdep.c: Remove _initialize_sparc64_linux_tdep
      	prototype.
      	* sparc64-nat.c: Remove _initialize_sparc64_nat prototype.
      	* sparc64-nbsd-nat.c: Remove _initialize_sparc64nbsd_nat
      	prototype.
      	* sparc64-nbsd-tdep.c: Remove _initialize_sparc64nbsd_tdep
      	prototype.
      	* sparc64-obsd-nat.c: Remove _initialize_sparc64obsd_nat
      	prototype.
      	* sparc64-obsd-tdep.c: Remove _initialize_sparc64obsd_tdep
      	prototype.
      	* sparc64-sol2-tdep.c: Remove _initialize_sparc64_sol2_tdep
      	prototype.
      	* spu-linux-nat.c: Remove _initialize_spu_nat prototype.
      	* spu-multiarch.c: Remove _initialize_spu_multiarch prototype.
      	* spu-tdep.c: Remove _initialize_spu_tdep prototype.
      	* stabsread.c: Remove _initialize_stabsread prototype.
      	* stack.c: Remove _initialize_stack prototype.
      	* stap-probe.c: Remove _initialize_stap_probe prototype.
      	* std-regs.c: Remove _initialize_frame_reg prototype.
      	* symfile-debug.c: Remove _initialize_symfile_debug prototype.
      	* symfile-mem.c: Remove _initialize_symfile_mem prototype.
      	* symfile.c: Remove _initialize_symfile prototype.
      	* symmisc.c: Remove _initialize_symmisc prototype.
      	* symtab.c: Remove _initialize_symtab prototype.
      	* target-dcache.c: Remove _initialize_target_dcache prototype.
      	* target-descriptions.c: Remove _initialize_target_descriptions
      	prototype.
      	* thread.c: Remove _initialize_thread prototype.
      	* tic6x-linux-tdep.c: Remove _initialize_tic6x_linux_tdep
      	prototype.
      	* tic6x-tdep.c: Remove _initialize_tic6x_tdep prototype.
      	* tilegx-linux-nat.c: Remove _initialize_tile_linux_nat prototype.
      	* tilegx-linux-tdep.c: Remove _initialize_tilegx_linux_tdep
      	prototype.
      	* tilegx-tdep.c: Remove _initialize_tilegx_tdep prototype.
      	* tracefile-tfile.c: Remove _initialize_tracefile_tfile prototype.
      	* tracefile.c: Remove _initialize_tracefile prototype.
      	* tracepoint.c: Remove _initialize_tracepoint prototype.
      	* tui/tui-hooks.c: Remove _initialize_tui_hooks prototype.
      	* tui/tui-interp.c: Remove _initialize_tui_interp prototype.
      	* tui/tui-layout.c: Remove _initialize_tui_layout prototype.
      	* tui/tui-regs.c: Remove _initialize_tui_regs prototype.
      	* tui/tui-stack.c: Remove _initialize_tui_stack prototype.
      	* tui/tui-win.c: Remove _initialize_tui_win prototype.
      	* tui/tui.c: Remove _initialize_tui prototype.
      	* typeprint.c: Remove _initialize_typeprint prototype.
      	* user-regs.c: Remove _initialize_user_regs prototype.
      	* utils.c: Remove _initialize_utils prototype.
      	* v850-tdep.c: Remove _initialize_v850_tdep prototype.
      	* valarith.c: Remove _initialize_valarith prototype.
      	* valops.c: Remove _initialize_valops prototype.
      	* valprint.c: Remove _initialize_valprint prototype.
      	* value.c: Remove _initialize_values prototype.
      	* varobj.c: Remove _initialize_varobj prototype.
      	* vax-bsd-nat.c: Remove _initialize_vaxbsd_nat prototype.
      	* vax-nbsd-tdep.c: Remove _initialize_vaxnbsd_tdep prototype.
      	* vax-tdep.c: Remove _initialize_vax_tdep prototype.
      	* windows-nat.c: Remove _initialize_windows_nat,
      	_initialize_check_for_gdb_ini, and _initialize_loadable
      	prototypes.
      	* windows-tdep.c: Remove _initialize_windows_tdep prototype.
      	* xcoffread.c: Remove _initialize_xcoffread prototype.
      	* xml-support.c: Remove _initialize_xml_support prototype.
      	* xstormy16-tdep.c: Remove _initialize_xstormy16_tdep prototype.
      	* xtensa-linux-nat.c: Remove _initialize_xtensa_linux_nat
      	prototype.
      	* xtensa-linux-tdep.c: Remove _initialize_xtensa_linux_tdep
      	prototype.
      	* xtensa-tdep.c: Remove _initialize_xtensa_tdep prototype.
      481695ed
  15. 03 Sep, 2017 1 commit
    • Tom Tromey's avatar
      Use std::string in mi_cmd_interpreter_exec · 56496dd4
      Tom Tromey authored
      Change mi_cmd_interpreter_exec to use std::string, removing a cleanup.
      
      ChangeLog
      2017-09-03  Tom Tromey  <tom@tromey.com>
      
      	* mi/mi-interp.c (mi_cmd_interpreter_exec): Use std::string.
      56496dd4
  16. 22 Apr, 2017 1 commit
    • Tom Tromey's avatar
      Use ui_out_emit_list · 10f489e5
      Tom Tromey authored
      This changes some spots to use ui_out_emit_list.  This only touches
      "easy" cases, where the cleanup was used in a block-structured way.
      There's also one more use of ui_out_emit_tuple in here.
      
      ChangeLog
      2017-04-22  Tom Tromey  <tom@tromey.com>
      
      	* mi/mi-cmd-file.c (mi_cmd_file_list_shared_libraries): Use
      	ui_out_emit_list.
      	* stack.c (print_frame): Use ui_out_emit_list.
      	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Use
      	ui_out_emit_list.
      	* mi/mi-main.c (print_one_inferior)
      	(mi_cmd_data_list_register_names)
      	(mi_cmd_data_list_register_values, mi_cmd_list_features)
      	(mi_cmd_list_target_features, mi_cmd_trace_frame_collected): Use
      	ui_out_emit_list.
      	* mi/mi-interp.c (mi_on_normal_stop_1): Use ui_out_emit_list.
      	(mi_output_solib_attribs): Use ui_out_emit_list,
      	ui_out_emit_tuple.
      	* mi/mi-cmd-var.c (varobj_update_one): Use ui_out_emit_list.
      	* mi/mi-cmd-stack.c (mi_cmd_stack_list_frames)
      	(mi_cmd_stack_list_args, list_args_or_locals): Use
      	ui_out_emit_list.
      	* disasm.c (do_assembly_only): Use ui_out_emit_list.
      	* breakpoint.c (print_solib_event, output_thread_groups): Use
      	ui_out_emit_list.
      10f489e5
  17. 05 Apr, 2017 1 commit
    • Pedro Alves's avatar
      -Wwrite-strings: Constify mi_cmd_argv_ftype's 'command' parameter · 9f33b8b7
      Pedro Alves authored
      -Wwrite-strings flags this attempt to pass a literal to a "char *":
      
      	mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
      
      Fix that by constifying mi_cmd_argv_ftype's 'command' parameter and
      adjusting all MI commands.
      
      gdb/ChangeLog:
      2017-04-05  Pedro Alves  <palves@redhat.com>
      
      	* mi/mi-cmd-break.c (mi_cmd_break_insert_1, mi_cmd_break_insert)
      	(mi_cmd_dprintf_insert, mi_cmd_break_passcount)
      	(mi_cmd_break_watch, mi_cmd_break_commands): Constify 'command'
      	parameter.
      	* mi/mi-cmd-catch.c (mi_cmd_catch_assert, mi_cmd_catch_exception)
      	(mi_cmd_catch_load, mi_cmd_catch_unload): Constify cmd' parameter.
      	* mi/mi-cmd-disas.c (mi_cmd_disassemble): Constify 'command'
      	parameter.
      	* mi/mi-cmd-env.c (mi_cmd_env_pwd, mi_cmd_env_cd, mi_cmd_env_path)
      	(mi_cmd_env_dir, mi_cmd_inferior_tty_set, _cmd_inferior_tty_show)
      	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_file)
      	(mi_cmd_file_list_exec_source_files)
      	(mi_cmd_file_list_shared_libraries): Constify 'command' parameter.
      	* mi/mi-cmd-info.c (mi_cmd_info_ada_exceptions)
      	(mi_cmd_info_gdb_mi_command, mi_cmd_info_os): Constify 'command'
      	parameter.
      	* mi/mi-cmd-stack.c (mi_cmd_enable_frame_filters)
      	(mi_cmd_stack_list_frames, mi_cmd_stack_info_depth)
      	(mi_cmd_stack_list_locals, mi_cmd_stack_list_args)
      	(mi_cmd_stack_list_variables, mi_cmd_stack_select_frame)
      	(mi_cmd_stack_info_frame): Constify 'command' parameter.
      	* mi/mi-cmd-target.c (mi_cmd_target_file_get)
      	(mi_cmd_target_file_put, mi_cmd_target_file_delete): Constify
      	'command' parameter.
      	* mi/mi-cmd-var.c (mi_cmd_var_create, mi_cmd_var_delete)
      	(mi_cmd_var_set_format, mi_cmd_var_set_visualizer)
      	(mi_cmd_var_set_frozen, mi_cmd_var_show_format)
      	(mi_cmd_var_info_num_children, mi_cmd_var_list_children)
      	(mi_cmd_var_info_type, mi_cmd_var_info_path_expression)
      	(mi_cmd_var_info_expression, mi_cmd_var_show_attributes)
      	(mi_cmd_var_evaluate_expression, mi_cmd_var_assign)
      	(mi_cmd_var_update, mi_cmd_enable_pretty_printing)
      	(mi_cmd_var_set_update_range): Constify 'command' parameter.
      	* mi/mi-cmds.h (mi_cmd_argv_ftype): Constify 'command' parameter.
      	* mi/mi-interp.c (mi_cmd_interpreter_exec): Constify 'command'
      	parameter.
      	* mi/mi-main.c (mi_cmd_gdb_exit, mi_cmd_exec_next)
      	(mi_cmd_exec_next_instruction, mi_cmd_exec_step)
      	(mi_cmd_exec_step_instruction, mi_cmd_exec_finish)
      	(mi_cmd_exec_return ,mi_cmd_exec_jump, mi_cmd_exec_continue)
      	(mi_cmd_exec_interrupt, mi_cmd_exec_run, mi_cmd_target_detach)
      	(mi_cmd_target_flash_erase, mi_cmd_thread_select)
      	(mi_cmd_thread_list_ids, mi_cmd_thread_info)
      	(mi_cmd_list_thread_groups, mi_cmd_data_list_register_names)
      	(mi_cmd_data_list_changed_registers)
      	(mi_cmd_data_write_register_values)
      	(mi_cmd_data_evaluate_expression, mi_cmd_data_read_memory)
      	(mi_cmd_data_read_memory_bytes, mi_cmd_data_write_memory)
      	(mi_cmd_data_write_memory_bytes, mi_cmd_enable_timings)
      	(mi_cmd_list_features, mi_cmd_list_target_features)
      	(mi_cmd_add_inferior, mi_cmd_remove_inferior)
      	(mi_cmd_trace_define_variable, mi_cmd_trace_list_variables)
      	(mi_cmd_trace_find, mi_cmd_trace_save, mi_cmd_trace_start)
      	(mi_cmd_trace_status, mi_cmd_trace_stop, mi_cmd_ada_task_info)
      	(mi_cmd_trace_frame_collected): Constify 'command'
      	parameter.
      	* mi/mi-symbol-cmds.c (mi_cmd_symbol_list_lines): Constify
      	'command' parameter.
      9f33b8b7
  18. 20 Mar, 2017 1 commit
    • Marc-Andre Laperle's avatar
      Add -file-list-shared-libraries MI command · 51457a05
      Marc-Andre Laperle authored
      
      
      This change adds the MI equivalent for the "info sharedlibrary"
      command. The command was already partially documented but ignored as
      it was not implemented. The new MI command works similarly to the CLI
      command, taking an optional regular expression as an argument and
      outputting the library information.
      
      I included a test for the new command in mi-solib.exp.
      
      gdb/doc/ChangeLog:
      
      	* gdb.texinfo (gdb/mi Symbol Query Commands): Document new MI
      	command file-list-shared-libraries
      	(GDB/MI Async Records): Update documentation of library-loaded with new
      	field.
      
      gdb/ChangeLog:
      
      	* NEWS: Add an entry about new '-file-list-shared-libraries' command.
      	* mi/mi-cmd-file.c (mi_cmd_file_list_shared_libraries):
      	New function definition.
      	* mi/mi-cmds.c (mi_cmds): Add -file-list-shared-libraries command.
      	* mi/mi-cmds.h (mi_cmd_file_list_shared_libraries):
      	New function declaration.
      	* mi/mi-interp.c (mi_output_solib_attribs): New Function.
      	* mi/mi-interp.h: New file.
      	* solib.c (info_sharedlibrary_command): Replace for loop with
      	ALL_SO_LIBS macro
      	* solib.h (update_solib_list): New function declaration.
      	(so_list_head): Move macro.
      	* solist.h (ALL_SO_LIBS): New macro.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.mi/mi-solib.exp (test_file_list_shared_libraries):
      	New procedure.
      
      Signed-off-by: default avatarMarc-Andre Laperle <marc-andre.laperle@ericsson.com>
      51457a05
  19. 03 Feb, 2017 1 commit
    • Pedro Alves's avatar
      C++-fy struct interp/cli_interp/tui_interp/mi_interp · d6f9b0fb
      Pedro Alves authored
      - The interp->data field disappears, since we can put data in the
        interpreter directly now.  The "init" method remains in place, but
        it now returns void.
      
      - A few places check if the interpreter method is NULL before calling
        it, and also check whether the method returns true/false.  For some
        of those methods, all current implementations always return true.
        In those cases, this commit makes the C++-fied method return void
        instead and cleans up the callers.
      
      Tested on x86_64 Fedora 23.
      
      gdb/ChangeLog:
      2017-02-03  Pedro Alves  <palves@redhat.com>
      
      	* cli/cli-interp.c (cli_interp_base::cli_interp_base)
      	(cli_interp_base::~cli_interp_base): New.
      	(cli_interp): New struct.
      	(as_cli_interp): Cast the interp itself to cli_interp.
      	(cli_interpreter_pre_command_loop): Rename to ...
      	(cli_interp_base::pre_command_loop): ... this.  Remove 'self'
      	parameter.
      	(cli_interpreter_init): Rename to ...
      	(cli_interp::init): ... this.  Remove 'self' parameter.  Use
      	boolean.  Make extern.
      	(cli_interpreter_resume): Rename to ...
      	(cli_interp::resume): ... this.  Remove 'data' parameter.  Make
      	extern.
      	(cli_interpreter_suspend): Rename to ...
      	(cli_interp::suspend): ... this.  Remove 'data' parameter.  Make
      	extern.
      	(cli_interpreter_exec): Rename to ...
      	(cli_interp::exec): ... this.  Remove 'data' parameter.  Make
      	extern.
      	(cli_interpreter_supports_command_editing): Rename to ...
      	(cli_interp_base::supports_command_editing): ... this.  Remove
      	'interp' parameter.  Make extern.
      	(cli_ui_out): Rename to ...
      	(cli_interp::interp_ui_out): ... this.  Remove 'interp' parameter.
      	Make extern.
      	(cli_set_logging): Rename to ...
      	(cli_interp_base::set_logging): ... this.  Remove 'interp'
      	parameter.  Make extern.
      	(cli_interp_procs): Delete.
      	(cli_interp_factory): Adjust to use "new".
      	* cli/cli-interp.h: Include "interps.h".
      	(struct cli_interp_base): New struct.
      	* interps.c (struct interp): Delete.  Fields moved to interps.h.
      	(interp_new): Delete.
      	(interp::interp, interp::~interp): New.
      	(interp_set): Use bool, and return void.  Assume the interpreter
      	has suspend, init and resume methods, and that the all return
      	void.
      	(set_top_level_interpreter): interp_set returns void.
      	(interp_ui_out): Adapt.
      	(current_interp_set_logging): Adapt.
      	(interp_data): Delete.
      	(interp_pre_command_loop, interp_supports_command_editing): Adapt.
      	(interp_exec): Adapt.
      	(top_level_interpreter_data): Delete.
      	* interps.h (interp_init_ftype, interp_resume_ftype)
      	(interp_suspend_ftype, interp_exec_ftype)
      	(interp_pre_command_loop_ftype, interp_ui_out_ftype): Delete.
      	(class interp): New.
      	(interp_new): Delete.
      	(interp_set): Now returns void.  Use bool.
      	(interp_data, top_level_interpreter_data): Delete.
      	* mi/mi-common.h: Include interps.h.
      	(class mi_interp): Inherit from interp.  Define a ctor.  Declare
      	init, resume, suspect, exec, interp_ui_out, set_logging and
      	pre_command_loop methods.
      	* mi/mi-interp.c (as_mi_interp): Cast the interp itself.
      	(mi_interpreter_init): Rename to ...
      	(mi_interp::init): ... this.  Remove the 'interp' parameter, use
      	bool, return void and make extern.  Adjust.
      	(mi_interpreter_resume): ... Rename to ...
      	(mi_interp::resume): ... this.  Remove the 'data' parameter,
      	return void and make extern.  Adjust.
      	(mi_interpreter_suspend): ... Rename to ...
      	(mi_interp::suspend): ... this.  Remove the 'data' parameter,
      	return void and make extern.  Adjust.
      	(mi_interpreter_exec): ... Rename to ...
      	(mi_interp::exec): ... this.  Remove the 'data' parameter and make
      	extern.  Adjust.
      	(mi_interpreter_pre_command_loop): ... Rename to ...
      	(mi_interp::pre_command_loop): ... this.  Remove the 'self'
      	parameter and make extern.
      	(mi_on_normal_stop_1): Adjust.
      	(mi_ui_out): Rename to ...
      	(mi_interp::interp_ui_out): ... this.  Remove the 'interp'
      	parameter and make extern.  Adjust.
      	(mi_set_logging): Rename to ...
      	(mi_interp::set_logging): ... this.  Remove the 'interp'
      	parameter and make extern.  Adjust.
      	(mi_interp_procs): Delete.
      	(mi_interp_factory): Adjust to use 'new'.
      	* mi/mi-main.c (mi_cmd_gdb_exit, captured_mi_execute_command)
      	(mi_print_exception, mi_execute_command, mi_load_progress):
      	Adjust.
      	* tui/tui-interp.c (tui_interp): New class.
      	(as_tui_interp): Return a tui_interp pointer.
      	(tui_on_normal_stop, tui_on_signal_received)
      	(tui_on_end_stepping_range, tui_on_signal_exited, tui_on_exited)
      	(tui_on_no_history, tui_on_user_selected_context_changed): Adjust
      	to use interp::interp_ui_out.
      	(tui_init): Rename to ...
      	(tui_interp::init): ... this.  Remove the 'self' parameter, use
      	bool, return void and make extern.  Adjust.
      	(tui_resume): Rename to ...
      	(tui_interp::resume): ... this.  Remove the 'data' parameter,
      	return void and make extern.  Adjust.
      	(tui_suspend): Rename to ...
      	(tui_interp::suspend): ... this.  Remove the 'data' parameter,
      	return void and make extern.  Adjust.
      	(tui_ui_out): Rename to ...
      	(tui_interp::interp_ui_out): ... this.  Remove the 'self'
      	parameter, and make extern.  Adjust.
      	(tui_exec): Rename to ...
      	(tui_interp::exec): ... this.  Remove the 'data' parameter and
      	make extern.
      	(tui_interp_procs): Delete.
      	(tui_interp_factory): Use "new".
      d6f9b0fb
  20. 02 Feb, 2017 2 commits
    • Pedro Alves's avatar
      Move "tee" building down to interpreter::set_logging_proc · 616268b6
      Pedro Alves authored
      This patch gets rid of this hack in mi_set_logging:
      
            /* The tee created already is based on gdb_stdout, which for MI
      	 is a console and so we end up in an infinite loop of console
      	 writing to ui_file writing to console etc.  So discard the
      	 existing tee (it hasn't been used yet, and MI won't ever use
      	 it), and create one based on raw_stdout instead.  */
      
      By pushing down responsibility for the tee creation to the
      interpreter.  I.e., pushing the CLI bits out of handle_redirections
      down to the CLI interpreter's set_logging_proc method.
      
      This fixes a few leaks that I spotted, and then confirmed with
      "valgrind --leak-check=full":
      
      [...]
        ==21429== 56 (32 direct, 24 indirect) bytes in 1 blocks are definitely lost in loss record 30,243 of 34,980
        ==21429==    at 0x4C29216: operator new(unsigned long) (vg_replace_malloc.c:334)
        ==21429==    by 0x62D9A9: mi_set_logging(interp*, int, ui_file*, ui_file*) (mi-interp.c:1395)
        ==21429==    by 0x810B8A: current_interp_set_logging(int, ui_file*, ui_file*) (interps.c:360)
        ==21429==    by 0x61C537: handle_redirections(int) (cli-logging.c:162)
        ==21429==    by 0x61C6EC: set_logging_on(char*, int) (cli-logging.c:190)
        ==21429==    by 0x6163BE: do_cfunc(cmd_list_element*, char*, int) (cli-decode.c:105)
        ==21429==    by 0x6193C1: cmd_func(cmd_list_element*, char*, int) (cli-decode.c:1913)
        ==21429==    by 0x8DB790: execute_command(char*, int) (top.c:674)
        ==21429==    by 0x632AE6: mi_execute_cli_command(char const*, int, char const*) (mi-main.c:2343)
        ==21429==    by 0x6329BA: mi_cmd_execute(mi_parse*) (mi-main.c:2306)
        ==21429==    by 0x631E19: captured_mi_execute_command(ui_out*, mi_parse*) (mi-main.c:1998)
        ==21429==    by 0x632389: mi_execute_command(char const*, int) (mi-main.c:2163)
        ==21429==
      [...]
        ==26635== 24 bytes in 1 blocks are definitely lost in loss record 20,740 of 34,995
        ==26635==    at 0x4C29216: operator new(unsigned long) (vg_replace_malloc.c:334)
        ==26635==    by 0x61C355: handle_redirections(int) (cli-logging.c:131)
        ==26635==    by 0x61C6EC: set_logging_on(char*, int) (cli-logging.c:190)
        ==26635==    by 0x6163BE: do_cfunc(cmd_list_element*, char*, int) (cli-decode.c:105)
        ==26635==    by 0x6193C1: cmd_func(cmd_list_element*, char*, int) (cli-decode.c:1913)
        ==26635==    by 0x8DB7BC: execute_command(char*, int) (top.c:674)
        ==26635==    by 0x7B9132: command_handler(char*) (event-top.c:590)
        ==26635==    by 0x7B94F7: command_line_handler(char*) (event-top.c:780)
        ==26635==    by 0x7B8ABB: gdb_rl_callback_handler(char*) (event-top.c:213)
        ==26635==    by 0x933CE9: rl_callback_read_char (callback.c:220)
        ==26635==    by 0x7B89ED: gdb_rl_callback_read_char_wrapper_noexcept() (event-top.c:175)
        ==26635==    by 0x7B8A49: gdb_rl_callback_read_char_wrapper(void*) (event-top.c:192)
      
      One is fixed by transfering ownership of the log file to the tee.  In
      pseudo-patch, since the code was moved at the same time:
      
       -     out = new tee_file (curr_output, false, logfile.get (), false);
       +     out = new tee_file (curr_output, false, logfile.get (), true);
      
      The other is this bit in mi_set_logging:
      
          else
            {
       +      delete mi->raw_stdout;
      
      I tried to split the leak fixes to a smaller preparatory patch, but
      that was difficult exactly because of the tee hack in
      handle_redirections -> mi_set_logging.
      
      gdb/ChangeLog:
      2017-02-02  Pedro Alves  <palves@redhat.com>
      
      	* cli/cli-interp.c (struct saved_output_files, saved_output):
      	Moved from cli/cli-logging.c.
      	(cli_set_logging): New function.
      	(cli_interp_procs): Install cli_set_logging.
      	* cli/cli-interp.h (make_logging_output, cli_set_logging):
      	Declare.
      	* cli/cli-logging.c (struct saved_output_files, saved_output):
      	Moved to cli/cli-interp.c.
      	(pop_output_files): Don't save outputs here.
      	(make_logging_output): New function.
      	(handle_redirections): Don't build tee nor save previous outputs
      	here.
      	* interps.c (current_interp_set_logging): Change prototype.
      	Assume there's always a set_logging_proc method installed.
      	* interps.h (interp_set_logging_ftype): Change prototype.
      	(current_interp_set_logging): Change prototype and adjust comment.
      	* mi/mi-interp.c (mi_set_logging): Change protototype.  Adjust to
      	use make_logging_output.
      	* tui/tui-interp.c (tui_interp_procs): Install cli_set_logging.
      616268b6
    • 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
  21. 31 Jan, 2017 1 commit
    • Pedro Alves's avatar
      gdb/mi/mi-interp.c: Fix typos · 29b0b251
      Pedro Alves authored
      gdb/ChangeLog:
      2017-01-31  Pedro Alves  <palves@redhat.com>
      
      	* mi/mi-interp.c (mi_breakpoint_created, mi_breakpoint_modified):
      	Fix typos.
      29b0b251
  22. 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
  23. 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
  24. 21 Oct, 2016 1 commit
    • Tom Tromey's avatar
      Remove make_cleanup_restore_current_ui · 0e454242
      Tom Tromey authored
      This removes make_cleanup_restore_current_ui by converting the last
      use.  The last use was in a few functions used to iterate over all
      UIs.  This patch replaces these functions with a class, and arranges
      for the class destructor to do the needed cleanup.
      
      2016-10-21  Tom Tromey  <tom@tromey.com>
      
      	* tui/tui-interp.c (tui_on_normal_stop, tui_on_signal_received)
      	(tui_on_end_stepping_range, tui_on_signal_exited, tui_on_exited)
      	(tui_on_no_history, tui_on_user_selected_context_changed):
      	Update.
      	* top.h (switch_thru_all_uis): New class.
      	(SWITCH_THRU_ALL_UIS): Rewrite.
      	(make_cleanup_restore_current_ui, switch_thru_all_uis_init)
      	(switch_thru_all_uis_cond, switch_thru_all_uis_next): Don't
      	declare.
      	* mi/mi-interp.c (mi_new_thread, mi_thread_exit)
      	(mi_record_changed, mi_inferior_added, mi_inferior_appeared)
      	(mi_inferior_exit, mi_inferior_removed, mi_on_signal_received)
      	(mi_on_end_stepping_range, mi_on_signal_exited, mi_on_exited)
      	(mi_on_no_history, mi_on_normal_stop, mi_traceframe_changed)
      	(mi_tsv_created, mi_tsv_deleted, mi_tsv_modified)
      	(mi_breakpoint_created, mi_breakpoint_deleted)
      	(mi_breakpoint_modified, mi_output_running_pid, mi_on_resume)
      	(mi_solib_loaded, mi_solib_unloaded, mi_command_param_changed)
      	(mi_memory_changed, mi_user_selected_context_changed): Update.
      	* infrun.c (all_uis_check_sync_execution_done)
      	(all_uis_on_sync_execution_starting, normal_stop): Update.
      	* event-top.c (restore_ui_cleanup)
      	(make_cleanup_restore_current_ui, switch_thru_all_uis_init)
      	(switch_thru_all_uis_cond, switch_thru_all_uis_next): Remove.
      	* cli/cli-interp.c (cli_on_normal_stop, cli_on_signal_received)
      	(cli_on_end_stepping_range, cli_on_signal_exited, cli_on_exited)
      	(cli_on_no_history, cli_on_user_selected_context_changed):
      	Update.
      	* breakpoint.c (watchpoint_check): Update.
      0e454242
  25. 03 Oct, 2016 1 commit
    • Antoine Tremblay's avatar
      Emit inferior, thread and frame selection events to all UIs · 4034d0ff
      Antoine Tremblay authored
      With this patch, when an inferior, thread or frame is explicitly
      selected by the user, notifications will appear on all CLI and MI UIs.
      When a GDB console is integrated in a front-end, this allows the
      front-end to follow a selection made by the user ont he CLI, and it
      informs the user about selection changes made behind the scenes by the
      front-end.
      
      This patch addresses PR gdb/20487.
      
      In order to communicate frame changes to the front-end, this patch adds
      a new field to the =thread-selected event for the selected frame.  The
      idea is that since inferior/thread/frame can be seen as a composition,
      it makes sense to send them together in the same event.  The vision
      would be to eventually send the inferior information as well, if we find
      that it's needed, although the "=thread-selected" event would be
      ill-named for that job.
      
      Front-ends need to handle this new field if they want to follow the
      frame selection changes that originate from the console.  The format of
      the frame attribute is the same as what is found in the *stopped events.
      
      Here's a detailed example for each command and the events they generate:
      
      thread
      ------
      
      1. CLI command:
      
           thread 1.3
      
         MI event:
      
           =thread-selected,id="3",frame={...}
      
      2. MI command:
      
           -thread-select 3
      
         CLI event:
      
           [Switching to thread 1.3 ...]
      
      3. MI command (CLI-in-MI):
      
           thread 1.3
      
         MI event/reply:
      
           &"thread 1.3\n"
           ~"#0  child_sub_function () ...
           =thread-selected,id="3",frame={level="0",...}
           ^done
      
      frame
      -----
      
      1. CLI command:
      
           frame 1
      
         MI event:
      
           =thread-selected,id="3",frame={level="1",...}
      
      2. MI command:
      
           -stack-select-frame 1
      
         CLI event:
      
           #1  0x00000000004007f0 in child_function...
      
      3. MI command (CLI-in-MI):
      
           frame 1
      
         MI event/reply:
      
           &"frame 1\n"
           ~"#1  0x00000000004007f9 in ..."
           =thread-selected,id="3",frame={level="1"...}
           ^done
      
      inferior
      --------
      
      Inferior selection events only go from the console to MI, since there's
      no way to select the inferior in pure MI.
      
      1. CLI command:
      
           inferior 2
      
         MI event:
      
           =thread-selected,id="3"
      
      Note that if the user selects an inferior that is not started or exited,
      the MI doesn't receive a notification.  Since there is no threads to
      select, the =thread-selected event does not apply...
      
      2. MI command (CLI-in-MI):
      
           inferior 2
      
         MI event/reply:
      
           &"inferior 2\n"
           ~"[Switching to inferior 2 ...]"
           =thread-selected,id="4",frame={level="0"...}
           ^done
      
      Internal implementation detail: this patch makes it possible to suppress
      notifications caused by a CLI command, like what is done in mi-interp.c.
      This means that it's now possible to use the
      add_com_suppress_notification function to register a command with some
      event suppressed.  It is used to implement the select-frame command in
      this patch.
      
      The function command_notifies_uscc_observer was added to extract
      the rather complicated logical expression from the if statement.  It is
      also now clearer what that logic does: if the command used by the user
      already notifies the user_selected_context_changed observer, there is
      not need to notify it again.  It therefore protects again emitting the
      event twice.
      
      No regressions, tested on ubuntu 14.04 x86 with target boards unix and
      native-extended-gdbserver.
      
      gdb/ChangeLog:
      
      YYYY-MM-DD  Antoine Tremblay  <antoine.tremblay@ericsson.com>
      YYYY-MM-DD  Simon Marchi  <simon.marchi@ericsson.com>
      
      	PR gdb/20487
      	* NEWS: Mention new frame field of =thread-selected event.
      	* cli/cli-decode.c (add_cmd): Initialize c->suppress_notification.
      	(add_com_suppress_notification): New function definition.
      	(cmd_func): Set and restore the suppress_notification flag.
      	* cli/cli-deicode.h (struct cmd_list_element)
      	<suppress_notification>: New field.
      	* cli/cli-interp.c (cli_suppress_notification): New global variable.
      	(cli_on_user_selected_context_changed): New function.
      	(_initialize_cli_interp): Attach to user_selected_context_changed
      	observer.
      	* command.h (struct cli_suppress_notification): New structure.
      	(cli_suppress_notification): New global variable declaration.
      	(add_com_suppress_notification): New function declaration.
      	* defs.h (enum user_selected_what_flag): New enum.
      	(user_selected_what): New enum flag type.
      	* frame.h (print_stack_frame_to_uiout): New function declaration.
      	* gdbthread.h (print_selected_thread_frame): New function declaration.
      	* inferior.c (print_selected_inferior): New function definition.
      	(inferior_command): Remove printing of inferior/thread/frame switch
      	notifications, notify user_selected_context_changed observer.
      	* inferior.h (print_selected_inferior): New function declaration.
      	* mi/mi-cmds.c (struct mi_cmd): Add user_selected_context
      	suppression to stack-select-frame and thread-select commands.
      	* mi/mi-interp.c (struct mi_suppress_notification)
      	<user_selected_context>: Initialize.
      	(mi_user_selected_context_changed): New function definition.
      	(_initialize_mi_interp): Attach to user_selected_context_changed.
      	* mi/mi-main.c (mi_cmd_thread_select): Print thread selection reply.
      	(mi_execute_command): Handle notification suppression.  Notify
      	user_selected_context_changed observer on thread change instead of printing
      	event directly.  Don't send it if command already sends the notification.
      	(command_notifies_uscc_observer): New function.
      	(mi_cmd_execute): Don't handle notification suppression.
      	* mi/mi-main.h (struct mi_suppress_notification)
      	<user_selected_context>: New field.
      	* stack.c (print_stack_frame_to_uiout): New function definition.
      	(select_frame_command): Notify user_selected_context_changed
      	observer.
      	(frame_command): Call print_selected_thread_frame if there's no frame
      	change or notify user_selected_context_changed observer if there is.
      	(up_command): Notify user_selected_context_changed observer.
      	(down_command): Likewise.
      	(_initialize_stack): Suppress user_selected_context notification for
      	command select-frame.
      	* thread.c (thread_command): Notify
      	user_selected_context_changed if the thread has changed, print
      	thread info directly if it hasn't.
      	(do_captured_thread_select): Do not print thread switch event.
      	(print_selected_thread_frame): New function definition.
      	* tui/tui-interp.c (tui_on_user_selected_context_changed):
      	New function definition.
      	(_initialize_tui_interp): Attach to user_selected_context_changed
      	observer.
      
      gdb/doc/ChangeLog:
      
      	PR gdb/20487
      	* gdb.texinfo (Context management): Update mention of frame
      	change notifications.
      	(gdb/mi Async Records): Document frame field in
      	=thread-select event.
      	* observer.texi (GDB Observers): New user_selected_context_changed
      	observer.
      
      gdb/testsuite/ChangeLog:
      
      	PR gdb/20487
      	* gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Adapt
      	=thread-select-event check.
      4034d0ff
  26. 21 Jun, 2016 8 commits
    • Pedro Alves's avatar
      Make stdin be per UI · 268a799a
      Pedro Alves authored
      This commit makes each UI have its own "stdin" stream pointer.  This
      is used to determine whether the "from_tty" argument to
      execute_command, etc. should be true.
      
      Related, this commit makes input_from_terminal_p take an UI parameter,
      and then avoids the gdb_has_a_terminal in it.  gdb_has_a_terminal only
      returns info on gdb's own main/primary terminal (the real stdin).
      However, the places that call input_from_terminal_p really want to
      know is whether the command came from an interactive tty.  This patch
      thus renames input_from_terminal_p to input_interactive_p for clarity,
      and then makes input_interactive_p check for "set interactive" itself,
      along with ISATTY, instead of calling gdb_has_a_terminal.  Actually,
      quit_force wants to call input_interactive_p _after_ stdin is closed,
      we can't call ISATTY that late.  So instead we save the result of
      ISATTY in a field of the UI.
      
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* cli/cli-script.c (read_next_line): Adjust to per-UI stdin.
      	(read_command_lines): Use input_interactive_p instead of
      	input_from_terminal_p.
      	* defs.h (struct ui): Forward declare.
      	(input_from_terminal_p): Rename to ...
      	(input_interactive_p): ... this.
      	* event-top.c (stdin_event_handler): Pass 0 as from_tty argument
      	to quit_command.
      	(command_handler): Adjust to per-UI stdin.
      	(handle_line_of_input): Adjust to per-UI stdin and use
      	input_interactive_p instead of ISATTY and input_from_terminal_p.
      	(gdb_readline_no_editing_callback): Adjust to per-UI stdin.
      	(command_line_handler): Always pass true as "from_tty" parameter
      	of handle_line_of_input and execute_command.
      	(async_sigterm_handler): Pass 0 as from_tty argument to
      	quit_command.
      	* inflow.c (interactive_mode, show_interactive_mode): Moved to ...
      	(gdb_has_a_terminal): Don't check interactive_mode here.
      	(_initialize_inflow): Don't install "set interactive-mode" here.
      	* main.c (captured_command_loop): Adjust to per-UI stdin.
      	* mi/mi-interp.c (mi_execute_command_wrapper): Adjust to per-UI
      	stdin.
      	* top.c (new_ui): Save the stdin stream and whether it's a tty.
      	(dont_repeat): Adjust to per-UI stdin.
      	(command_line_input): Adjust to per-UI stdin and to use
      	input_interactive_p.
      	(quit_force): Write history if any UI supports interactive input.
      	(interactive_mode, show_interactive_mode): Move here, from
      	inflow.c.
      	(input_from_terminal_p): Rename to ...
      	(input_interactive_p): ... this, and check the "interactive_mode"
      	global instead of calling gdb_has_a_terminal.
      	(_initialize_top): Install "set interactive-mode" here.
      	* top.h (struct ui) <stdin_stream, input_interactive_p>: New
      	fields.
      	* utils.c (quit): Pass 0 as from_tty argument to quit_force.
      	(defaulted_query): Adjust to per-UI stdin and to use
      	input_interactive_p.
      268a799a
    • Pedro Alves's avatar
      New function should_print_stop_to_console · 26cde2cc
      Pedro Alves authored
      There's code in the MI interpreter that decides whether a stop should
      be sent to MI's console stream.  Move this check to the CLI
      interpreter code, so that we can reuse it in both the CLI and TUI
      interpreters.
      
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* cli/cli-interp.c: Include gdbthread.h and thread-fsm.h.
      	(should_print_stop_to_console): New function, factored out from
      	mi_on_normal_stop_1.
      	* cli/cli-interp.h (should_print_stop_to_console): Declare.
      	* mi/mi-interp.c (mi_on_normal_stop_1): Use
      	should_print_stop_to_console.  Pass it the current UI's console
      	interpreter.
      	* mi/mi-main.c (captured_mi_execute_command): Use the
      	INTERP_CONSOLE symbol rather than explicit "console".
      26cde2cc
    • Pedro Alves's avatar
      Replace the sync_execution global with a new enum prompt_state tristate · 3b12939d
      Pedro Alves authored
      When sync_execution (a boolean) is true, it means we're running a
      foreground command -- we hide the prompt stop listening to input, give
      the inferior the terminal, then go to the event loop waiting for the
      target to stop.
      
      With multiple independent UIs, we need to track whether each UI is
      synchronously blocked waiting for the target.  IOW, if you do
      "continue" in one console, that console stops accepting commands, but
      you should still be free to type other commands in the others
      consoles.
      
      Just simply making sync_execution be per-UI alone not sufficient,
      because of this in fetch_inferior_event:
      
        /* If the inferior was in sync execution mode, and now isn't,
           restore the prompt (a synchronous execution command has finished,
           and we're ready for input).  */
        if (current_ui->async && was_sync && !sync_execution)
          observer_notify_sync_execution_done ();
      
      We'd have to record at entry the "was_sync" state for each UI, not
      just of the current UI.
      
      This patch instead replaces the sync_execution flag by a per-UI
      tristate flag indicating the command line prompt state:
      
       enum prompt_state
       {
         /* The command line is blocked simulating synchronous execution.
            This is used to implement the foreground execution commands
            ('run', 'continue', etc.).  We won't display the prompt and
            accept further commands until the execution is actually over.  */
         PROMPT_BLOCKED,
      
         /* The command finished; display the prompt before returning back to
            the top level.  */
         PROMPT_NEEDED,
      
         /* We've displayed the prompt already, ready for input.  */
         PROMPTED,
       ;
      
      I think the end result is _much_ clearer than the current code, and,
      it addresses the original motivation too.
      
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* annotate.c: Include top.h.
      	(async_background_execution_p): Delete.
      	(print_value_flags): Check the UI's prompt state rather then
      	async_background_execution_p.
      	* event-loop.c (start_event_loop): Set the prompt state to
      	PROMPT_NEEDED.
      	* event-top.c (display_gdb_prompt, async_enable_stdin)
      	(async_disable_stdin): Check the current UI's prompt state instead
      	of the sync_execution global.
      	(command_line_handler): Set the prompt state to PROMPT_NEEDED
      	before running a command, and display the prompt if still needed
      	afterwards.
      	* infcall.c (struct call_thread_fsm) <waiting_ui>: New field.
      	(new_call_thread_fsm): New parameter 'waiting_ui'.  Store it.
      	(call_thread_fsm_should_stop): Set the prompt state to
      	PROMPT_NEEDED.
      	(run_inferior_call): Adjust to temporarily set the prompt state to
      	PROMPT_BLOCKED instead of using the sync_execution global.
      	(call_function_by_hand_dummy): Pass the current UI to
      	new_call_thread_fsm.
      	* infcmd.c: Include top.h.
      	(continue_1): Check the current UI's prompt state instead of the
      	sync_execution global.
      	(continue_command): Validate global execution state before calling
      	prepare_execution_command.
      	(step_1): Call all_uis_check_sync_execution_done.
      	(attach_post_wait): Don't call async_enable_stdin here.  Remove
      	reference to sync_execution.
      	* infrun.c (sync_execution): Delete global.
      	(follow_fork_inferior)
      	(reinstall_readline_callback_handler_cleanup): Check the current
      	UI's prompt state instead of the sync_execution global.
      	(check_curr_ui_sync_execution_done)
      	(all_uis_check_sync_execution_done): New functions.
      	(fetch_inferior_event): Call all_uis_check_sync_execution_done
      	instead of trying to determine whether the global sync execution
      	changed.
      	(handle_no_resumed): Check the prompt state of all UIs.
      	(normal_stop): Emit the no unwait-for even to all PROMPT_BLOCKED
      	UIs.  Emit the "Switching to" notification to all UIs.  Enable
      	stdin in all UIs.
      	* infrun.h (sync_execution): Delete.
      	(all_uis_check_sync_execution_done): Declare.
      	* main.c (captured_command_loop): Don't call
      	interp_pre_command_loop if the prompt is blocked.
      	(catch_command_errors, catch_command_errors_const): Adjust.
      	(captured_main): Set the initial prompt state to PROMPT_NEEDED.
      	* mi/mi-interp.c (display_mi_prompt): Set the prompt state to
      	PROMPTED.
      	(mi_interpreter_resume): Don't clear sync_execution.  Remove hack
      	comment.
      	(mi_execute_command_input_handler): Set the prompt state to
      	PROMPT_NEEDED before executing the command, and only display the
      	prompt if the prompt state is PROMPT_NEEDED afterwards.
      	(mi_on_resume_1): Adjust to check the prompt state.
      	* target.c (target_terminal_inferior): Adjust to check the prompt
      	state.
      	* top.c (wait_sync_command_done, maybe_wait_sync_command_done)
      	(execute_command): Check the current UI's prompt state instead of
      	sync_execution.
      	* top.h (enum prompt_state): New.
      	(struct ui) <prompt_state>: New field.
      	(ALL_UIS): New macro.
      3b12939d
    • Pedro Alves's avatar
      Simplify starting the command event loop · b2d86570
      Pedro Alves authored
      All interpreter types (CLI/TUI/MI) print the prompt, and then call
      start_event_loop.
      
      Because we'll need an interpreter hook to display the
      interpreter-specific prompt before going back to the event loop,
      without actually starting an event loop, this patch moves the
      start_event_loop call to common code, and replaces the command_loop
      hook with a pre_command_look hook, that now just prints the prompt.
      
      Turns out to be a cleanup on its own right anyway.
      
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* cli/cli-interp.c (cli_interpreter_pre_command_loop): New
      	function.
      	(cli_interp_procs): Install it instead of cli_command_loop.
      	* cli/cli-interp.h (cli_interpreter_pre_command_loop): Declare.
      	* event-top.c (cli_command_loop): Delete.
      	* interps.c (interp_new): Remove reference to command_loop_proc.
      	(current_interp_command_loop): Delete.
      	(interp_pre_command_loop): New function.
      	(interp_command_loop_ftype): Delete.
      	* interps.h (interp_pre_command_loop_ftype): New typedef.
      	(struct interp_procs) <command_loop_proc>: Delele field.
      	<pre_command_loop_proc>: New field.
      	(current_interp_command_loop): Delete declaration.
      	(interp_pre_command_loop): New declaration.
      	* main.c (captured_command_loop): Call interp_pre_command_loop
      	instead of current_interp_command_loop and start an event loop.
      	* mi/mi-interp.c (mi_command_loop): Delete.
      	(mi_interpreter_pre_command_loop): New.
      	(mi_interp_procs): Update.
      	* tui/tui-interp.c (tui_interp_procs): Install
      	cli_interpreter_pre_command_loop instead of cli_command_loop.
      b2d86570
    • Pedro Alves's avatar
      Make raw_stdout be per MI instance · 9204d692
      Pedro Alves authored
      Each MI instance should obviously have its own raw output channel,
      along with save_raw_stdout.
      
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* interps.c (current_interpreter): New function.
      	* interps.h (current_interpreter): New declaration.
      	* mi/mi-cmds.h (raw_stdout): Delete declaration.
      	* mi/mi-common.h (struct mi_interp) <raw_stdout,
      	saved_raw_stdout>: New field.
      	* mi/mi-interp.c (display_mi_prompt): New parameter 'mi'.  Adjust
      	to per-UI raw_stdout.
      	(mi_interpreter_init): Adjust to per-UI raw_stdout.
      	(mi_on_sync_execution_done, mi_execute_command_input_handler)
      	(mi_command_loop): Pass MI instance to display_mi_prompt.
      	(mi_on_normal_stop_1, mi_output_running_pid, mi_on_resume_1)
      	(mi_on_resume): Adjust to per-UI raw_stdout.
      	(saved_raw_stdout): Delete.
      	(mi_set_logging): Adjust to per-UI raw_stdout and
      	saved_raw_stdout.
      	* mi/mi-main.c (raw_stdout): Delete.
      	(mi_cmd_gdb_exit, captured_mi_execute_command)
      	(mi_print_exception, mi_load_progress): Adjust to per-UI
      	raw_stdout.
      	(print_diff_now, mi_print_timing_maybe): New ui_file parameter.
      	Pass it along.
      	(print_diff): New ui_file parameter.  Send output there instead of
      	raw_stdout.
      	* mi/mi-main.h (struct ui_file): Forward declare.
      	(mi_print_timing_maybe): Add ui_file parameter.
      9204d692
    • Pedro Alves's avatar
      Introduce display_mi_prompt · 05beb275
      Pedro Alves authored
      Just a refactor.
      
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* mi/mi-interp.c (display_mi_prompt): New function.
      05beb275
    • 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
    • Pedro Alves's avatar
      Make instream be per UI · f38d3ad1
      Pedro Alves authored
      gdb/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* cli/cli-script.c (execute_user_command, read_next_line)
      	(read_next_line): Adjust to per-UI instream.
      	* event-top.c (stdin_event_handler, command_handler)
      	(handle_line_of_input, command_line_handler)
      	(gdb_readline_no_editing_callback, async_sigterm_handler)
      	(gdb_setup_readline): Likewise.
      	* inflow.c: Include top.h.
      	(gdb_has_a_terminal, child_terminal_init_with_pgrp)
      	(gdb_save_tty_state, child_terminal_inferior)
      	(child_terminal_ours_1, copy_terminal_info): Use the main UI.
      	(initialize_stdin_serial): Adjust to per-UI instream.
      	* main.c (captured_command_loop, captured_main): Adjust to per-UI
      	instream.
      	* mi/mi-interp.c (mi_execute_command_wrapper): Likewise.
      	* python/python.c (python_interactive_command): Likewise.
      	* terminal.h (struct ui): Forward declare.
      	(initialize_stdin_serial): Add struct ui parameter.
      	* top.c (instream): Delete.
      	(do_restore_instream_cleanup, read_command_file, dont_repeat)
      	(gdb_readline_no_editing, command_line_input)
      	(input_from_terminal_p, gdb_init): Adjust to per-UI instream.
      	* top.h (struct ui) <instream>: New field.
      	(instream): Delete declaration.
      	(quit): Adjust to per-UI instream.
      
      gdb/testsuite/ChangeLog:
      2016-06-21  Pedro Alves  <palves@redhat.com>
      
      	* gdb.gdb/selftest.exp (do_steps_and_nexts): Add new regexp.
      f38d3ad1