1. 12 Jan, 2019 4 commits
    • Joel Brobecker's avatar
      expand a bit the in-GDB help for the "catch exception" help text · 60a90376
      Joel Brobecker authored
      One of our users remarked that the help doesn't mention the fact that
      the "catch exception" supports the special argument "unhandled" to catch
      exceptions which do not have a handler. This patch changes the output
      of...
      
       | (gdb) help catch exception
       | Catch Ada exceptions, when raised.
       | With an argument, catch only exceptions with the given name.
      
      ... to ...
      
       | (gdb) help catch exception
       | Catch Ada exceptions, when raised.
       | Usage: catch exception [ ARG ]
       |
       | Without any argument, stop when any Ada exception is raised.
       | If ARG is "unhandled" (without the quotes), only stop when the exception
       | being raised does not have a handler (and will therefore lead to the task's
       | termination).
       | Otherwise, the catchpoint only stops when the name of the exception being
       | raised is the same as ARG.
      
      gdb/ChangeLog:
      
              * ada-lang.c (_initialize_ada_language): Expand the help text
              for the "catch exception" command.
      
      Tested on x86_64-linux, no regression.
      60a90376
    • Andrew Burgess's avatar
      gdb/testsuite: Don't allow paths to appear in test name · 6eb6fb67
      Andrew Burgess authored
      Having paths in the test names makes it harder to compare results
      between two runs in different directories.  Give the test a name so
      that the path doesn't appear.
      
      gdb/ChangeLog:
      
      	* gdb.base/style.exp: Don't include path in testname.
      6eb6fb67
    • Philippe Waroquiers's avatar
      Fix 'obj' may be used uninitialized warning in symtab.c:matching_obj_sections. · 9d7c67bf
      Philippe Waroquiers authored
      Fix warning:
      
      gdb/symtab.c: In function ‘int matching_obj_sections(obj_section*, obj_section*)’:
      gdb/symtab.c:1024:12: warning: ‘obj’ may be used uninitialized in this function [-Wmaybe-uninitialized]
         if (obj->separate_debug_objfile_backlink != NULL
      
      2019-01-12  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
      
      	* symtab.c (matching_obj_sections): Initialize obj,
      	declare it closer to its usage.
      9d7c67bf
    • GDB Administrator's avatar
      Automatic date update in version.in · 7d62943c
      GDB Administrator authored
      7d62943c
  2. 11 Jan, 2019 2 commits
  3. 10 Jan, 2019 34 commits
    • Tom Tromey's avatar
      Replace inf_threads_iterator with next_iterator · 7cf47dc4
      Tom Tromey authored
      This changes inf_threads_iterator and some range adapters in
      thread-iter.h to use next_iterator and next_adapter instead.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* thread-iter.h (inf_threads_iterator): Use next_iterator.
      	(basic_inf_threads_range): Remove.
      	(inf_threads_range, inf_non_exited_threads_range)
      	(safe_inf_threads_range): Use next_adapter.
      7cf47dc4
    • Keith Seitz's avatar
      gdb/23712: Test case for multidictionary · b56f80d8
      Keith Seitz authored
      This is a test derived from one of the reproducers in symtab/23010.
      The DIE tree used here is typical of compilations with LTO, where an
      artificial parent DIE of language C99 imports DIEs of other languages.
      
      gdb/testsuite/ChangeLog:
      
      	PR gdb/23712
      	PR symtab/23010
      	* gdb.dwarf2/multidictionary.exp: New file.
      b56f80d8
    • Keith Seitz's avatar
      gdb/23712: Remove dw2_add_symbol_to_list · d3cb6808
      Keith Seitz authored
      Finally, we can remove dw2_add_symbol_to_list since the wrapper function
      originally introduced to catch this multi-language scenario is no longer
      needed.  With multi-language dictionaries, we can now support adding
      symbols of multiple languages, negating the need for the assertion
      entirely.
      
      This patch should now fix gdb/23712 (and symtab/23010).  At least it will
      if the NULL buildsym_compunit problem doesn't strike first (see gdb/23773).
      
      gdb/ChangeLog:
      
      	PR gdb/23712
      	PR symtab/23010
      	* dwarf2read.c (dw2_add_symbol_to_list): Remove.
      	(fixup_go_packaging, new_symbol): Use add_symbol_to_list.
      d3cb6808
    • Keith Seitz's avatar
      gdb/23712: Cleanup/Remove temporary dictionary functions · 63a20375
      Keith Seitz authored
      Now that multidictionary's are being used, there is no longer any need
      to retain the four temporary functions introduced in the beginning of
      this series.
      
      This patch removes them.
      
      As an additional cleanup, since the single-language dictionaries are
      no longer used outside dictionary.c, make all of those functions
      static.
      
      gdb/ChangeLog:
      
      	PR gdb/23712
      	PR symtab/23010
      	* dictionary.c (pending_to_vector): Remove.
      	(dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1):
      	Remove _1 suffix, replacing functions of the same name.  Update
      	all callers.
      	(dict_create_hashed, dict_create_hashed_expandable)
      	(dict_create_linear, dict_create_linear_expandable, dict_free)
      	(dict_add_symbol, dict_add_pending, dict_size, dict_empty):
      	Make functions static.
      63a20375
    • Keith Seitz's avatar
      gdb/23712: Use new multidictionary API · b026f593
      Keith Seitz authored
      This patch builds on the previous by enabling the `new' multidictionary
      API.  A lot of the hunks are simply textual replacements of "dict_"
      with "mdict_" and similar transformations.
      
      A word of warning, even with the use of multidictionaries, the code
      still does not satisfactorily fix the reported problems with gdb/23712
      (or gdb/23010). We still have additional changes to make before that
      happens.
      
      gdb/ChangeLog:
      
      	PR gdb/23712
      	PR symtab/23010
      	* dictionary.h (struct dictionary): Replace declaration with
      	multidictionary.
      	(dict_create_hashed, dict_create_hashed_expandable)
      	(dict_create_linear, dict_create_linear_expandable)
      	(dict_free, dict_add_symbol, dict_add_pending, dict_empty)
      	(dict_iterator_first, dict_iterator_next, dict_iter_match_first)
      	(dict_iter_match_next, dict_size): Rename to "mdict_" versions
      	taking multidictionary argument.
      	[ALL_DICT_SYMBOLS]: Update for multidictionary.
      	* block.h (struct block) <dict>: Change to multidictionary
      	and rename `multidict'.
      	* block.c, buildsym.c, jit.c, mdebugread.c, objfiles.c,
      	symmisc.c: Update all dictionary references to multidictionary.
      b026f593
    • Keith Seitz's avatar
      gdb/23712: Introduce multidictionary's · c7748ee9
      Keith Seitz authored
      gdb/23712 is a new manifestation of the now-infamous (at least to me)
      symtab/23010 assertion failure (DICT_LANGUAGE == SYMBOL_LANGAUGE).
      
      An example of the problem (using test case from symtab/23010):
      
      Reading symbols from /home/rdiez/rdiez/arduino/JtagDue/BuildOutput/JtagDue-obj-release/firmware.elf...done.
      (gdb) p SysTick_Handler
      dwarf2read.c:9715: internal-error: void dw2_add_symbol_to_list(symbol*, pending**): Assertion `(*listhead) == NULL || (SYMBOL_LANGUAGE ((*listhead)->symbol[0]) == SYMBOL_LANGUAGE (symbol))' failed.
      A problem internal to GDB has been detected,
      further debugging may prove unreliable.
      Quit this debugging session? (y or n)
      
      This assertion was added specifically to catch this condition (of adding
      symbols of different languages to a single pending list).
      
      The problems we're now seeing on systems utilizing DWARF debugging seem to
      be caused by the use of LTO, which adds a CU with an artificial DIE of
      language C99 which references DIEs in other CUs of language C++.
      
      Thus, we create a dictionary containing symbols of C99 but end up
      stuffing C++ symbols into it, and the dw2_add_symbol_to_list triggers.
      
      The approach taken here to fix this is to introduce multi-language
      dictionaries to "replace" the standard, single-language dictionaries
      used today.
      
      Note to reviewers: This patch introduces some temporary functions to
      aide with review.  This and other artifacts (such as "See dictionary.h"
      which appear incorrect) will all be valid at the end of the series.
      
      This first patch introduces the new multidictionary and its API (which
      is, by design, identical to the old dictionary interface).  It also
      mutates dict_create_hashed and dict_create_linear so that they take
      a std::vector instead of the usual struct pending linked list.  This will
      be needed later on.
      
      This patch does /not/ actually enable multidictionary's.  That is left
      for a subsequent patch in the series.
      
      I've done exhaustive performance testing with this approach, and I've
      attempted to minimize the overhead for the (overwhelmingly) most common
      one-language scenario.
      
      On average, a -g3 -O0 GDB (the one we developers use) will see
      approximately a 4% slowdown when initially reading symbols. [I've
      tested only GDB and firefox with -readnow.]  When using -O2, this
      difference shrinks to ~0.5%.  Since a number of runs with these
      patches actually run /faster/ than unpatched GDB, I conclude that
      these tests have at least a 0.5% error margin.
      
      On our own gdb.perf test suite, again, results appear to be pretty
      negligible.  Differences to unpatched GDB range from -7.8% (yes,
      patched version is again faster than unpatched) to 27%.  All tests
      lying outside "negligible," such as the 27% slowdown, involve a total
      run time of 0.0007 (or less) with smaller numbers of CUs/DSOs (usually 10
      or 100).  In all cases, the follow-up tests with more CUs/DSOs is never
      more than 3% difference to the baseline, unpatched GDB.
      
      In my opinion, these results are satisfactory.
      
      gdb/ChangeLog:
      
      	PR gdb/23712
      	PR symtab/23010
      	* dictionary.c: Include unordered_map.
      	(pending_to_vector): New function.
      	(dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1):
      	Rewrite the non-"_1" functions to take vector instead
      	of linked list.
      	(dict_create_hashed, dict_create_linear, dict_add_pending): Use the
      	"new" _1 versions of the same name.
      	(multidictionary): Define.
      	(std::hash<enum language): New definition.
      	(collate_pending_symbols_by_language, mdict_create_hashed)
      	(mdict_create_hashed_expandable, mdict_create_linear)
      	(mdict_create_linear_expandable, mdict_free)
      	(find_language_dictionary, create_new_language_dictionary)
      	(mdict_add_symbol, mdict_add_pending, mdict_iterator_first)
      	(mdict_iterator_next, mdict_iter_match_first, mdict_iter_match_next)
      	(mdict_size, mdict_empty): New functions.
      	* dictionary.h (mdict_iterator): Define.
      c7748ee9
    • Pedro Alves's avatar
      Fix tracepoint.c:parse_tracepoint_definition leak (and one more) · 67aa1f3c
      Pedro Alves authored
      Coverity points out that gdb/tracepoint.c:parse_tracepoint_definition
      can leak 'cond' in this line:
      
            cond = (char *) xmalloc (2 * xlen + 1);
      
      That can leak because we're in a loop and 'cond' may have already been
      xmalloc'ed into in a previous iteration.  That won't normally happen,
      because we don't expect to see a tracepoint definition with multiple
      conditions listed, but, it doesn't hurt to be pedantically correct,
      in case some stub manages to send something odd back to GDB.
      
      At first I thought I'd just replace the xmalloc call with:
      
            cond = (char *) xrealloc (cond, 2 * xlen + 1);
      
      and be done with it.  However, my pedantic self realizes that
      warning() can throw as well (due to pagination + Ctrl-C), so I fixed
      it using gdb::unique_xmalloc_ptr instead.
      
      While doing this, I noticed that these vectors in struct uploaded_tp:
      
        std::vector<char *> actions;
        std::vector<char *> step_actions;
      
      hold heap-allocated strings, but nothing is freeing the strings,
      AFAICS.
      
      So I ended up switching all the heap-allocated strings in uploaded_tp
      to unique pointers.  This patch is the result of that.
      
      I also wrote an alternative, but similar patch that uses std::string
      throughout instead of gdb::unique_xmalloc_ptr, but in the end reverted
      it because the code didn't look that much better, and I kind of
      dislike replacing pointers with fat std::string's (3 or 4 times the
      size of a pointer) in structures.
      
      gdb/ChangeLog:
      2019-01-10  Pedro Alves  <palves@redhat.com>
      
      	* breakpoint.c (read_uploaded_action)
      	(create_tracepoint_from_upload): Adjust to use
      	gdb::unique_xmalloc_ptr.
      	* ctf.c (ctf_write_uploaded_tp):
      	(SET_ARRAY_FIELD): Use emplace_back.
      	(SET_STRING_FIELD): Adjust to use gdb::unique_xmalloc_ptr.
      	* tracefile-tfile.c (tfile_write_uploaded_tp):
      	* tracepoint.c (parse_tracepoint_definition): Adjust to use
      	gdb::unique_xmalloc_ptr.
      	* tracepoint.h (struct uploaded_tp) <cond, actions, step_actions,
      	at_string, cond_string, cmd_strings>: Replace char pointers
      	with gdb::unique_xmalloc_ptr.
      67aa1f3c
    • Pedro Alves's avatar
      Fix leak in solib-target.c:library_list_start_library · 2f667667
      Pedro Alves authored
      lm_info_target::name is nowadays std::string, so we're leaking the
      result of xstrdup.
      
      gdb/ChangeLog:
      2019-01-10  Pedro Alves  <palves@redhat.com>
      
      	* solib-target.c (library_list_start_library): Don't xstrdup name.
      2f667667
    • Pedro Alves's avatar
      Fix leak in mdebugread.c · 36cb7237
      Pedro Alves authored
      Coverity points out that all the "continue;" statements in the switch
      case in parse_partial_symbols leak STABSTRING.  This is because we
      only release STABSTRING at the end of the scope, with:
      
           	     	  if (stabstring
      		    && stabstring != debug_info->ss + fh->issBase + sh.iss)
      		  xfree (stabstring);
      
      but that bit of code is skipped if a case in the switch statement ends
      with "continue".
      
      Fix this by using gdb::unique_xmalloc_ptr to manage the heap-allocated
      version of 'stabsstring'.
      
      I don't know how to test this.
      
      gdb/ChangeLog:
      2019-01-10  Pedro Alves  <palves@redhat.com>
      
      	* mdebugread.c (parse_partial_symbols): Use
      	gdb::unique_xmalloc_ptr to manage heap-allocated 'stabsstring'.
      36cb7237
    • Andrew Burgess's avatar
      gdb: Fix incorrect variable name in scoped_switch_fork_info · da584958
      Andrew Burgess authored
      The previous commit:
      
        commit 1ef8573c
        Date:   Wed Jan 9 14:02:39 2019 +0000
      
            gdb: Improve scoped_switch_fork_info class
      
      contained a bug, an incorrect variable name was used. Fixed in this
      commit.
      
      gdb/ChangeLog:
      
      	* linux-fork.c (scoped_switch_fork_info)
      	<~scoped_switch_fork_info>: Fix incorrect variable name.
      da584958
    • Andrew Burgess's avatar
      gdb: Improve scoped_switch_fork_info class · 1ef8573c
      Andrew Burgess authored
      After committing this patch I got this feedback:
      
         https://sourceware.org/ml/gdb-patches/2019-01/msg00181.html
      
      This patch makes the constructor of scoped_switch_fork_info explicit,
      and wraps the core of the destructor in a TRY/CATCH block.
      
      I've run this through the testsuite on X86-64/GNU Linux, however, this
      code is not exercised, so this patch is untested.
      
      gdb/ChangeLog:
      
      	* linux-fork.c (scoped_switch_fork_info)
      	<scoped_switch_fork_info>: Make explicit.
      	<~scoped_switch_fork_info>: Wrap core in TRY/CATCH.
      1ef8573c
    • Nick Clifton's avatar
      Correct changelog entry. · 59aa9b0b
      Nick Clifton authored
      59aa9b0b
    • Nick Clifton's avatar
      Stop objdump from displaying control codes embedded in symbol names. · 12add40e
      Nick Clifton authored
      	PR 23963
      binutils* objdump.c (sanitize_string): New function.  Removes control
      	characters from symbol names.
      	(dump_section_header): Use new function.
      	(objdump_print_symname): Likewise.
      	(objdump_print_addr_with_sym): Likewise.
      	(show_line): Likewise.
      	(disassemble_bytes): Likewise.
      	(disassemble_section): Likewise.
      	(load_specific_debug_section): Likewise.
      	(read_section_stabs): Likewise.
      	(print_section_stabs): Likewise.
      	(dump_section): Likewise.
      	(dump_reloc_set): Likewise.
      	(dump_relocs_in_section): Likewise.
      	(dump_bfd): Likewise.
      	(display_any_bfd): Likewise.
      
      gas	* testsuite/gas/mips/mips16-branch-absolute-1.d: Adjust for the fact that
      	control characters are now displayed as escape sequences.
      	* testsuite/gas/mips/mips16-e.d: Likewise.
      	* testsuite/gas/mips/mips16-pcrel-0.d: Likewise.
      	* testsuite/gas/mips/mips16-pcrel-1.d: Likewise.
      	* testsuite/gas/mips/mips16-pcrel-delay-0.d: Likewise.
      	* testsuite/gas/mips/mips16-pcrel-delay-1.d: Likewise.
      	* testsuite/gas/mips/mips16-pcrel-n32-0.d: Likewise.
      	* testsuite/gas/mips/mips16-pcrel-n32-1.d: Likewise.
      	* testsuite/gas/mips/mips16-pcrel-n64-sym32-0.d: Likewise.
      	* testsuite/gas/mips/mips16-pcrel-n64-sym32-1.d: Likewise.
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-0.d: Likewise.
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-1.d: Likewise.
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-delay-0.d: Likewise.
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-delay-1.d: Likewise.
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-n32-0.d: Likewise.
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-n32-1.d: Likewise.
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-n64-sym32-0.d:
      	Likewise.
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-n64-sym32-1.d:
      	Likewise.
      	* testsuite/gas/mips/mipsel16-e.d: Likewise.
      	* testsuite/gas/mips/mipsr6@msa.d: Likewise.
      	* testsuite/gas/mips/mipsr6@relax-swap3.d: Likewise.
      	* testsuite/gas/mips/r6-64-n32.d: Likewise.
      	* testsuite/gas/mips/r6-64-n64.d: Likewise.
      	* testsuite/gas/mips/r6-n32.d: Likewise.
      	* testsuite/gas/mips/r6-n64.d: Likewise.
      	* testsuite/gas/mips/r6.d: Likewise.
      	* testsuite/gas/mips/tmips16-e.d: Likewise.
      	* testsuite/gas/mips/tmipsel16-e.d: Likewise.
      	* testsuite/gas/mn10300/relax.d: Likewise.
      12add40e
    • Tom Tromey's avatar
      Move psymtabs to their own obstack · 8d7bcccb
      Tom Tromey authored
      Previously, the psymtab obstack was just a pointer to the objfile
      obstack.  This patch changes psymtabs to use their own obstack,
      instead.  A gdb::optional is used to avoid unnecessary allocation when
      the obstack is not needed.
      
      After this patch, the psymtab code lifetime model is that, in the core
      psymtab code, objects allocated on the psymtab obstack may point to
      other such objects, or to objects on the per-BFD obstack -- but never
      to the objfile obstack.
      
      Note however that this invariant is only obeyed the core psymtab code,
      and even there not quite fully: there is still a link from the psymtab
      to the full symtab.
      
      Symbol readers are free to work however they like; and in particular,
      even after this patch, in practice all symbol readers violate this
      invariant via the read_symtab_private field.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* objfiles.h (objfile::reset_psymtabs): Update.
      	* objfiles.c (objfile::objfile): Update.
      	* psymtab.h (psymtab_storage::obstack): Update.
      	(psymtab_storage::m_obstack): Use gdb::optional.
      	(class psymtab_storage): Update comment.  Remove objfile
      	parameter.
      	* psymtab.c (psymtab_storage::psymtab_storage): Update.
      8d7bcccb
    • Tom Tromey's avatar
      Make psymtab_storage::free_psymtabs private · b596a3c7
      Tom Tromey authored
      This adds a new psymtab allocation method to psymtab_storage and
      changes the free_psymtabs member to be private.  While not strictly
      necessary, this seems like a decent cleanup, and also makes it simpler
      to move psymtabs off of obstacks entirely, should that prove
      desirable.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* psymtab.h (psymtab_storage::allocate_psymtab): New method.
      	<free_psymtabs>: Now private.
      	* psymtab.c (psymtab_storage::allocate_psymtab): Implement.
      	(allocate_psymtab): Use new method.
      b596a3c7
    • Tom Tromey's avatar
      Add psymtab_storage::allocate_dependencies · a9342b62
      Tom Tromey authored
      This adds a new method to psymtab_storage to allocate storage for
      psymtab dependencies, then changes the symbol readers to use it.  This
      has the effect of moving the storage to the psymtab storage obstack.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* xcoffread.c (xcoff_end_psymtab): Use allocate_dependencies.
      	* psymtab.h (psymtab_storage::allocate_dependencies): New method.
      	* mdebugread.c (parse_partial_symbols): Use
      	allocate_dependencies.
      	* dwarf2read.c (dwarf2_create_include_psymtab): Use
      	allocate_dependencies.
      	(process_psymtab_comp_unit_reader)
      	(build_type_psymtab_dependencies): Likewise.
      	* dbxread.c (dbx_end_psymtab): Use allocate_dependencies.
      a9342b62
    • Tom Tromey's avatar
      Move more allocations to psymtab obstack · 5af70966
      Tom Tromey authored
      This moves a couple more psymtab-related allocations to the psymtab
      obstack.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* psymtab.c (add_psymbol_to_bcache): Pass psymtab obstack to
      	PSYMBOL_SET_LANGUAGE.
      	(allocate_psymtab): Allocate psymtab on the psymtab obstack.
      5af70966
    • Tom Tromey's avatar
      Allocate the address map on the psymtab obstack · 5923a04c
      Tom Tromey authored
      After this patch, the psymtab address map will now be allocated on the
      psymtab obstack rather than the objfile obstack.  This also changes
      the psymtab storage object to make the obstack private; this will be
      used later.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* psymtab.h (psymtab_storage::obstack): New method.
      	<m_obstack>: Rename from obstack; now private.
      	* psymtab.c (psymtab_storage): Update.
      	* dwarf2read.c (create_addrmap_from_index)
      	(create_addrmap_from_aranges, dwarf2_build_psymtabs_hard):
      	Update.
      5923a04c
    • Tom Tromey's avatar
      Introduce objfile::reset_psymtabs · 6d6a12bf
      Tom Tromey authored
      This introduces a new method, objfile::reset_psymtabs, and changes
      reread_symbols to use it.  This method simply destroys the existing
      partial symbols and recreates the psymtab_storage object.
      
      This patch fixes a latent bug -- namely, that reread_symbols should
      clear objfile::psymbol_map, but does not.  I can submit that
      separately if you'd prefer.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* symfile.c (reread_symbols): Call objfile->reset_psymtabs.
      	* objfiles.h (objfile::reset_psymtabs): New method.
      6d6a12bf
    • Tom Tromey's avatar
      Introduce class psymtab_storage · d320c2b5
      Tom Tromey authored
      This introduces a new psymtab_storage class, which holds all
      psymbol-related objects that are independent of the objfile.  (This
      latter contraint explains why psymbol_map was not moved; though this
      could still be done with some work.)
      
      This patch does not yet change where psymtab allocation is done --
      that comes later.  This just wraps everything in a single object to
      make further transformations simpler.
      
      Note that a shared_ptr is used to link from the objfile to the
      psymtab_storage object.  The end goal here is to allow a given symbol
      reader to simply attach to the psymtab_storage object to the BFD, then
      reuse it in later invocations; shared_ptr makes this simple to reason
      about.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* symmisc.c (print_symbol_bcache_statistics): Update.
      	(print_objfile_statistics): Update.
      	* symfile.c (reread_symbols): Update.
      	* psymtab.h (class psymtab_storage): New.
      	* psymtab.c (psymtab_storage): New constructor.
      	(~psymtab_storage): New destructor.
      	(require_partial_symbols): Update.
      	(ALL_OBJFILE_PSYMTABS_REQUIRED): Rewrite.
      	(find_pc_sect_psymtab, find_pc_sect_psymbol)
      	(match_partial_symbol, lookup_partial_symbol, dump_psymtab)
      	(psym_dump, recursively_search_psymtabs, psym_has_symbols)
      	(psym_find_compunit_symtab_by_address, sort_pst_symbols)
      	(start_psymtab_common, end_psymtab_common)
      	(add_psymbol_to_bcache, add_psymbol_to_list, init_psymbol_list)
      	(allocate_psymtab): Update.
      	(psymtab_storage::discard_psymtab): Rename from discard_psymtab.
      	Update.
      	(dump_psymtab_addrmap, maintenance_print_psymbols)
      	(maintenance_check_psymtabs): Update.
      	(class objfile_psymtabs): Move to objfiles.h.
      	* psympriv.h (discard_psymtab): Now inline.
      	(psymtab_discarder::psymtab_discarder): Update.
      	(psymtab_discarder::~psymtab_discarder): Update.
      	(ALL_OBJFILE_PSYMTABS): Rewrite.
      	* objfiles.h (struct objfile) <psymtabs, psymtabs_addrmap,
      	free_psymtabs, psymbol_cache, global_psymbols, static_psymbols>:
      	Remove fields.
      	<partial_symtabs>: New field.
      	(class objfile_psymtabs): Move from psymtab.h.  Update.
      	* objfiles.c (objfile::objfile): Initialize partial_symtabs, not
      	psymbol_cache.
      	(objfile::~objfile): Don't destroy psymbol_cache.
      	* mdebugread.c (parse_partial_symbols): Update.
      	* dwarf2read.c (create_addrmap_from_index)
      	(create_addrmap_from_aranges, dw2_find_pc_sect_compunit_symtab)
      	(process_psymtab_comp_unit_reader, dwarf2_build_psymtabs_hard)
      	(add_partial_subprogram, dwarf2_ranges_read): Update.
      	* dwarf-index-write.c (write_address_map)
      	(write_one_signatured_type, recursively_write_psymbols)
      	(class debug_names, class debug_names, write_psymtabs_to_index):
      	Update.
      d320c2b5
    • Tom Tromey's avatar
      Change symbol_set_names to take an objfile_per_bfd_storage · 1d94a5a3
      Tom Tromey authored
      This changes symbol_set_names to take an objfile_per_bfd_storage
      argument, and updates the users.  It also changes PSYMBOL_SET_NAMES to
      take this argument directly; I feel this clarifies the storage
      location of objects created in psymtab.c.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* symtab.h (SYMBOL_SET_NAMES): Update.
      	(symbol_set_names): Update.
      	(MSYMBOL_SET_NAMES): Update.
      	* symtab.c (symbol_set_names): Change argument to be an
      	objfile_per_bfd_storage.
      	* psymtab.c (add_psymbol_to_bcache): Update.
      	* psympriv.h (PSYMBOL_SET_NAMES): Take per_bfd argument.
      1d94a5a3
    • Tom Tromey's avatar
      Change create_demangled_names_hash to take an objfile_per_bfd_storage · 0f14768a
      Tom Tromey authored
      This changes create_demangled_names_hash to take an
      objfile_per_bfd_storage parameter.  This makes it clearer where it is
      storing the objects it allocates.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* symtab.c (create_demangled_names_hash): Change argument to be an
      	objfile_per_bfd_storage.
      	(symbol_set_names): Update.
      0f14768a
    • Tom Tromey's avatar
      Simplify calls to init_psymbol_list · 6eee24ce
      Tom Tromey authored
      Existing callers to init_psymbol_list were checking to see if psymbols
      had already been initialized.  It seemed better to me to do this check
      directly in init_psymbol_list, simplifying the callers.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* xcoffread.c (xcoff_initial_scan): Unconditionally call
      	init_psymbol_list.
      	* psymtab.c (init_psymbol_list): Do nothing if already called.
      	* psympriv.h (init_psymbol_list): Add comment.
      	* dwarf2read.c (dwarf2_build_psymtabs): Unconditionally call
      	init_psymbol_list.
      	* dbxread.c (dbx_symfile_read): Unconditionally call
      	init_psymbol_list.
      6eee24ce
    • Tom Tromey's avatar
      Change add_psymbol_to_list to use an enum · 75aedd27
      Tom Tromey authored
      This changes add_psymbol_to_list to use an enum, rather than a pointer
      to a vector, to decide where to put the new symbol.  This reduces the
      number of direct references to the static_psymbols and global_psymbols
      members of the objfile, which is handy in a later patch.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* xcoffread.c (scan_xcoff_symtab): Update.
      	* psymtab.c (add_psymbol_to_list): Replace "list" parameter with
      	"where".
      	* mdebugread.c (parse_partial_symbols)
      	(handle_psymbol_enumerators): Update.
      	* dwarf2read.c (add_partial_symbol, load_partial_dies): Update.
      	* dbxread.c (read_dbx_symtab): Update.
      	* psympriv.h (psymbol_placement): New enum.
      	(add_psymbol_to_list): Update.
      75aedd27
    • Tom Tromey's avatar
      Remove parameters from start_psymtab_common · 939652a5
      Tom Tromey authored
      start_psymtab_common takes references to the global_psymbols and
      static_psymbols vectors, but it also has an objfile parameter.  This
      is redundant, so this patch simplifies the function by removing those
      reference parameters.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* xcoffread.c (xcoff_start_psymtab): Remove global_psymbols and
      	static_psymbols parameters.
      	(scan_xcoff_symtab): Update.
      	* psymtab.c (start_psymtab_common): Remove global_psymbols and
      	static_psymbols parameters.
      	* psympriv.h (start_psymtab_common): Update.
      	* mdebugread.c (parse_partial_symbols): Update.
      	* dwarf2read.c (create_partial_symtab): Update.
      	* dbxread.c (read_dbx_symtab): Update.
      	(start_psymtab): Remove global_psymbols and static_psymbols
      	parameters.
      939652a5
    • Tom Tromey's avatar
      Remove some unneeded psymtab initializations · baa62830
      Tom Tromey authored
      allocate_psymtab has long cleared the new psymtab that is returned.
      This patch documents this behavior and then removes some redundant
      initializations.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* xcoffread.c (xcoff_end_psymtab): Remove some initializations.
      	* psymtab.c (allocate_psymtab): Add comment.
      	* psympriv.h (allocate_psymtab): Add comment.
      	* dwarf2read.c (dwarf2_create_include_psymtab): Remove some
      	initializations.
      	* dbxread.c (dbx_end_psymtab): Remove some initializations.
      baa62830
    • Tom Tromey's avatar
      Move some declarations to mdebugread.h · 0e8f53ba
      Tom Tromey authored
      This moves a couple of mdebugread-related declarations from symfile.h
      to mdebugread.h, which seemed more appropriate.
      
      gdb/ChangeLog
      2019-01-10  Tom Tromey  <tom@tromey.com>
      
      	* symfile.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs):
      	Don't declare.
      	* mipsread.c: Include mdebugread.h.
      	* mdebugread.h (mdebug_build_psymtabs, elfmdebug_build_psymtabs):
      	Declare.
      	* elfread.c: Include mdebugread.h.
      0e8f53ba
    • Nick Clifton's avatar
      Sync libiberty sources with gcc master versions. · 1910070b
      Nick Clifton authored
      .	* libiberty: Sync with gcc.  Bring in:
      	2019-01-09  Sandra Loosemore  <sandra@codesourcery.com>
      
      	PR other/16615
      
      	* cp-demangle.c: Mechanically replace "can not" with "cannot".
      	* floatformat.c: Likewise.
      	* strerror.c: Likewise.
      
      	2018-12-22  Jason Merrill  <jason@redhat.com>
      
      	Remove support for demangling GCC 2.x era mangling schemes.
      	* cplus-dem.c: Remove cplus_mangle_opname, cplus_demangle_opname,
      	internal_cplus_demangle, and all subroutines.
      	(libiberty_demanglers): Remove entries for ancient GNU (pre-3.0),
      	Lucid, ARM, HP, and EDG demangling styles.
      	(cplus_demangle): Remove 'work' variable.  Don't call
      	internal_cplus_demangle.
      
      include	* Merge from GCC:
      	2018-12-22  Jason Merrill  <jason@redhat.com>
      
      	* demangle.h: Remove support for ancient GNU (pre-3.0), Lucid,
      	ARM, HP, and EDG demangling styles.
      1910070b
    • Tom Tromey's avatar
      Remove ALL_OBJFILE_PSYMTABS · b22a7c6a
      Tom Tromey authored
      This removes the ALL_OBJFILE_PSYMTABS macro, replacing its uses with
      ranged for loops.
      
      gdb/ChangeLog
      2019-01-09  Tom Tromey  <tom@tromey.com>
      
      	* dbxread.c (dbx_end_psymtab): Use objfile_psymtabs.
      	* mdebugread.c (parse_partial_symbols): Use objfile_psymtabs.
      	* psymtab.c (ALL_OBJFILE_PSYMTABS_REQUIRED): Remove.
      	(psym_map_symtabs_matching_filename, find_pc_sect_psymtab)
      	(psym_lookup_symbol, psym_find_last_source_symtab)
      	(psym_forget_cached_source_info, psym_print_stats)
      	(psym_expand_symtabs_for_function, psym_expand_all_symtabs)
      	(psym_expand_symtabs_with_fullname, psym_map_symbol_filenames)
      	(psym_map_matching_symbols, psym_expand_symtabs_matching)
      	(psym_find_compunit_symtab_by_address)
      	(maintenance_print_psymbols, maintenance_info_psymtabs)
      	(maintenance_check_psymtabs): Use ranged for.
      	* psymtab.h (class objfile_psymtabs): New.
      	(require_partial_symbols): Return objfile_psymtabs.
      	* psympriv.h (ALL_OBJFILE_PSYMTABS): Remove.
      b22a7c6a
    • Tom Tromey's avatar
      Remove ALL_OBJSECTIONS · 3b9d3ac2
      Tom Tromey authored
      This removes the ALL_OBJSECTIONS macro, replacing its uses with ranged
      for loops.
      
      The special code in this macro for noticing a "break" from the inner
      loop was only needed in a single place; so rather than try to
      replicate this, I've simply replaced that use with a "goto".
      
      gdb/ChangeLog
      2019-01-09  Tom Tromey  <tom@tromey.com>
      
      	* symfile.c (overlay_invalidate_all, find_pc_overlay)
      	(find_pc_mapped_section, list_overlays_command)
      	(map_overlay_command, unmap_overlay_command)
      	(simple_overlay_update): Use all_objfiles.
      	* spu-tdep.c (spu_overlay_update): Use all_objfiles.
      	* printcmd.c (info_symbol_command): Use all_objfiles.
      	* objfiles.h (ALL_OBJSECTIONS): Remove.
      	* maint.c (maintenance_translate_address): Use all_objfiles.
      	* gcore.c (gcore_create_callback): Use all_objfiles.
      	(objfile_find_memory_regions): Likewise.
      3b9d3ac2
    • Tom Tromey's avatar
      Remove ALL_OBJFILES and ALL_FILETABS · 8b31193a
      Tom Tromey authored
      This removes the ALL_OBJFILES and ALL_FILETABS macros, replacing them
      with ranged for loops.
      
      gdb/ChangeLog
      2019-01-09  Tom Tromey  <tom@tromey.com>
      
      	* symtab.c (find_line_symtab, info_sources_command)
      	(make_source_files_completion_list): Use objfile_compunits.
      	* source.c (select_source_symtab): Use objfile_compunits.
      	* objfiles.h (struct objfile): Update comment.
      	(ALL_OBJFILES): Remove.
      	(ALL_FILETABS): Remove.
      	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Use
      	objfile_compunits.
      8b31193a
    • Tom Tromey's avatar
      Remove ALL_OBJFILE_FILETABS · d5da8b3c
      Tom Tromey authored
      This removes ALL_OBJFILE_FILETABS, replacing its uses with ranged for
      loops.
      
      gdb/ChangeLog
      2019-01-09  Tom Tromey  <tom@tromey.com>
      
      	* symmisc.c (print_objfile_statistics, dump_objfile)
      	(maintenance_print_symbols): Use compunit_filetabs.
      	* source.c (forget_cached_source_info_for_objfile): Use
      	compunit_filetabs.
      	* objfiles.h (ALL_OBJFILE_FILETABS): Remove.
      	(ALL_FILETABS): Use compunit_filetabs.
      	* objfiles.c (objfile_relocate1): Use compunit_filetabs.
      	* coffread.c (coff_symtab_read): Use compunit_filetabs.
      d5da8b3c
    • Tom Tromey's avatar
      Remove ALL_COMPUNIT_FILETABS · 5accd1a0
      Tom Tromey authored
      This removes ALL_COMPUNIT_FILETABS, replacing its uses with ranged for
      loops.
      
      Because this is still used in the ALL_OBJFILE_FILETABS macro, in some
      places a declaration had to be removed or renamed to avoid shadowing.
      
      gdb/ChangeLog
      2019-01-09  Tom Tromey  <tom@tromey.com>
      
      	* symtab.h (ALL_COMPUNIT_FILETABS): Remove.
      	(compunit_filetabs): New.
      	* symtab.c (iterate_over_some_symtabs, find_pc_sect_line): Use
      	compunit_filetabs.
      	(info_sources_command, make_source_files_completion_list): Remove
      	declaration.
      	* symmisc.c (print_objfile_statistics, dump_objfile)
      	(maintenance_print_symbols): Remove declaration.
      	(maintenance_info_symtabs): Use compunit_filetabs.
      	(maintenance_info_line_tables): Likewise.
      	* source.c (select_source_symtab): Change local variable name.
      	(forget_cached_source_info_for_objfile): Remove declaration.
      	* objfiles.h (ALL_OBJFILE_FILETABS): Use compunit_filetabs.
      	* objfiles.c (objfile_relocate1): Remove declaration.
      	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove
      	declaration.
      	* maint.c (count_symtabs_and_blocks): Use compunit_filetabs.
      	* coffread.c (coff_symtab_read): Remove declaration.
      	* buildsym.c (buildsym_compunit::end_symtab_with_blockvector): Use
      	compunit_filetabs.
      5accd1a0
    • Tom Tromey's avatar
      Remove ALL_COMPUNITS · d8aeb77f
      Tom Tromey authored
      This removes the ALL_COMPUNITS, replacing its uses with two nested
      ranged for loops.
      
      gdb/ChangeLog
      2019-01-09  Tom Tromey  <tom@tromey.com>
      
      	* symtab.c (lookup_objfile_from_block)
      	(find_pc_sect_compunit_symtab, search_symbols)
      	(default_collect_symbol_completion_matches_break_on): Use
      	objfile_compunits.
      	* objfiles.h (ALL_COMPUNITS): Remove.
      	* maint.c (count_symtabs_and_blocks): Use objfile_compunits.
      	* cp-support.c (add_symbol_overload_list_qualified): Use
      	objfile_compunits.
      	* ada-lang.c (ada_collect_symbol_completion_matches)
      	(ada_add_global_exceptions): Use objfile_compunits.
      d8aeb77f