1. Nov 28, 2018
  2. Nov 27, 2018
    • GDB Administrator's avatar
      Automatic date update in version.in · 6a75ea85
      GDB Administrator authored
      6a75ea85
    • Simon Marchi's avatar
      Fix spurious semicolon in sparc-linux-nat.c · ed2df75c
      Simon Marchi authored
      Remove a semicolon that should not be there, as reported in PR 23917:
      
        CXX    sparc-linux-nat.o
      /home/emaisin/src/binutils-gdb/gdb/sparc-linux-nat.c:39:3: error: expected unqualified-id before ‘{’ token
         { sparc_store_inferior_registers (regcache, regnum); }
         ^
      
      Tested by rebuilding the file manually (make sparc-linux-nat.o) in a
      sparc64-linux-gnu build.
      
      gdb/ChangeLog:
      
      	PR gdb/23917
      	* sparc-linux-nat.c (sparc_linux_nat_target): Remove extraneous
      	semicolon.
      ed2df75c
  3. Nov 26, 2018
    • Pedro Alves's avatar
      Fix Solaris build · 24bce9bb
      Pedro Alves authored
      The recent commit 08036331 ("Per-inferior thread list, thread
      ranges/iterators, down with ALL_THREADS, etc.") removed the
      definitions of is_running/is_stopped/is_exited but missed updating a
      couple uses of is_exited in Solaris-specific code.
      
      Tested by Rainer Orth on amd64-pc-solaris2.11.
      
      gdb/ChangeLog:
      2018-11-26  Pedro Alves  <palves@redhat.com>
      
      	* procfs.c (procfs_notice_thread): Replace uses of
      	in_thread_list/is_exited with find_thread_ptid/THREAD_EXITED.
      	* sol-thread.c (sol_thread_target::wait)
      	(sol_update_thread_list_callback): Likewise.
      24bce9bb
    • Alan Modra's avatar
      [GOLD] justsyms_exec test fail on powerpc64 · 9b4e3a5e
      Alan Modra authored
      This test fails on powerpc64le due to the justsyms_lib being built
      with exported_data at 0x2010000, apparently due to the powerpc target
      code generating an empty relro .branch_lt section.  Since the test
      relies on the library having exported_data at 0x2000000, avoid the
      problem by linking with -z norelro.  Also, the test doesn't need to
      avoid checking the function symbol on powerpc elfv2.
      
      	* testsuite/Makefile.am (justsyms_lib): Link with -z norelro.
      	* testsuite/Makefile.in: Regenerate.
      	* testsuite/justsyms_exec.c (main): Do check exported_func
      	on PowerPC64 ELFv2.
      9b4e3a5e
    • Alan Modra's avatar
      [GOLD] support objdump -T display of st_other · 2eccb8f9
      Alan Modra authored
      PowerPC64 ELFv2 uses the top 3 bits of st_other to encode a function's
      local entry point offset from its global entry point.  Allow st_other
      bits except for visibility==default.
      
      	* testsuite/ver_test_14.sh: Accept objdump -T display of st_other
      	bits on powerpc64le.
      2eccb8f9
    • GDB Administrator's avatar
      Automatic date update in version.in · 0a744d8f
      GDB Administrator authored
      0a744d8f
    • Sergio Durigan Junior's avatar
      Implement timestamp'ed output on "make check" · f63c03b4
      Sergio Durigan Junior authored
      It is unfortunately not uncommon to have tests hanging on some of the
      BuildBot workers.  For example, the ppc64be/ppc64le+gdbserver builders
      are especially in a bad state when it comes to testing GDB/gdbserver,
      and we can have builds that take an absurd amount of time to
      finish (almost 1 week for one single build, for example).
      
      It may be hard to diagnose these failures, because sometimes we don't
      have access to the faulty systems, and other times we're just too busy
      to wait and check which test is actually hanging.  During one of our
      conversations about the topic, someone proposed that it would be a
      good idea to have a timestamp put together with stdout output, so that
      we can come back later and examine which tests are taking too long to
      complete.
      
      Here's my proposal to do this.  The very first thing I tried to do was
      to use "ts(1)" to achieve this feature, and it obviously worked, but
      the problem is that I'm afraid "ts(1)" may not be widely available on
      every system we support.  Therefore, I decided to implement a *very*
      simple version of "ts(1)", in Python 3, which basically does the same
      thing: iterate over the stdin lines, and prepend a timestamp onto
      them.
      
      As for testsuite/Makefile.in, the user can now specify two new
      variables to enable timestamp'ed output: TS (which enables the
      output), and TS_FORMAT (optional, used to specify another timestamp
      format according to "strftime").
      
      Here's an example of how the output looks like:
      
        ...
        [Nov 22 17:07:19] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/call-strs.exp ...
        [Nov 22 17:07:19] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/step-over-no-symbols.exp ...
        [Nov 22 17:07:20] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/all-architectures-6.exp ...
        [Nov 22 17:07:20] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/hashline3.exp ...
        [Nov 22 17:07:20] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/max-value-size.exp ...
        [Nov 22 17:07:20] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/quit-live.exp ...
        [Nov 22 17:07:46] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/paginate-bg-execution.exp ...
        [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp ...
        [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/gcore-relro.exp ...
        [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/watchpoint-delete.exp ...
        [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/breakpoint-in-ro-region.exp ...
        [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/vla-sideeffect.exp ...
        [Nov 22 17:07:57] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/unload.exp ...
        ...
      
      (What, gdb.base/quit-live.exp is taking 26 seconds to complete?!)
      
      Output to stderr is not timestamp'ed, but I don't think that will be a
      problem for us.  If it is, we can revisit the solution and extend it.
      
      gdb/testsuite/ChangeLog:
      2018-11-25  Sergio Durigan Junior  <sergiodj@redhat.com>
      
      	* Makefile.in (TIMESTAMP): New variable.
      	(check-single): Add $(TIMESTAMP) to the end of $(DO_RUNTEST)
      	command.
      	(check-single-racy): Likewise.
      	(check/%.exp): Likewise.
      	(check-racy/%.exp): Likewise.
      	(workers/%.worker): Likewise.
      	(build-perf): Likewise.
      	(check-perf): Likewise.
      	* README: Describe new "TS" and "TS_FORMAT" variables.
      	* print-ts.py: New file.
      f63c03b4
    • Tom Tromey's avatar
      Remove obsolete comments from field_fmt · b5b12e1d
      Tom Tromey authored
      This removes some comments that I believe were made obsolete by the
      recent change to cli_ui_out::do_field_fmt.  The comment in mi_ui_out
      probably was just copy/paste, because I think aligning never made
      sense in an MI context.
      
      gdb/ChangeLog
      2018-11-25  Tom Tromey  <tom@tromey.com>
      
      	* ui-out.c (ui_out::field_fmt): Remove comment.
      	* tui/tui-out.c (tui_ui_out::do_field_fmt): Remove comment.
      	* mi/mi-out.c (mi_ui_out::do_field_fmt): Remove comment.
      b5b12e1d
  4. Nov 25, 2018
  5. Nov 24, 2018
  6. Nov 23, 2018
    • Alan Hayward's avatar
      gdbserver: AArch64: Remove cannot_fetch/store_register · 50138245
      Alan Hayward authored
      The cannot store/fetch register functions are only used for checking
      if a register can be accessed using PEEKUSER/POKEUSER.
      The AArch64 port doesn't support this method of access, so remove the
      unused functions.
      
      gdb/gdbserver:
      	* linux-aarch64-low.c (aarch64_cannot_store_register): Remove.
      	(aarch64_cannot_fetch_register): Likewise.
      	(struct linux_target_ops): Update references.
      50138245
    • Pedro Alves's avatar
      Remove declarations of is_running/is_stopped/is_exited · 6af05e64
      Pedro Alves authored
      The recent commit 08036331 ("Per-inferior thread list, thread
      ranges/iterators, down with ALL_THREADS, etc.") removed the
      definitions of is_running/is_stopped/is_exited but missed removing the
      declarations.
      
      gdb/ChangeLog:
      2018-11-23  Pedro Alves  <palves@redhat.com>
      
      	* gdbthread.h (enum thread_state): Move comments here.
      	(is_running, is_stopped, is_exited): Remove declarations.
      6af05e64
    • GDB Administrator's avatar
      Automatic date update in version.in · 8e4b6392
      GDB Administrator authored
      8e4b6392
    • 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
    • Pedro Alves's avatar
      Fix follow_exec latent problem · c4c17fb0
      Pedro Alves authored
      A following commit to make each inferior have its own thread list
      exposes a problem with bf93d7ba ("Add thread after updating gdbarch
      when exec'ing"), which is that we can't defer adding the thread
      because that breaks try_open_exec_file which deep inside ends up
      calling inferior_thread():
      
       #5  0x0000000000637c78 in internal_error(char const*, int, char const*, ...) (file=0xc151f8 "src/gdb/thread.c", line=165, fmt=0xc15180 "%s: Assertion `%s' failed.") at src/gdb/common/errors.c:55
       #6  0x00000000008a3d80 in inferior_thread() () at src/gdb/thread.c:165
       #7  0x0000000000456f91 in try_thread_db_load_1(thread_db_info*) (info=0x277eb00) at src/gdb/linux-thread-db.c:830
       #8  0x0000000000457554 in try_thread_db_load(char const*, int) (library=0xb01a4f "libthread_db.so.1", check_auto_load_safe=0)
           at src/gdb/linux-thread-db.c:1002
       #9  0x0000000000457861 in try_thread_db_load_from_sdir() () at src/gdb/linux-thread-db.c:1079
       #10 0x0000000000457b72 in thread_db_load_search() () at src/gdb/linux-thread-db.c:1134
       #11 0x0000000000457d29 in thread_db_load() () at src/gdb/linux-thread-db.c:1192
       #12 0x0000000000457e51 in check_for_thread_db() () at src/gdb/linux-thread-db.c:1244
       #13 0x0000000000457ed2 in thread_db_new_objfile(objfile*) (objfile=0x270ff60) at src/gdb/linux-thread-db.c:1273
       #14 0x000000000045a92e in std::_Function_handler<void (objfile*), void (*)(objfile*)>::_M_invoke(std::_Any_data const&, objfile*&&) (__functor=..., __args#0=@0x7ffef3efe140: 0x270ff60) at /usr/include/c++/7/bits/std_function.h:316
       #15 0x00000000007bbebf in std::function<void (objfile*)>::operator()(objfile*) const (this=0x24e1d18, __args#0=0x270ff60)
           at /usr/include/c++/7/bits/std_function.h:706
       #16 0x00000000007bba86 in gdb::observers::observable<objfile*>::notify(objfile*) const (this=0x117ce80 <gdb::observers::new_objfile>, args#0=0x270ff60) at src/gdb/common/observable.h:106
       #17 0x0000000000856000 in symbol_file_add_with_addrs(bfd*, char const*, symfile_add_flags, section_addr_info*, objfile_flags, objfile*) (abfd=0x1d7dae0, name=0x254bfc0 "/ho
      
      The problem is latent currently because inferior_thread() at that
      point manages to return a thread, even though it's the wrong one (of
      the old inferior).
      
      The problem originally fixed by bf93d7ba was:
      
          (...) we should avoid doing register reads
          after a process does an exec and before we've updated that inferior's
          gdbarch.  Otherwise, we may interpret the registers using the wrong
          architecture.
      
          (...) The call to "add_thread" done just after adding the inferior is
          problematic, because it ends up reading the registers (because the ptid
          is re-used, we end up doing a switch_to_thread to it, which tries to
          update stop_pc). (...)
      
      The register-reading issue is no longer a problem nowadays, ever since
      switch_to_thread stopped reading the stop_pc in git commit
      f2ffa92b ("gdb: Eliminate the 'stop_pc' global").
      
      So this commit basically reverts bf93d7ba.
      
      gdb/ChangeLog:
      2018-11-22  Pedro Alves  <palves@redhat.com>
      
      	* infrun.c (follow_exec) <set follow-exec new>: Add thread and
      	switch to it before calling into try_open_exec_file.
      c4c17fb0
    • Pedro Alves's avatar
      Avoid find_thread_ptid with null_ptid · 151bb4a5
      Pedro Alves authored
      With a following patch, find_thread_ptid will first find the inferior
      for the passed-in ptid, using find_inferior_pid, and then look for the
      thread in that inferior's thread list.  If we pass down null_ptid to
      find_thread_ptid then that means we'll end up passing 0 to
      find_inferior_pid, which hits this assertion:
      
      >   struct inferior *
      >   find_inferior_pid (int pid)
      >   {
      >     struct inferior *inf;
      >
      >     /* Looking for inferior pid == 0 is always wrong, and indicative of
      >	a bug somewhere else.  There may be more than one with pid == 0,
      >	for instance.  */
      >     gdb_assert (pid != 0);
      
      This patch prepares for the change, by avoiding passing down null_ptid
      to find_thread_ptid or to functions that naturally use it, such as the
      target_pid_to_str call in inferior.c:add_inferior.  In that latter
      case, the patch changes GDB output,
      
      from:
       (gdb) add-inferior
       [New inferior 2 (process 0)]
      
      to:
       (gdb) add-inferior
       [New inferior 2]
      
      which seems like a good change to me.  It might not even make sense to
      talk about "process" for the current target, for example.
      
      The python_on_normal_stop change ends up avoiding looking up the
      same thread twice (inferior_thread also does a look up).
      
      gdb/ChangeLog:
      2018-11-22  Pedro Alves  <palves@redhat.com>
      
      	* cli/cli-interp.c (cli_on_user_selected_context_changed): Use
      	inferior_thread instead of find_thread_ptid, and only when
      	inferior_ptid is not null_ptid.
      	* inferior.c (add_inferior): Don't include target_pid_to_str
      	output when the inferior is not started.
      	* python/py-inferior.c (python_on_normal_stop): Don't use
      	find_thread_ptid.
      	(tui_on_user_selected_context_changed): Use inferior_thread
      	instead of find_thread_ptid, and only when inferior_ptid is not
      	null_ptid.
      151bb4a5
  7. Nov 22, 2018
    • GDB Administrator's avatar
      Automatic date update in version.in · 79a9468c
      GDB Administrator authored
      79a9468c
    • John Darrington's avatar
      S12Z opcodes: Fix bug disassembling certain shift instructions. · 27f42a4d
      John Darrington authored
      Shift and rotate instructions when the number of bit positions
      was an immediate value greater than 1 were incorrectly disassembled.
      This change fixes that problem and extends the test to check for
      it.
      
      gas/ChangeLog:
      
        testsuite/gas/s12z/shift.s: Add new test case.
        testsuite/gas/s12z/shift.d: Add expected result.
      
      opcodes/ChangeLog:
      
        s12z-dis.c (print_insn_shift) [SB_REG_REG_N]: Enter special case
        if the postbyte matches the appropriate pattern.
      27f42a4d
    • John Darrington's avatar
      S12Z: Add alias instructions BHS and BLO. · 51534d7a
      John Darrington authored
      These are documented by NXP as alternative mnemonics for BCC and BCS
      respectively.
      
      gas/ChangeLog:
      
              * config/tc-s12z.c (opcodes): bhs, blo: New members.
      	* testsuite/gas/s12z/bra.d: Add tests for aliases.
      	* testsuite/gas/s12z/bra.s: Add tests for aliases.
      51534d7a
    • Benno Fünfstück's avatar
      Make command-repeat work after gdb.execute · 1c97054b
      Benno Fünfstück authored
      Since commit
      
        56bcdbea ("Let gdb.execute handle multi-line commands")
      
      command repetition after using the `gdb.execute` Python function
      fails (the previous command is not repeated anymore). This happens
      because read_command_lines_1 sets dont_repeat, but the call to
      prevent_dont_repeat in execute_gdb_command is later.
      
      The fix is to move the call to prevent_dont_repeat to the beginning of
      the function.
      
      Tested on my laptop (ArchLinux-x86_64).
      
      gdb/ChangeLog:
      
      	PR python/23714
      	* gdb/python/python.c (execute_gdb_command): Call
      	prevent_dont_repeat earlier to avoid affecting dont_repeat.
      
      gdb/testuite/ChangeLog:
      
      	PR python/23714
      	* gdb.python/python.exp: Test command repetition after
      	gdb.execute.
      1c97054b
    • Jozef Lawrynowicz's avatar
      Fix linking MSP430 files created by gcc's LTO optimizer. · ca94519e
      Jozef Lawrynowicz authored
      When invoking GCC with "-g -flto", the compiler will create LTO objects
      with debug information. The objects created are "simple ELF" objects (see
      libiberty/simple-object-elf.c) and do not have target-specific sections.
      
      When the MSP430 linker sees one of these objects without a .MSP430.attributes
      section it errors:
      
      > error: /tmp/cc4LhbEI.ltrans0.ltrans.o uses MSP430X instructions but /tmp/ccynqIwudebugobj uses unknown
      > error: /tmp/cc4LhbEI.ltrans0.ltrans.o uses the small code model whereas /tmp/ccynqIwudebugobj uses the unknown code model
      > error: /tmp/cc4LhbEI.ltrans0.ltrans.o uses the small data model whereas /tmp/ccynqIwudebugobj uses the unknown data model
      > error: /tmp/cc4LhbEI.ltrans0.ltrans.o uses the small code model but /tmp/ccynqIwudebugobj uses the unknown data model
      > failed to merge target specific data of file /tmp/cc4LhbEI.ltrans0.ltrans.o
      
      The following patch allows these debug LTO objects to be linked with other
      MSP430 objects even if they do not have a .MSP430.attributes section.
      
      bfd	* elf32-msp430.c (elf32_msp430_merge_mspabi_attributes): Do not
      	error when .MSP430.attributes section is missing from objects
      	created by LTO.
      ca94519e
  8. Nov 21, 2018
    • Andrew Burgess's avatar
      gdb/riscv: Add target description support · b5ffee31
      Andrew Burgess authored
      This commit adds target description support for riscv.
      
      I've used the split feature approach for specifying the architectural
      features, and the CSR feature is auto-generated from the riscv-opc.h
      header file.
      
      If the target doesn't provide a suitable target description then GDB
      will build one by looking at the bfd headers.
      
      This commit does not implement target description creation for the
      Linux or FreeBSD native targets, both of these will need to add
      read_description methods into their respective target classes, which
      probe the target features, and then call
      riscv_create_target_description to build a suitable target
      description.  Until this is done Linux and FreeBSD will get the same
      default target description based on the bfd that bare-metal targets
      get.
      
      I've only added feature descriptions for 32 and 64 bit registers, 128
      bit registers (for RISC-V) are not supported in the reset of GDB yet.
      
      This commit removes the special reading of the MISA register in order
      to establish the target features, this was only used for figuring out
      the f-register size, and even that wasn't done consistently.  We now
      rely on the target to tell us what size of registers it has (or look
      in the BFD as a last resort).  The result of this is that we should
      now support RV64 targets with 32-bit float, though I have not
      extensively tested this combination yet.
      
      	* Makefile.in (ALL_TARGET_OBS): Add arch/riscv.o.
      	(HFILES_NO_SRCDIR): Add arch/riscv.h.
      	* arch/riscv.c: New file.
      	* arch/riscv.h: New file.
      	* configure.tgt: Add cpu_obs list of riscv, move riscv-tdep.o into
      	this list, and add arch/riscv.o.
      	* features/Makefile: Add riscv features.
      	* features/riscv/32bit-cpu.c: New file.
      	* features/riscv/32bit-cpu.xml: New file.
      	* features/riscv/32bit-csr.c: New file.
      	* features/riscv/32bit-csr.xml: New file.
      	* features/riscv/32bit-fpu.c: New file.
      	* features/riscv/32bit-fpu.xml: New file.
      	* features/riscv/64bit-cpu.c: New file.
      	* features/riscv/64bit-cpu.xml: New file.
      	* features/riscv/64bit-csr.c: New file.
      	* features/riscv/64bit-csr.xml: New file.
      	* features/riscv/64bit-fpu.c: New file.
      	* features/riscv/64bit-fpu.xml: New file.
      	* features/riscv/rebuild-csr-xml.sh: New file.
      	* riscv-tdep.c: Add 'arch/riscv.h' include.
      	(riscv_gdb_reg_names): Delete.
      	(csr_reggroup): New global.
      	(struct riscv_register_alias): Delete.
      	(struct riscv_register_feature): New structure.
      	(riscv_register_aliases): Delete.
      	(riscv_xreg_feature): New global.
      	(riscv_freg_feature): New global.
      	(riscv_virtual_feature): New global.
      	(riscv_csr_feature): New global.
      	(riscv_create_csr_aliases): New function.
      	(riscv_read_misa_reg): Delete.
      	(riscv_has_feature): Delete.
      	(riscv_isa_xlen): Simplify, just return cached xlen.
      	(riscv_isa_flen): Simplify, just return cached flen.
      	(riscv_has_fp_abi): Update for changes in struct gdbarch_tdep.
      	(riscv_register_name): Update to make use of tdesc_register_name.
      	Look up xreg and freg names in the new globals riscv_xreg_feature
      	and riscv_freg_feature.  Don't supply csr aliases here.
      	(riscv_fpreg_q_type): Delete.
      	(riscv_register_type): Use tdesc_register_type in almost all
      	cases, override the returned type in a few specific cases only.
      	(riscv_print_one_register_info): Handle errors reading registers.
      	(riscv_register_reggroup_p): Use tdesc_register_in_reggroup_p for
      	registers that are otherwise unknown to GDB.  Also check the
      	csr_reggroup.
      	(riscv_print_registers_info): Remove assert about upper register
      	number, and use gdbarch_register_reggroup_p instead of
      	short-cutting.
      	(riscv_find_default_target_description): New function.
      	(riscv_check_tdesc_feature): New function.
      	(riscv_add_reggroups): New function.
      	(riscv_setup_register_aliases): New function.
      	(riscv_init_reggroups): New function.
      	(_initialize_riscv_tdep): Add calls to setup CSR aliases, and
      	setup register groups.  Register new riscv debug variable.
      	* riscv-tdep.h: Add 'arch/riscv.h' include.
      	(struct gdbarch_tdep): Remove abi union, and add
      	riscv_gdbarch_features field.  Remove cached quad floating point
      	type, and provide initialisation for double type field.
      	* target-descriptions.c (maint_print_c_tdesc_cmd): Add riscv to
      	the list of targets using the feature based target descriptions.
      	* NEWS: Mention target description support.
      
      gdb/doc/ChangeLog:
      
      	* gdb.texinfo (Standard Target Features): Add RISC-V Features
      	sub-section.
      b5ffee31
    • Pedro Alves's avatar
      valops.c: Overload resolution code: Rename parameters/locals · 38139a96
      Pedro Alves authored
      While looking over this code, I thought the names of the parameters to
      find_oload_champ and related functions and locals were a bit too
      cryptic.  For example, FN_LIST holds methods, not free functions.
      Free-functions are in OLOAD_SYMS.
      
      This patch renames parameters/variables to the more obvious
      methods/xmethods/functions instead.
      
      gdb/ChangeLog:
      2018-11-21  Pedro Alves  <palves@redhat.com>
      
      	* valops.c (find_method_list, value_find_oload_method_list)
      	(find_overload_match, find_oload_champ): Rename parameters and
      	locals.
      38139a96
    • Pedro Alves's avatar
      valops.c: Some more gdb::array_view · 85cca2bc
      Pedro Alves authored
      This commit replaces some more use of pointer+length pairs in the
      overload resolution code with gdb::array_view.
      
      find_oload_champ's interface is simplified/normalized: the xmethods
      parameter is converted from std::vector to array pointer, and then the
      num_fns parameter is always passed in, no matter the array which is
      non-NULL.  I tweaked the formatting of callers a little bit here and
      there so that the 3 optional parameters are all in the same line.  (I
      tried making the 3 optional array parameters be array_views, but the
      resulting code didn't look as nice.)
      
      gdb/ChangeLog:
      2018-11-21  Pedro Alves  <palves@redhat.com>
      
      	* valops.c (find_method_list): Replace pointer and length
      	parameters with an gdb::array_view.  Adjust.
      	(value_find_oload_method_list): Likewise.
      	(find_overload_match): Use gdb::array_view for methods list.
      	Adjust to find_oload_champ interface change.
      	(find_oload_champ): 'xm_worker_vec' parameter now a pointer/array.
      	'num_fns' parameter now a size_t.  Eliminate 'fn_count' local.
      85cca2bc
    • Pedro Alves's avatar
      C++ify badness_vector, fix leaks · 82ceee50
      Pedro Alves authored
      badness_vector is currently an open coded vector.  This reimplements
      it as a std::vector.
      
      This fixes a few leaks as well:
      
       - find_oload_champ is leaking every badness vector calculated bar the
         one returned.
      
       - bv->rank is always leaked, since callers of rank_function only
         xfree the badness_vector pointer, not bv->rank.
      
      gdb/ChangeLog:
      2018-11-21  Pedro Alves  <palves@redhat.com>
      
      	* gdbtypes.c (compare_badness): Change type of parameters to const
      	reference.  Adjust to badness_vector being a std::vector now.
      	(rank_function): Adjust to badness_vector being a std::vector now.
      	* gdbtypes.h (badness_vector): Now a typedef to std::vector.
      	(LENGTH_MATCH): Delete.
      	(compare_badness): Change type of parameters to const reference.
      	(rank_function): Return a badness_vector by value now.
      	(find_overload_match): Adjust to badness_vector being a
      	std::vector now.  Remove cleanups.
      	(find_oload_champ_namespace): 'oload_champ_bv' parameter now a
      	badness_vector pointer.
      	(find_oload_champ_namespace_loop): 'oload_champ_bv' parameter now
      	a badness_vector pointer.  Adjust to badness_vector being a
      	std::vector now.  Remove cleanups.
      	(find_oload_champ): 'oload_champ_bv' parameter now
      	a badness_vector pointer.  Adjust to badness_vector being a
      	std::vector now.  Remove cleanups.
      82ceee50
    • Pedro Alves's avatar
      Eliminate make_symbol_overload_list-related globals & cleanup · 0891c3cc
      Pedro Alves authored
      This gets rid of a few globals and a cleanup.
      
      make_symbol_overload_list & friends currently maintain a global
      open-coded vector.  Reimplement that with a std::vector, trickled down
      through the functions.  Rename a few functions from "make_" to "add_"
      for clarity.
      
      gdb/ChangeLog:
      2018-11-21  Pedro Alves  <palves@redhat.com>
      
      	* cp-support.c (sym_return_val_size, sym_return_val_index)
      	(sym_return_val): Delete.
      	(overload_list_add_symbol): Add std::vector parameter.  Adjust to
      	add to the vector.
      	(make_symbol_overload_list): Adjust to return a std::vector
      	instead of maintaining a global open coded vector.
      	(make_symbol_overload_list_block): Add std::vector parameter.
      	(make_symbol_overload_list_block): Rename to ...
      	(add_symbol_overload_list_block): ... this and add std::vector
      	parameter.
      	(make_symbol_overload_list_namespace): Rename to ...
      	(add_symbol_overload_list_namespace): ... this and add std::vector
      	parameter.
      	(make_symbol_overload_list_adl_namespace): Rename to ...
      	(add_symbol_overload_list_adl_namespace): ... this and add
      	std::vector parameter.
      	(make_symbol_overload_list_adl): Delete.
      	(add_symbol_overload_list_adl): New.
      	(make_symbol_overload_list_using): Rename to ...
      	(add_symbol_overload_list_using): ... this and add std::vector
      	parameter.
      	(make_symbol_overload_list_qualified): Rename to ...
      	(add_symbol_overload_list_qualified): ... this and add std::vector
      	parameter.
      	* cp-support.h: Include "common/array-view.h" and <vector>.
      	(make_symbol_overload_list): Change return type to std::vector.
      	(make_symbol_overload_list_adl): Delete declaration.
      	(add_symbol_overload_list_adl): New declaration.
      	* valops.c (find_overload_match): Local 'oload_syms' now a
      	std::vector.
      	(find_oload_champ_namespace): 'oload_syms' parameter now a
      	std::vector pointer.
      	(find_oload_champ_namespace_loop): 'oload_syms' parameter now a
      	std::vector pointer.  Adjust to new make_symbol_overload_list
      	interface.
      0891c3cc
    • Pedro Alves's avatar
      invoke_xmethod & array_view · 6b1747cd
      Pedro Alves authored
      This replaces more pointer+length with gdb::array_view.  This time,
      around invoke_xmethod, and then propagating the fallout around, which
      inevitably leaks to the overload resolution code.
      
      There are several places in the code that want to grab a slice of an
      array, by advancing the array pointer, and decreasing the length
      pointer.  This patch introduces a pair of new
      gdb::array_view::slice(...) methods to make that convenient and clear.
      Unit test included.
      
      gdb/ChangeLog:
      2018-11-21  Pedro Alves  <palves@redhat.com>
      
      	* common/array-view.h (array_view::splice(size_type, size_t)): New.
      	(array_view::splice(size_type)): New.
      	* eval.c (eval_call, evaluate_funcall): Adjust to use array_view.
      	* extension.c (xmethod_worker::get_arg_types): Adjust to return an
      	std::vector.
      	(xmethod_worker::get_result_type): Adjust to use gdb::array_view.
      	* extension.h: Include "common/array-view.h".
      	(xmethod_worker::invoke): Adjust to use gdb::array_view.
      	(xmethod_worker::get_arg_types): Adjust to return an std::vector.
      	(xmethod_worker::get_result_type): Adjust to use gdb::array_view.
      	(xmethod_worker::do_get_arg_types): Adjust to use std::vector.
      	(xmethod_worker::do_get_result_type): Adjust to use
      	gdb::array_view.
      	* gdbtypes.c (rank_function): Adjust to use gdb::array_view.
      	* gdbtypes.h: Include "common/array-view.h".
      	(rank_function): Adjust to use gdb::array_view.
      	* python/py-xmethods.c (python_xmethod_worker::invoke)
      	(python_xmethod_worker::do_get_arg_types)
      	(python_xmethod_worker::do_get_result_type)
      	(python_xmethod_worker::invoke): Adjust to new interfaces.
      	* valarith.c (value_user_defined_cpp_op, value_user_defined_op)
      	(value_x_binop, value_x_unop): Adjust to use gdb::array_view.
      	* valops.c (find_overload_match, find_oload_champ_namespace)
      	(find_oload_champ_namespace_loop, find_oload_champ): Adjust to use
      	gdb:array_view and the new xmethod_worker interfaces.
      	* value.c (result_type_of_xmethod, call_xmethod): Adjust to use
      	gdb::array_view.
      	* value.h (find_overload_match, result_type_of_xmethod)
      	(call_xmethod): Adjust to use gdb::array_view.
      	* unittests/array-view-selftests.c: Add slicing tests.
      6b1747cd
    • Pedro Alves's avatar
      Use gdb:array_view in call_function_by_hand & friends · e71585ff
      Pedro Alves authored
      This replaces a few uses of pointer+length with gdb::array_view, in
      call_function_by_hand and related code.
      
      Unfortunately, due to -Wnarrowing, there are places where we can't
      brace-initialize an gdb::array_view without an ugly-ish cast.  To
      avoid the cast, this patch introduces a gdb::make_array_view function.
      Unit tests included.
      
      This patch in isolation may not look so interesting, due to
      gdb::make_array_view uses, but I think it's still worth it.  Some of
      the gdb::make_array_view calls disappear down the series, and others
      could be eliminated with more (non-trivial) gdb::array_view
      detangling/conversion (e.g. code around eval_call).  See this as a "we
      have to start somewhere" patch.
      
      gdb/ChangeLog:
      2018-11-21  Pedro Alves  <palves@redhat.com>
      
      	* ada-lang.c (ada_evaluate_subexp): Adjust to pass an array_view.
      	* common/array-view.h (make_array_view): New.
      	* compile/compile-object-run.c (compile_object_run): Adjust to
      	pass an array_view.
      	* elfread.c (elf_gnu_ifunc_resolve_addr): Adjust.
      	* eval.c (eval_call): Adjust to pass an array_view.
      	(evaluate_subexp_standard): Adjust to pass an array_view.
      	* gcore.c (call_target_sbrk): Adjust to pass an array_view.
      	* guile/scm-value.c (gdbscm_value_call): Likewise.
      	* infcall.c (push_dummy_code): Replace pointer + size parameters
      	with an array_view parameter.
      	(call_function_by_hand, call_function_by_hand_dummy): Likewise and
      	adjust.
      	* infcall.h: Include "common/array-view.h".
      	(call_function_by_hand, call_function_by_hand_dummy): Replace
      	pointer + size parameters with an array_view parameter.
      	* linux-fork.c (inferior_call_waitpid): Adjust to use array_view.
      	* linux-tdep.c (linux_infcall_mmap): Likewise.
      	* objc-lang.c (lookup_objc_class, lookup_child_selector)
      	(value_nsstring, print_object_command): Likewise.
      	* python/py-value.c (valpy_call): Likewise.
      	* rust-lang.c (rust_evaluate_funcall): Likewise.
      	* spu-tdep.c (flush_ea_cache): Likewise.
      	* valarith.c (value_x_binop, value_x_unop): Likewise.
      	* valops.c (value_allocate_space_in_inferior): Likewise.
      	* unittests/array-view-selftests.c (run_tests): Add
      	gdb::make_array_view test.
      e71585ff
    • GDB Administrator's avatar
      Automatic date update in version.in · 1b288e9b
      GDB Administrator authored
      1b288e9b
    • Andrew Burgess's avatar
      gdb: Use string_printf to format int fields instead of a fixed size buffer · d63095c4
      Andrew Burgess authored
      This patch removes a FIXME comment from cli-out.c, now instead of
      formatting integers into a fixed size buffer we build a std::string
      and extract the formatted integer from that.
      
      The old code using a fixed size buffer was probably fine (the integer
      was not going to overflow it) and probably slightly more efficient
      (avoids building a std::string) however, given we already have utility
      code in GDB that will allow the 'FIXME' comment to be removed, it
      seems like an easy improvement.
      
      gdb/ChangeLog:
      
      	* cli-out.c (cli_ui_out::do_field_int): Use string_printf rather
      	than a fixed size buffer.
      d63095c4
    • Andrew Burgess's avatar
      gdb: Respect field width and alignment for 'fmt' fields in CLI output · 1871a62d
      Andrew Burgess authored
      Currently the method 'cli_ui_out::do_field_fmt' has this comment:
      
        /* This is the only field function that does not align.  */
      
      The reality is even slightly worse, the 'fmt' field type doesn't
      respect either the field alignment or the field width.  In at least
      one place in GDB we attempt to work around this lack of respect for
      field width by adding additional padding manually.  But, as is often
      the case, this is leading to knock on problems.
      
      Conside the output for 'info breakpoints' when a breakpoint has
      multiple locations.  This example is taken from the testsuite, from
      test gdb.opt/inline-break.exp:
      
        (gdb) info breakpoints
        Num     Type           Disp Enb Address            What
        1       breakpoint     keep y   <MULTIPLE>
        1.1                     y     0x00000000004004ae in func4b at /src/gdb/testsuite/gdb.opt/inline-break.c:64
        1.2                     y     0x0000000000400682 in func4b at /src/gdb/testsuite/gdb.opt/inline-break.c:64
      
      The miss-alignment of the fields shown here is exactly as GDB
      currently produces.
      
      With this patch 'fmt' style fields are now first written into a
      temporary buffer, and then written out as a 'string' field.  The
      result is that the field width, and alignment should now be respected.
      With this patch in place the output from GDB now looks like this:
      
        (gdb) info breakpoints
        Num     Type           Disp Enb Address            What
        1       breakpoint     keep y   <MULTIPLE>
        1.1                         y   0x00000000004004ae in func4b at /src/gdb/testsuite/gdb.opt/inline-break.c:64
        1.2                         y   0x0000000000400682 in func4b at /src/gdb/testsuite/gdb.opt/inline-break.c:64
      
      This patch has been tested on x86-64/Linux with no regressions,
      however, the testsuite doesn't always spot broken output formatting or
      alignment.  I have also audited all uses of 'fmt' fields that I could
      find, and I don't think there are any other places that specifically
      try to work around the lack of width/alignment, however, I could have
      missed something.
      
      gdb/ChangeLog:
      
      	* breakpoint.c (print_one_breakpoint_location): Reduce whitespace,
      	and remove insertion of extra spaces in GDB's output.
      	* cli-out.c (cli_ui_out::do_field_fmt): Update header comment.
      	Layout field into a temporary buffer, and then output it as a
      	string field.
      
      gdb/testsuite/ChangeLog:
      
      	* gdb.opt/inline-break.exp: Add test that info breakpoint output
      	is correctly aligned.
      1871a62d
    • Philippe Waroquiers's avatar
      NEWS: Document the language choice by 'info [types|functions|variables]|rbreak'. · 604c4ca9
      Philippe Waroquiers authored
      gdb/ChangeLog
      2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* NEWS: Document the language choice done by
      	'info [types|functions|variables]|rbreak'.
      604c4ca9
    • Philippe Waroquiers's avatar
      Document language choice in 'info [functions|variables|types]|rbreak' commands · 20813a0b
      Philippe Waroquiers authored
      doc/ChangeLog
      2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* gdb.texinfo (Examining the Symbol Table): Document language choice
      	for 'info types|functions|variables' commands.
      	(Setting Breakpoints): Document language choice to print
      	the functions in which a breakpoint is set.
      20813a0b
    • Philippe Waroquiers's avatar
      Add a test to verify info [functions|variables|types]|rbreak respect language_mode. · fb5e1ed9
      Philippe Waroquiers authored
      2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* gdb.ada/info_auto_lang.exp: New testcase.
      	* gdb.ada/info_auto_lang/global_pack.ads: New file.
      	* gdb.ada/info_auto_lang/proc_in_ada.adb: New file.
      	* gdb.ada/info_auto_lang/some_c.c: New file.
      fb5e1ed9
    • Philippe Waroquiers's avatar
      Use scoped_switch_to_sym_language_if_auto in symtab.c to switch language. · 43d397ca
      Philippe Waroquiers authored
      Use scoped_switch_to_sym_language_if_auto in treg_matches_sym_type_name to
      replace the local logic that was doing the same as the new class
      scoped_switch_to_sym_language_if_auto.
      
      Use scoped_switch_to_sym_language_if_auto inside print_symbol_info, so
      that symbol information is printed in the symbol language when
      language mode is auto.
      This modifies the behaviour of the test dw2-case-insensitive.exp,
      as the function FUNC_lang is now printed with the Fortran syntax
      (as declared in the .S file).
      
      gdb/ChangeLog
      2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* symtab.c (treg_matches_sym_type_name): Use
      	scoped_switch_to_sym_language_if_auto instead of local logic.
      	(print_symbol_info): Use scoped_switch_to_sym_language_if_auto
      	to switch to SYM language when language mode is auto.
      
      gdb/testsuite/ChangeLog
      2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* gdb.dwarf2/dw2-case-insensitive.exp: Update due to auto switch to
      	FUNC_lang language syntax.
      43d397ca
    • Philippe Waroquiers's avatar
      Add class scoped_switch_to_sym_language_if_auto. · 9e6a1ab6
      Philippe Waroquiers authored
      The class scoped_switch_to_sym_language_if_auto allows to switch in a scope
      the current language to the language of a symbol when language mode is
      set to auto.
      
      2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* language.h (scoped_switch_to_sym_language_if_auto): New class.
      9e6a1ab6
    • Philippe Waroquiers's avatar
      Test case for 'info variables|functions' with minimal symbols. · beddd671
      Philippe Waroquiers authored
      2018-11-20  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* gdb.base/info_minsym.c: New file.
      	* gdb.base/info_minsym.exp: New file.
      beddd671