1. 11 Jan, 2019 1 commit
  2. 10 Jan, 2019 39 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.
      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.
    • 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.
      	PR gdb/23712
      	PR symtab/23010
      	* gdb.dwarf2/multidictionary.exp: New file.
    • 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
      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).
      	PR gdb/23712
      	PR symtab/23010
      	* dwarf2read.c (dw2_add_symbol_to_list): Remove.
      	(fixup_go_packaging, new_symbol): Use add_symbol_to_list.
    • 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
      	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.
    • 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
      	PR gdb/23712
      	PR symtab/23010
      	* dictionary.h (struct dictionary): Replace declaration with
      	(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.
    • 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.
      	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.
    • 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,
      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.
      2019-01-10  Pedro Alves  <palves@redhat.com>
      	* breakpoint.c (read_uploaded_action)
      	(create_tracepoint_from_upload): Adjust to use
      	* 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
      	* tracepoint.h (struct uploaded_tp) <cond, actions, step_actions,
      	at_string, cond_string, cmd_strings>: Replace char pointers
      	with gdb::unique_xmalloc_ptr.
    • 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.
      2019-01-10  Pedro Alves  <palves@redhat.com>
      	* solib-target.c (library_list_start_library): Don't xstrdup name.
    • 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.
      2019-01-10  Pedro Alves  <palves@redhat.com>
      	* mdebugread.c (parse_partial_symbols): Use
      	gdb::unique_xmalloc_ptr to manage heap-allocated 'stabsstring'.
    • 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
      	* linux-fork.c (scoped_switch_fork_info)
      	<~scoped_switch_fork_info>: Fix incorrect variable name.
    • Andrew Burgess's avatar
      gdb: Improve scoped_switch_fork_info class · 1ef8573c
      Andrew Burgess authored
      After committing this patch I got this feedback:
      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.
      	* linux-fork.c (scoped_switch_fork_info)
      	<scoped_switch_fork_info>: Make explicit.
      	<~scoped_switch_fork_info>: Wrap core in TRY/CATCH.
    • Nick Clifton's avatar
      Correct changelog entry. · 59aa9b0b
      Nick Clifton authored
    • 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:
      	* testsuite/gas/mips/mips16e2@mips16-pcrel-n64-sym32-1.d:
      	* 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.
    • 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.
      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
      	* psymtab.c (psymtab_storage::psymtab_storage): Update.
    • 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
      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.
    • 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.
      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
      	* dwarf2read.c (dwarf2_create_include_psymtab): Use
      	(build_type_psymtab_dependencies): Likewise.
      	* dbxread.c (dbx_end_psymtab): Use allocate_dependencies.
    • 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
      2019-01-10  Tom Tromey  <tom@tromey.com>
      	* psymtab.c (add_psymbol_to_bcache): Pass psymtab obstack to
      	(allocate_psymtab): Allocate psymtab on the psymtab obstack.
    • 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.
      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):
    • 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.
      2019-01-10  Tom Tromey  <tom@tromey.com>
      	* symfile.c (reread_symbols): Call objfile->reset_psymtabs.
      	* objfiles.h (objfile::reset_psymtabs): New method.
    • 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
      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.
      	(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.
      	(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
      	(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):
    • 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.
      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
      	* psymtab.c (add_psymbol_to_bcache): Update.
      	* psympriv.h (PSYMBOL_SET_NAMES): Take per_bfd argument.
    • 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.
      2019-01-10  Tom Tromey  <tom@tromey.com>
      	* symtab.c (create_demangled_names_hash): Change argument to be an
      	(symbol_set_names): Update.
    • 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.
      2019-01-10  Tom Tromey  <tom@tromey.com>
      	* xcoffread.c (xcoff_initial_scan): Unconditionally call
      	* psymtab.c (init_psymbol_list): Do nothing if already called.
      	* psympriv.h (init_psymbol_list): Add comment.
      	* dwarf2read.c (dwarf2_build_psymtabs): Unconditionally call
      	* dbxread.c (dbx_symfile_read): Unconditionally call
    • 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.
      2019-01-10  Tom Tromey  <tom@tromey.com>
      	* xcoffread.c (scan_xcoff_symtab): Update.
      	* psymtab.c (add_psymbol_to_list): Replace "list" parameter with
      	* 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.
    • 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.
      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
    • 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
      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
      	* dbxread.c (dbx_end_psymtab): Remove some initializations.
    • 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.
      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):
      	* elfread.c: Include mdebugread.h.
    • 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
      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.
    • 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.
      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)
      	(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.
    • 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".
      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.
    • 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.
      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
    • Tom Tromey's avatar
      Remove ALL_OBJFILE_FILETABS · d5da8b3c
      Tom Tromey authored
      This removes ALL_OBJFILE_FILETABS, replacing its uses with ranged for
      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
      	* 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.
    • Tom Tromey's avatar
      Remove ALL_COMPUNIT_FILETABS · 5accd1a0
      Tom Tromey authored
      This removes ALL_COMPUNIT_FILETABS, replacing its uses with ranged for
      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.
      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
      	(info_sources_command, make_source_files_completion_list): Remove
      	* 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
      	* 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
    • 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.
      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
      	* objfiles.h (ALL_COMPUNITS): Remove.
      	* maint.c (count_symtabs_and_blocks): Use objfile_compunits.
      	* cp-support.c (add_symbol_overload_list_qualified): Use
      	* ada-lang.c (ada_collect_symbol_completion_matches)
      	(ada_add_global_exceptions): Use objfile_compunits.
    • Tom Tromey's avatar
      Remove ALL_OBJFILE_COMPUNITS · 592553c4
      Tom Tromey authored
      This removes ALL_OBJFILE_COMPUNITS, replacing its uses with ranged for
      loops.  Because ALL_COMPUNITS is also updated, in some places a
      declaration must be deleted to avoid shadowing.
      2019-01-09  Tom Tromey  <tom@tromey.com>
      	* source.c (select_source_symtab)
      	(forget_cached_source_info_for_objfile): Remove declaration.
      	* mi/mi-cmd-file.c (mi_cmd_file_list_exec_source_files): Remove
      	* maint.c (count_symtabs_and_blocks): Remove declaration.
      	* cp-support.c (add_symbol_overload_list_qualified): Remove
      	* coffread.c (coff_symtab_read): Remove declaration.
      	* symtab.c (lookup_symbol_in_objfile_symtabs)
      	(basic_lookup_transparent_type_1): Use objfile_compunits.
      	(lookup_objfile_from_block, find_pc_sect_compunit_symtab)
      	(info_sources_command, search_symbols)
      	(make_source_files_completion_list): Remove declaration.
      	* ada-lang.c (add_nonlocal_symbols): Use objfile_compunits.
      	(ada_add_global_exceptions): Remove declaration.
      	* linespec.c (iterate_over_all_matching_symtabs): Use
      	* objfiles.h (ALL_OBJFILE_COMPUNITS): Remove.
      	(class objfile_compunits): New.
      	(ALL_COMPUNITS): Use objfile_compunits.
      	* symmisc.c (print_objfile_statistics, maintenance_info_symtabs)
      	(maintenance_check_symtabs, maintenance_info_line_tables): Use
      	* objfiles.c (objfile_relocate1): Use objfile_compunits.
    • Tom Tromey's avatar
      Remove ALL_MSYMBOLS and ALL_OBJFILE_MSYMBOLS · 5325b9bf
      Tom Tromey authored
      This removes the ALL_MSYMBOLS and ALL_OBJFILE_MSYMBOLS macros,
      replacing their uses with ranged for loops.
      In a couple of spots, a new declaration was needed in order to work
      around shadowing; these are just temporary and are removed in a
      subsequent patch.
      2019-01-09  Tom Tromey  <tom@tromey.com>
      	* symtab.c (search_symbols)
      	(default_collect_symbol_completion_matches_break_on): Use
      	* ada-lang.c (ada_lookup_simple_minsym)
      	(ada_collect_symbol_completion_matches): Use objfile_msymbols.
      	* minsyms.c (find_solib_trampoline_target): Use objfile_msymbols.
      	* hppa-tdep.c (hppa_lookup_stub_minimal_symbol): Use
      	* coffread.c (coff_symfile_read): Use objfile_msymbols.
      	* symmisc.c (dump_msymbols): Use objfile_msymbols.
      	* objc-lang.c (find_methods): Use objfile_msymbols.
      	(info_selectors_command, info_classes_command): Likewise.
      	* stabsread.c (scan_file_globals): Use objfile_msymbols.
      	* objfiles.h (class objfile_msymbols): New.
      	(ALL_OBJFILE_MSYMBOLS): Remove.
      	(ALL_MSYMBOLS): Remove.
    • Tom Tromey's avatar
      Remove ALL_OBJFILES_SAFE · cac85af2
      Tom Tromey authored
      This removes the ALL_OBJFILES_SAFE macro, replacing the uses with
      ranged for loops.
      2019-01-09  Tom Tromey  <tom@tromey.com>
      	* common/next-iterator.h (next_adapter): Add Iterator template
      	* objfiles.h (ALL_OBJFILES_SAFE): Remove.
      	(class all_objfiles_safe): New.
      	* jit.c (jit_inferior_exit_hook): Use all_objfiles_safe.
      	* objfiles.c (put_objfile_before): Update comment.
      	(add_separate_debug_objfile): Likewise.
      	(free_all_objfiles): Use all_objfiles_safe.
      	(objfile_purge_solibs): Likewise.
    • Tom Tromey's avatar
      Remove most uses of ALL_OBJFILES · aed57c53
      Tom Tromey authored
      This removes most uses of ALL_OBJFILES, replacing them with ranged for
      loops.  The remaining uses are all in macros, and will be removed in
      subsequent patches.
      2019-01-09  Tom Tromey  <tom@tromey.com>
      	* symtab.c (iterate_over_symtabs, matching_obj_sections)
      	(expand_symtab_containing_pc, lookup_static_symbol)
      	(basic_lookup_transparent_type, find_pc_sect_compunit_symtab)
      	(find_symbol_at_address, find_line_symtab, find_main_name): Use
      	* probe.c (find_probe_by_pc, collect_probes): Use all_objfiles.
      	* breakpoint.c (create_overlay_event_breakpoint)
      	(create_exception_master_breakpoint): Use all_objfiles.
      	* linux-thread-db.c (try_thread_db_load_from_pdir)
      	(has_libpthread): Use all_objfiles.
      	* ada-lang.c (add_nonlocal_symbols): Use all_objfiles.
      	* linespec.c (iterate_over_all_matching_symtabs)
      	(search_minsyms_for_name): Use all_objfiles.
      	* maint.c (maintenance_info_sections): Use all_objfiles.
      	* main.c (captured_main_1): Use all_objfiles.
      	* spu-tdep.c (spu_objfile_from_frame): Use all_objfiles.
      	* guile/scm-objfile.c (gdbscm_objfiles): Use all_objfiles.
      	* guile/scm-pretty-print.c
      	(ppscm_find_pretty_printer_from_objfiles): Use all_objfiles.
      	* solib-spu.c (append_ocl_sos): Use all_objfiles.
      	* symmisc.c (maintenance_print_symbols): Use all_objfiles.
      	(maintenance_print_msymbols): Use all_objfiles.
      	* source.c (select_source_symtab): Use all_objfiles.
      	* jit.c (jit_find_objf_with_entry_addr): Use all_objfiles.
      	* symfile.c (remove_symbol_file_command)
      	(expand_symtabs_matching, map_symbol_filenames): Use
      	* ppc-linux-tdep.c (ppc_linux_spe_context_inferior_created): Use
      	* dwarf2-frame.c (dwarf2_frame_find_fde): Use all_objfiles.
      	* objc-lang.c (find_methods): Use all_objfiles.
      	* objfiles.c (have_partial_symbols, have_full_symbols)
      	(have_minimal_symbols, qsort_cmp)
      	(default_iterate_over_objfiles_in_search_order): Use
      	* hppa-tdep.c (find_unwind_entry): Use all_objfiles.
      	* psymtab.c (maintenance_print_psymbols): Use all_objfiles.
      	(maintenance_check_psymtabs): Use all_objfiles.
      	(ALL_PSYMTABS): Remove.
      	* compile/compile-object-run.c (do_module_cleanup): Use
      	* blockframe.c (find_pc_partial_function): Use all_objfiles.
      	* cp-support.c (add_symbol_overload_list_qualified): Use
      	* windows-tdep.c (windows_iterate_over_objfiles_in_search_order):
      	Use all_objfiles.
      	* dwarf-index-write.c (save_gdb_index_command): Use all_objfiles.
      	* python/py-xmethods.c (gdbpy_get_matching_xmethod_workers): Use
      	* python/py-objfile.c (objfpy_lookup_objfile_by_name)
      	(objfpy_lookup_objfile_by_build_id): Use all_objfiles.
      	* python/py-prettyprint.c (find_pretty_printer_from_objfiles):
      	Uses all_objfiles.
      	* solib.c (solib_read_symbols): Use all_objfiles
    • Tom Tromey's avatar
      Remove ALL_PSPACE_OBJFILES · 99d89cde
      Tom Tromey authored
      This removes the ALL_PSPACE_OBJFILES macro in favor of ranged for
      2019-01-09  Tom Tromey  <tom@tromey.com>
      	* probe.c (parse_probes_in_pspace): Use all_objfiles.
      	* guile/scm-progspace.c (gdbscm_progspace_objfiles): Use
      	* objfiles.h (ALL_PSPACE_OBJFILES): Remove.
      	* symmisc.c (print_symbol_bcache_statistics)
      	(print_objfile_statistics, maintenance_print_objfiles)
      	(maintenance_info_symtabs, maintenance_check_symtabs)
      	(maintenance_expand_symtabs, maintenance_info_line_tables): Use
      	* source.c (forget_cached_source_info): Use all_objfiles.
      	* symfile-debug.c (set_debug_symfile): Use all_objfiles.
      	* elfread.c (elf_gnu_ifunc_resolve_by_cache)
      	(elf_gnu_ifunc_resolve_by_got): Use all_objfiles.
      	* objfiles.c (update_section_map): Use all_objfiles.
      	(shared_objfile_contains_address_p): Likewise.
      	* psymtab.c (maintenance_info_psymtabs): Use all_objfiles.
      	* python/py-progspace.c (pspy_get_objfiles): Use all_objfiles.