aboutsummaryrefslogtreecommitdiff
path: root/gdb/psymtab.h
AgeCommit message (Collapse)AuthorFilesLines
2024-09-24[gdb/symtab] Don't expand non-Ada CUs for info exceptionsTom de Vries1-1/+3
I noticed when running test-case gdb.ada/info_exc.exp with glibc debug info installed, that the "info exceptions" command that lists all Ada exceptions also expands non-Ada CUs, which includes CUs in /lib64/ld-linux-x86-64.so.2 and /lib64/libc.so.6. Fix this by: - adding a new lang_matcher parameter to the expand_symtabs_matching function, and - using that new parameter in the expand_symtabs_matching call in ada_add_global_exceptions. The new parameter is a hint, meaning implementations are free to ignore it and expand CUs with any language. This is the case for partial symtabs, I'm not sure whether it makes sense to implement support for this there. Conversely, when processing a CU with language C and name "<artificial>" (as produced by GCC LTO), the CU may not really have a single language and we should ignore the lang_matcher. See also commit d2f67711730 ("Fix 'catch exception' with -flto"). Now that we have lang_matcher available, also use it to limit name splitting styles and symbol matchers to those applicable to the matched languages. Without this patch we have (with a gdb build with -O0): ... $ time gdb -q -batch -x outputs/gdb.ada/info_exc/gdb.in.1 > /dev/null real 0m1.866s user 0m2.089s sys 0m0.120s ... and with this patch we have: ... $ time gdb -q -batch -x outputs/gdb.ada/info_exc/gdb.in.1 > /dev/null real 0m0.469s user 0m0.777s sys 0m0.051s ... Or, to put it in terms of number of CUs, we have 1853 CUs: ... $ gdb -q -batch -readnow outputs/gdb.ada/info_exc/foo \ -ex start \ -ex "maint info symtabs" \ | grep -c " name " 1853 ... Without this patch, we have: ... $ gdb -q -batch outputs/gdb.ada/info_exc/foo \ -ex start \ -ex "info exceptions" \ -ex "maint info symtabs" \ | grep -c " name " 1393 ... so ~75% of the CUs is expanded, and with this patch we have: ... $ gdb <same-as-above> 20 ... so ~1% of the CUs is expanded. Tested on x86_64-linux. Approved-By: Tom Tromey <tom@tromey.com> PR symtab/32182 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32182
2024-09-13Update more types for section index changeTom Tromey1-1/+1
Commit f89276a2f3e ("change type of `general_symbol_info::m_section` to int") did what it says in the title -- changed the type of the section index from short to int. However, it seems incomplete, in that there are uses of the section index that use the type 'short'. This patch fixes the ones I found, first by searching for "short.*sect" and then by looking at all the callers of section_index (and then functions called with the resulting value) just to try to be more sure. Approved-by: Kevin Buettner <kevinb@redhat.com> Approved-By: Simon Marchi <simon.marchi@efficios.com>
2024-08-12gdb: drop struct keyword when using bound_minimal_symbolSimon Marchi1-7/+6
This is a simple find / replace from "struct bound_minimal_symbol" to "bound_minimal_symbol", to make things shorter and more consisten througout. In some cases, move variable declarations where first used. Change-Id: Ica4af11c4ac528aa842bfa49a7afe8fe77a66849 Reviewed-by: Keith Seitz <keiths@redhat.com> Approved-By: Andrew Burgess <aburgess@redhat.com>
2024-06-04Some constification in psymtabTom Tromey1-2/+2
This patch changes some spots in psymtab.[ch] to use 'const'. This is just preparation for a subsequent patch. Note that psymbols are conceptually const, and since they were changed to be objfile-indepdendent, they are truly never modified -- which is what makes this patch reasonably short.
2024-01-28Use domain_search_flags in lookup_global_symbol_languageTom Tromey1-2/+1
This changes quick_symbol_functions::lookup_global_symbol_language to accept domain_search_flags rather than just a domain_enum, and fixes up the fallout. To avoid introducing any regressions, any code passing VAR_DOMAIN now uses SEARCH_VFT. That is, no visible changes should result from this patch. However, it sets the stage to refine some searches later on.
2024-01-28Replace search_domain with domain_search_flagsTom Tromey1-1/+1
This patch changes gdb to replace search_domain with domain_search_flags everywhere. search_domain is removed.
2024-01-12Update copyright year range in header of all files managed by GDBAndrew Burgess1-1/+1
This commit is the result of the following actions: - Running gdb/copyright.py to update all of the copyright headers to include 2024, - Manually updating a few files the copyright.py script told me to update, these files had copyright headers embedded within the file, - Regenerating gdbsupport/Makefile.in to refresh it's copyright date, - Using grep to find other files that still mentioned 2023. If these files were updated last year from 2022 to 2023 then I've updated them this year to 2024. I'm sure I've probably missed some dates. Feel free to fix them up as you spot them.
2023-12-06Remove quick_symbol_functions::expand_matching_symbolsTom Tromey1-7/+0
The only caller of quick_symbol_functions::expand_matching_symbols was removed, so now this method and all implementations of it can be removed.
2023-11-21gdb: Use std::string_view instead of gdb::string_viewLancelot Six1-2/+2
Given that GDB now requires a C++17, replace all uses of gdb::string_view with std::string_view. This change has mostly been done automatically: - gdb::string_view -> std::string_view - #include "gdbsupport/gdb_string_view.h" -> #include <string_view> One things which got brought up during review is that gdb::stging_view does support being built from "nullptr" while std::sting_view does not. Two places are manually adjusted to account for this difference: gdb/tui/tui-io.c:tui_getc_1 and gdbsupport/format.h:format_piece::format_piece. The above automatic change transformed "gdb::to_string (const gdb::string_view &)" into "gdb::to_string (const std::string_view &)". The various direct users of this function are now explicitly including "gdbsupport/gdb_string_view.h". A later patch will remove the users of gdb::to_string. The implementation and tests of gdb::string_view are unchanged, they will be removed in a following patch. Change-Id: Ibb806a7e9c79eb16a55c87c6e41ad396fecf0207 Approved-By: Tom Tromey <tom@tromey.com> Approved-By: Pedro Alves <pedro@palves.net>
2023-11-21gdb: Replace gdb::optional with std::optionalLancelot Six1-1/+1
Since GDB now requires C++17, we don't need the internally maintained gdb::optional implementation. This patch does the following replacing: - gdb::optional -> std::optional - gdb::in_place -> std::in_place - #include "gdbsupport/gdb_optional.h" -> #include <optional> This change has mostly been done automatically. One exception is gdbsupport/thread-pool.* which did not use the gdb:: prefix as it already lives in the gdb namespace. Change-Id: I19a92fa03e89637bab136c72e34fd351524f65e9 Approved-By: Tom Tromey <tom@tromey.com> Approved-By: Pedro Alves <pedro@palves.net>
2023-08-18Merge psympriv.h into psymtab.hTom Tromey1-2/+563
psympriv.h was intended for use by code that created partial symbols. Now that no generic code needs psymtab.h any more, psympriv.h can be merged into psymtab.h.
2023-01-01Update copyright year range in header of all files managed by GDBJoel Brobecker1-1/+1
This commit is the result of running the gdb/copyright.py script, which automated the update of the copyright year range for all source files managed by the GDB project to be updated to include year 2023.
2022-06-12Remove psymtab_addrmapTom Tromey1-11/+0
While working on addrmaps, I noticed that psymtab_addrmap is no longer needed now. It was introduced in ancient times as an optimization for DWARF, but no other symbol reader was ever updated to use it. Now that DWARF does not use psymtabs, it can be deleted.
2022-01-18Move gdb obstack code to gdbsupportTom Tromey1-1/+1
This moves the gdb-specific obstack code -- both extensions like obconcat and obstack_strdup, and things like auto_obstack -- to gdbsupport.
2022-01-01Automatic Copyright Year update after running gdb/copyright.pyJoel Brobecker1-1/+1
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
2021-07-06gdb: introduce iterator_range, remove next_adapterSimon Marchi1-1/+1
I was always a bit confused by next_adapter, because it kind of mixes the element type and the iterator type. In reality, it is not much more than a class that wraps two iterators (begin and end). However, it assumes that: - you can construct the begin iterator by passing a pointer to the first element of the iterable - you can default-construct iterator to make the end iterator I think that by generalizing it a little bit, we can re-use it at more places. Rename it to "iterator_range". I think it describes a bit better: it's a range made by wrapping a begin and end iterator. Move it to its own file, since it's not related to next_iterator anymore. iterator_range has two constructors. The variadic one, where arguments are forwarded to construct the underlying begin iterator. The end iterator is constructed through default construction. This is a generalization of what we have today. There is another constructor which receives already constructed begin and end iterators, useful if the end iterator can't be obtained by default-construction. Or, if you wanted to make a range that does not end at the end of the container, you could pass any iterator as the "end". This generalization allows removing some "range" classes, like all_inferiors_range. These classes existed only to pass some arguments when constructing the begin iterator. With iterator_range, those same arguments are passed to the iterator_range constructed and then forwarded to the constructed begin iterator. There is a small functional difference in how iterator_range works compared to next_adapter. next_adapter stored the pointer it received as argument and constructeur an iterator in the `begin` method. iterator_range constructs the begin iterator and stores it as a member. Its `begin` method returns a copy of that iterator. With just iterator_range, uses of next_adapter<foo> would be replaced with: using foo_iterator = next_iterator<foo>; using foo_range = iterator_range<foo_iterator>; However, I added a `next_range` wrapper as a direct replacement for next_adapter<foo>. IMO, next_range is a slightly better name than next_adapter. The rest of the changes are applications of this new class. gdbsupport/ChangeLog: * next-iterator.h (class next_adapter): Remove. * iterator-range.h: New. gdb/ChangeLog: * breakpoint.h (bp_locations_range): Remove. (bp_location_range): New. (struct breakpoint) <locations>: Adjust type. (breakpoint_range): Use iterator_range. (tracepoint_range): Use iterator_range. * breakpoint.c (breakpoint::locations): Adjust return type. * gdb_bfd.h (gdb_bfd_section_range): Use iterator_range. * gdbthread.h (all_threads_safe): Pass argument to all_threads_safe_range. * inferior-iter.h (all_inferiors_range): Use iterator_range. (all_inferiors_safe_range): Use iterator_range. (all_non_exited_inferiors_range): Use iterator_range. * inferior.h (all_inferiors, all_non_exited_inferiors): Pass inferior_list as argument. * objfiles.h (struct objfile) <compunits_range>: Remove. <compunits>: Return compunit_symtab_range. * progspace.h (unwrapping_objfile_iterator) <unwrapping_objfile_iterator>: Take parameter by value. (unwrapping_objfile_range): Use iterator_range. (struct program_space) <objfiles_range>: Define with "using". <objfiles>: Adjust. <objfiles_safe_range>: Define with "using". <objfiles_safe>: Adjust. <solibs>: Return so_list_range, define here. * progspace.c (program_space::solibs): Remove. * psymtab.h (class psymtab_storage) <partial_symtab_iterator>: New. <partial_symtab_range>: Use iterator_range. * solist.h (so_list_range): New. * symtab.h (compunit_symtab_range): New. (symtab_range): New. (compunit_filetabs): Change to a function. * thread-iter.h (inf_threads_range, inf_non_exited_threads_range, safe_inf_threads_range, all_threads_safe_range): Use iterator_range. * top.h (ui_range): New. (all_uis): Use ui_range. Change-Id: Ib7a9d2a3547f45f01aa1c6b24536ba159db9b854
2021-03-20Allow multiple partial symbol readers per objfileTom Tromey1-4/+0
This patch finally changes gdb so that an objfile can have multiple sources of partial symbols (or mixed partial symbols and other kinds of indices). This is done by having each symbol reader create its own psymbol_functions object and add it to the 'qf' list in the objfile. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_initial_scan): Create partial symtabs. * symfile.c (syms_from_objfile_1, reread_symbols): Update. * psymtab.h (make_psymbol_functions): Don't declare. * psymtab.c (make_psymbol_functions): Remove. (maintenance_print_psymbols): Update. * psympriv.h (struct psymbol_functions): Add no-argument constructor. * objfiles.h (struct objfile) <reset_psymtabs>: Remove. <partial_symtabs>: Remove. * mdebugread.c (mdebug_build_psymtabs): Create partial symtabs. * elfread.c (read_partial_symbols): Update. (elf_symfile_read): Remove check for existing partial symbols. Don't clear "qf". * dwarf2/read.c (dwarf2_has_info): Remove check for existing partial symbols. (dwarf2_build_psymtabs): Add psymbol_functions parameter. Create partial symtabs. * dwarf2/public.h (dwarf2_build_psymtabs): Add psymbol_functions parameter. * dbxread.c (dbx_symfile_read): Create partial symtabs. * ctfread.c (elfctf_build_psymtabs): Create partial symtabs.
2021-03-20Introduce objfile::require_partial_symbolsTom Tromey1-8/+0
This adds a new method, objfile::require_partial_symbols. This reuses most of the code from the old function in psymtab.c. That function is now made static, and simplified. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * symfile.c (read_symbols): Use objfile method. * symfile-debug.c (objfile::require_partial_symbols): New method. * psymtab.h (require_partial_symbols): Don't declare. * psymtab.c (require_partial_symbols): Use objfile method. Now static. (psymbol_functions::map_symtabs_matching_filename, OBJFILE) (psymbol_functions::lookup_symbol) (psymbol_functions::lookup_global_symbol_language) (psymbol_functions::find_last_source_symtab) (psymbol_functions::forget_cached_source_info) (psymbol_functions::print_stats) (psymbol_functions::expand_symtabs_for_function) (psymbol_functions::expand_all_symtabs) (psymbol_functions::expand_symtabs_with_fullname) (psymbol_functions::map_symbol_filenames) (psymbol_functions::map_matching_symbols) (psymbol_functions::expand_symtabs_matching) (psymbol_functions::find_compunit_symtab_by_address) (maintenance_print_psymbols, maintenance_info_psymtabs) (maintenance_check_psymtabs): Update. * objfiles.h (struct objfile) <require_partial_symbols>: Declare new method.
2021-03-20Attach partial symtab storage to psymbol_functionsTom Tromey1-1/+2
Currently, the storage for partial symtabs is attached to the objfile. Ultimately, though, this direct assocation will be removed, and the storage will be owned by the psymbol_functions object. This patch is a step toward this goal. The storage is already managed as a shared_ptr, to enable cross-objfile sharing, so this adds a reference from the psymbol_functions, and changes some code in psymtab.c to use this reference instead. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_build_psymtabs): Call set_partial_symtabs. * symfile.c (syms_from_objfile_1, reread_symbols): Update. * psymtab.h (make_psymbol_functions): Add partial_symtabs parameter. * psymtab.c (find_pc_sect_psymtab): Add partial_symtabs parameter. (psymbol_functions::find_pc_sect_compunit_symtab) (psymbol_functions::print_stats, psymbol_functions::dump) (psymbol_functions::has_symbols): Update. (make_psymbol_functions, dump_psymtab_addrmap): Add partial_symtabs parameter. (maintenance_print_psymbols): Update. (psymbol_functions::expand_symtabs_matching): Update. * psympriv.h (struct psymbol_functions): Add constructor. <m_partial_symtabs>: New member. <set_partial_symtabs>: New method.
2021-03-20Convert quick_symbol_functions to use methodsTom Tromey1-5/+2
This changes quick_symbol_functions to be a base class with pure virtual methods, rather than a struct holding function pointers. Then, objfile is changed to hold a unique_ptr to an instance of this class. struct psymbol_functions is put into psympriv.h, and not psymtab.c, because that is convenient later in the series. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * psympriv.h (struct psymbol_functions): New. * symfile.c (syms_from_objfile_1, reread_symbols): Update. * symfile-debug.c (objfile::find_compunit_symtab_by_address) (objfile::lookup_global_symbol_language): Update. * quick-symbol.h (struct quick_symbol_functions): Convert function pointers to methods. Add virtual destructor. (quick_symbol_functions_up): New typedef. * psymtab.h (psym_functions, dwarf2_gdb_index_functions) (dwarf2_debug_names_functions): Don't declare. (make_psymbol_functions): Declare. * psymtab.c (psymbol_functions::map_symtabs_matching_filename) (psymbol_functions::find_pc_sect_compunit_symtab) (psymbol_functions::lookup_symbol) (psymbol_functions::lookup_global_symbol_language) (psymbol_functions::find_last_source_symtab) (psymbol_functions::forget_cached_source_info) (psymbol_functions::print_stats, psymbol_functions::dump) (psymbol_functions::expand_symtabs_for_function) (psymbol_functions::expand_all_symtabs) (psymbol_functions::expand_symtabs_with_fullname) (psymbol_functions::map_symbol_filenames) (psymbol_functions::map_matching_symbols) (psymbol_functions::expand_symtabs_matching) (psymbol_functions::has_symbols) (psymbol_functions::find_compunit_symtab_by_address): Rename. (psym_functions): Remove. (make_psymbol_functions): New function. * objfiles.h (struct objfile) <qf>: Change type. * elfread.c (elf_symfile_read): Update. * dwarf2/read.c (struct dwarf2_base_index_functions) (struct dwarf2_gdb_index, struct dwarf2_debug_names_index): New. (make_dwarf_gdb_index, make_dwarf_debug_names): New functions. (dwarf2_base_index_functions::find_last_source_symtab) (dwarf2_base_index_functions::forget_cached_source_info) (dwarf2_base_index_functions::map_symtabs_matching_filename) (dwarf2_gdb_index::lookup_symbol) (dwarf2_base_index_functions::print_stats) (dwarf2_gdb_index::dump) (dwarf2_gdb_index::expand_symtabs_for_function) (dwarf2_base_index_functions::expand_all_symtabs) (dwarf2_base_index_functions::expand_symtabs_with_fullname): Rename. (dwarf2_gdb_index::map_matching_symbols): New method. (dwarf2_gdb_index::expand_symtabs_matching): New method. (dwarf2_base_index_functions::find_pc_sect_compunit_symtab) (dwarf2_base_index_functions::map_symbol_filenames) (dwarf2_base_index_functions::has_symbols): Rename. (dwarf2_gdb_index_functions): Remove. (dwarf2_debug_names_index::lookup_symbol) (dwarf2_debug_names_index::dump) (dwarf2_debug_names_index::expand_symtabs_for_function) (dwarf2_debug_names_index::map_matching_symbols) (dwarf2_debug_names_index::expand_symtabs_matching): Rename. (dwarf2_debug_names_functions): Remove. * dwarf2/public.h (make_dwarf_gdb_index, make_dwarf_debug_names): Declare.
2021-01-01Update copyright year range in all GDB filesJoel Brobecker1-1/+1
This commits the result of running gdb/copyright.py as per our Start of New Year procedure... gdb/ChangeLog Update copyright year range in copyright header of all GDB files.
2020-10-17Have partial symbol tables own psymbol vectorsTom Tromey1-12/+0
Currently pointers to all partial symbols are stored in two vectors; and then indices into these vectors are stored in each partial_symtab. This patch changes this so that each partial symtab instead has vectors of symbols. add_psymbol_to_list can now be changed into a method on partial_symtab as well. My main motivation for doing this is that I am looking into calling sort_pst_symbols in the background. However, I haven't actually implemented this yet. (Also this may make it more feasible to also sort the static psymbols, though I haven't tried that either.) Also, though, this lets us remove the "current_global_psymbols" vector, because now the callers can simply refer directly to the psymtab that they are modifying (formerly this was implicit). The main drawback of this patch is that it increases the size of partial symtab. gdb/ChangeLog 2020-10-17 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_end_psymtab): Use partial_symtab::empty. (scan_xcoff_symtab): Update. * psymtab.h (class psymtab_storage) <global_psymbols, static_psymbols, current_global_psymbols, current_static_psymbols>: Remove. * psymtab.c (require_partial_symbols, find_pc_sect_psymbol) (match_partial_symbol, lookup_partial_symbol): Update. (print_partial_symbols): Change parameters. (dump_psymtab, recursively_search_psymtabs) (psym_fill_psymbol_map, psym_find_compunit_symtab_by_address) (sort_pst_symbols, partial_symtab::partial_symtab): Update. (concat): Remove. (end_psymtab_common): Simplify. (append_psymbol_to_list): Change parameters. (partial_symtabs::add_psymbol): Rename from add_psymbol_to_list. (init_psymbol_list): Simplify. (maintenance_info_psymtabs, maintenance_check_psymtabs): Update. * psympriv.h (struct partial_symtab) <empty>: New method. <globals_offset, n_global_syms, statics_offset, n_static_syms>: Remove. <global_psymbols, static_psymbols>: New members. <add_psymbol>: New methods. (add_psymbol_to_list): Don't declare. (psymbol_placement): Move earlier. * mdebugread.c (parse_partial_symbols): Update. (handle_psymbol_enumerators): Change parameters. (mdebug_expand_psymtab): Update. * dwarf2/read.c (process_psymtab_comp_unit_reader) (add_partial_symbol): Update. * dwarf2/index-write.c (write_psymbols): Change parameters. (write_one_signatured_type): Update. (recursively_count_psymbols): Update. (recursively_write_psymbols): Update. (class debug_names) <recursively_write_psymbols>: Update. <write_psymbols>: Change parameters. <write_one_signatured_type>: Update. * dbxread.c (read_dbx_symtab): Update. (dbx_end_psymtab): Use partial_symtab::empty. * ctfread.c (struct ctf_context) <pst>: New member. (create_partial_symtab): Set it. (ctf_psymtab_type_cb, ctf_psymtab_var_cb): Update. (scan_partial_symbols): Use the psymtab's context. Update.
2020-09-14gdb: turn gdb::bcache's function pointers into virtual methodsSimon Marchi1-4/+18
The two function pointers optionally passed to gdb::bcache are very good candidates to be turned into virtual methods, this patch does that in the most straightforward / unsurprising way. gdb/ChangeLog: * bcache.h (struct bcache) <bcache>: Remove constructor. <m_hash_function, m_compare_function>: Remove. <~bcache>: Make virtual. <compare>: Remove static method, introduce virtual method. <default_hash>: Remove. <hash>: New virtual method. * bcache.c (bcache::expand_hash_table): Update. (bcache::insert): Update. (bcache::hash): New. (bcache::compare): Update comment and parameter names. * gdbtypes.c (types_deeply_equal): Update. * psymtab.h (struct psymbol_bcache): New struct. (class psymtab_storage) <psymtab_storage>: Make default. <psymbol_cache>: Change type to psymbol_bcache. * psymtab.c (psymtab_storage::psymtab_storage): Remove. (psymbol_hash): Change to... (psymbol_bcache::hash): ... this. (psymbol_compare): Change to... (psymbol_bcache::compare): ... this. Change-Id: I41d578e61de8ac1163461a28fbd220d1f855e372
2020-03-13[gdb/symtab] Fix partial unit psymtabsTom de Vries1-0/+6
Consider test-case gdb.dwarf2/imported-unit.exp. It contains a CU with type int: ... <0><129>: Abbrev Number: 2 (DW_TAG_compile_unit) <12a> DW_AT_language : 4 (C++) <12b> DW_AT_name : imported_unit.c <1><13b>: Abbrev Number: 3 (DW_TAG_base_type) <13c> DW_AT_byte_size : 4 <13d> DW_AT_encoding : 5 (signed) <13e> DW_AT_name : int ... which is imported in another CU: ... <0><d2>: Abbrev Number: 2 (DW_TAG_compile_unit) <d3> DW_AT_language : 4 (C++) <d4> DW_AT_name : <artificial> <1><e1>: Abbrev Number: 3 (DW_TAG_imported_unit) <e2> DW_AT_import : <0x129> [Abbrev Number: 2] ... However, if we print the partial symbols: ... $ gdb -batch imported-unit -ex "maint print psymbols" ... we see type int both in the importing CU: ... Partial symtab for source file <artificial>@0xc7 (object 0x29f9b80) ... Depends on 1 other partial symtabs. 0 0x2a24240 imported_unit.c Global partial symbols: `main', function, 0x4004b2 Static partial symbols: `int', type, 0x0 ... and in the imported CU: ... Partial symtab for source file imported_unit.c (object 0x2a24240) ... Depends on 0 other partial symtabs. Shared partial symtab with user 0x29f9b80 Static partial symbols: `int', type, 0x0 ... This is an artefact resulting from the fact that all CUs in an objfile share the same storage array for static partial symbols (and another array for global partial symbols), using a range to describe their symbols. Then when scanning the partial symbols of a CU and encountering an import, either: - the referred CU has not been parsed yet, and will be parsed, and the range of static partial symbols of the referred CU will be a subrange of the range of static partial symbols of this CU, or - the referred CU has already been parsed, and the range of static partial symbols of the referred CU will not be a subrange of the range of static partial symbols of this CU. This is inconsistent handling, and confuses the notion of a symbol belonging to a single symtab. Furthermore, it might slow down searches, given that the symbol needs to be skipped twice. Finally, the same issue holds for global partial symbols, where the range of a CU is sorted after parsing is finished. Obviously sorting the range of a CU may invalidate subranges, effectively moving symbols in and out of imported CUs. Fix this for both static and global partial symbols, by gathering partial symbols in a per-CU vector, and adding those symbols to the per-objfile storage only once complete. Tested on x86_64-linux, with native and board cc-with-dwz and cc-with-dwz-m. gdb/ChangeLog: 2020-03-13 Tom de Vries <tdevries@suse.de> PR symtab/25646 * psymtab.c (partial_symtab::partial_symtab): Don't set globals_offset and statics_offset. Push element onto current_global_psymbols and current_static_psymbols stacks. (concat): New function. (end_psymtab_common): Set globals_offset and statics_offset. Pop element from current_global_psymbols and current_static_psymbols stacks. Concat popped elements to global_psymbols and static_symbols. (add_psymbol_to_list): Use current_global_psymbols and current_static_psymbols stacks. * psymtab.h (class psymtab_storage): Add current_global_psymbols and current_static_psymbols fields. gdb/testsuite/ChangeLog: 2020-03-13 Tom de Vries <tdevries@suse.de> PR symtab/25646 * gdb.dwarf2/imported-unit.exp: Add test.
2020-02-11Update a comment in psymtab.hTom Tromey1-1/+3
This updates a comment in psymtab.h to reflect the current reality. gdb/ChangeLog 2020-02-11 Tom Tromey <tom@tromey.com> * psymtab.h: Update comment. Change-Id: I438bb5929c3ebd1a4c6e9a902490f2ef63014ab3
2020-01-26Do not allocate psymtabs via psymtab_storageTom Tromey1-4/+3
Currently, partial symbol tables are allocated by a method in psymtab_storage. However, eventually we want to subclass partial symtabs in the symbol readers, so the calls to "new" will have to happen there. This patch is a first step, moving the allocation from psymtab_storage and into allocate_psymtab. gdb/ChangeLog 2020-01-26 Tom Tromey <tom@tromey.com> * psymtab.h (class psymtab_storage) <install_psymtab>: Rename from allocate_psymtab. Update documentation. * psymtab.c (psymtab_storage::install_psymtab): Rename from allocate_psymtab. Do not use new. (allocate_psymtab): Use new. Update. Change-Id: Iba6a9bf3ee1e78062fdb9f007c3010f826f64bc8
2020-01-26Use new and delete for psymtabsTom Tromey1-4/+0
This changes psymtabs to be allocated with new and destroyed with delete. As a consequence, the psymtab free-list is also removed. The motivation for this is to let symbol readers subclass partial_symtab. gdb/ChangeLog 2020-01-26 Tom Tromey <tom@tromey.com> * mdebugread.c (parse_partial_symbols): Use discard_psymtab. * psymtab.h (class psymtab_storage) <free_psymtabs>: Remove. * psymtab.c (psymtab_storage): Delete psymtabs. (psymtab_storage::allocate_psymtab): Use new. (psymtab_storage::discard_psymtab): Use delete. * psympriv.h (struct partial_symtab): Add constructor and initializers. Change-Id: I4e78ac538fc0ea52b57489c1afb8f935a30941ef
2020-01-01Update copyright year range in all GDB files.Joel Brobecker1-1/+1
gdb/ChangeLog: Update copyright year range in all GDB files.
2019-12-06Put bcache inside "namespace gdb"Christian Biesinger1-1/+1
This avoids a conflict with a system "struct bcache" on Solaris (see e.g. https://www.isi.edu/nsnam/archive/ns-users/webarch/2001/msg05393.html) Note that the Solaris conflict for now only surfaces with --enable-targets=all (which the build bot doesn't use). gdb/ChangeLog: 2019-12-06 Christian Biesinger <cbiesinger@google.com> * bcache.c: Put in namespace gdb. * bcache.h: Likewise. * gdbtypes.c (check_types_worklist): Update. (types_deeply_equal): Update. * macrotab.c (struct macro_table) <bcache>: Update. (new_macro_table): Update. * macrotab.h (struct bcache): Put this forward declaration inside namespace gdb. (new_macro_table): Update. * objfiles.h (struct objfile_per_bfd_storage) <filename_cache>: Update. <macro_cache>: Update. * psymtab.h: (psymtab_storage) <psymbol_cache>: Update. Change-Id: I843d5e91f7ccb3db6d1099a8214c15a74510256f
2019-11-24Use bool in require_partial_symbolsTom Tromey1-2/+2
This changes require_partial_symbols to use bool as its parameter type. gdb/ChangeLog 2019-11-24 Tom Tromey <tom@tromey.com> * symfile.c (read_symbols): Update. * psymtab.c (require_partial_symbols): Change type of "verbose" to bool. (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): Update. * psymtab.h (require_partial_symbols): Change type of "verbose" to bool. Change-Id: Iae87aa5e4590706bb9e90a33adb86f1fe0fbf3c7
2019-09-12gdb: Don't fault for 'maint print psymbols' when using an indexAndrew Burgess1-1/+5
I found that these tests: make check-gdb RUNTESTFLAGS="--target_board=cc-with-gdb-index gdb.base/maint.exp" make check-gdb RUNTESTFLAGS="--target_board=cc-with-debug-names gdb.base/maint.exp" were causing GDB to segfault. It turns out that this test runs this command: maint print psymbols -pc main /path/to/some/file which tries to lookup the partial_symtab for 'main'. The problem is that there is no partial_symtab for 'main' as we are using the .gdb_index or .debug_names instead of partial_symtabs. What happens is that maintenance_print_symbols calls find_pc_sect_psymtab, which looks for the partial_symtab in the objfile's objfile->partial_symtabs->psymtabs_addrmap. This is a problem because when we are using the indexes psymtabs_addrmap is reused to hold things other than partial_symtabs, this can be seen in dwarf2read.c in create_addrmap_from_index and create_addrmap_from_aranges. If we then lookup in psymtabs_addrmap we end up returning a pointer to something that isn't really a partial_symtab, after which everything goes wrong. Initially I simply added a check at the start of find_pc_sect_psymtab that the objfile had some partial_symtabs, like: if (objfile->partial_symtabs->psymtabs == NULL) return NULL; Figuring that if there were no partial_symtabs at all then this function should always return NULL, however, this caused a failure in the test gdb.python/py-event.exp which I didn't dig into too deeply, but seems to be that in this tests there are initially no psymtabs, but the second part of find_pc_sect_psymtab does manage to read some in from somewhere, with the check I added the test fails as we returned NULL here and this caused GDB to load in the full symtabs earlier than was expected. Instead I chose to guard only the access to psymtabs_addrmap with a check that the function has some psymtabs. This allows my original tests to pass, and the py-event.exp test to pass too. Now, a good argument can be made that we simply should never call find_pc_sect_psymtab on an objfile that is using indexes instead of partial_symtabs. I did consider this approach, we could easily add an assert into find_pc_sect_psymtab that if we find a partial_symtab in psymtabs_addrmap then the psymtabs pointer must be non-null. The responsibility would then be on the user of find_pc_sect_psymtab to ensure that the objfile being checked is suitable. In the end I didn't take this approach as the check in find_pc_sect_psymtab is cheap and this ensures that any future miss-uses of the function will not cause problems. I also extended the comment on psymtabs_addrmap to indicate that it holds more than just partial_symtabs as this was not at all clear from the original comment, and caused me some confusion when I was initially debugging this problem. gdb/ChangeLog: * psymtab.c (find_pc_sect_psymtab): Move baseaddr local into more inner scope, add check that the objfile has psymtabs before checking psymtabs_addrmap. * psymtab.h (psymtab_storage) <psymtabs_addrmap>: Extend comment.
2019-07-09Rename common to gdbsupportTom Tromey1-1/+1
This is the next patch in the ongoing series to move gdbsever to the top level. This patch just renames the "common" directory. The idea is to do this move in two parts: first rename the directory (this patch), then move the directory to the top. This approach makes the patches a bit more tractable. I chose the name "gdbsupport" for the directory. However, as this patch was largely written by sed, we could pick a new name without too much difficulty. Tested by the buildbot. gdb/ChangeLog 2019-07-09 Tom Tromey <tom@tromey.com> * contrib/ari/gdb_ari.sh: Change common to gdbsupport. * configure: Rebuild. * configure.ac: Change common to gdbsupport. * gdbsupport: Rename from common. * acinclude.m4: Change common to gdbsupport. * Makefile.in (CONFIG_SRC_SUBDIR, COMMON_SFILES) (HFILES_NO_SRCDIR, stamp-version, ALLDEPFILES): Change common to gdbsupport. * aarch64-tdep.c, ada-lang.c, ada-lang.h, agent.c, alloc.c, amd64-darwin-tdep.c, amd64-dicos-tdep.c, amd64-fbsd-nat.c, amd64-fbsd-tdep.c, amd64-linux-nat.c, amd64-linux-tdep.c, amd64-nbsd-tdep.c, amd64-obsd-tdep.c, amd64-sol2-tdep.c, amd64-tdep.c, amd64-windows-tdep.c, arch-utils.c, arch/aarch64-insn.c, arch/aarch64.c, arch/aarch64.h, arch/amd64.c, arch/amd64.h, arch/arm-get-next-pcs.c, arch/arm-linux.c, arch/arm.c, arch/i386.c, arch/i386.h, arch/ppc-linux-common.c, arch/riscv.c, arch/riscv.h, arch/tic6x.c, arm-tdep.c, auto-load.c, auxv.c, ax-gdb.c, ax-general.c, ax.h, breakpoint.c, breakpoint.h, btrace.c, btrace.h, build-id.c, build-id.h, c-lang.h, charset.c, charset.h, cli/cli-cmds.c, cli/cli-cmds.h, cli/cli-decode.c, cli/cli-dump.c, cli/cli-option.h, cli/cli-script.c, coff-pe-read.c, command.h, compile/compile-c-support.c, compile/compile-c.h, compile/compile-cplus-symbols.c, compile/compile-cplus-types.c, compile/compile-cplus.h, compile/compile-loc2c.c, compile/compile.c, completer.c, completer.h, contrib/ari/gdb_ari.sh, corefile.c, corelow.c, cp-support.c, cp-support.h, cp-valprint.c, csky-tdep.c, ctf.c, darwin-nat.c, debug.c, defs.h, disasm-selftests.c, disasm.c, disasm.h, dtrace-probe.c, dwarf-index-cache.c, dwarf-index-cache.h, dwarf-index-write.c, dwarf2-frame.c, dwarf2expr.c, dwarf2loc.c, dwarf2read.c, event-loop.c, event-top.c, exceptions.c, exec.c, extension.h, fbsd-nat.c, features/aarch64-core.c, features/aarch64-fpu.c, features/aarch64-pauth.c, features/aarch64-sve.c, features/i386/32bit-avx.c, features/i386/32bit-avx512.c, features/i386/32bit-core.c, features/i386/32bit-linux.c, features/i386/32bit-mpx.c, features/i386/32bit-pkeys.c, features/i386/32bit-segments.c, features/i386/32bit-sse.c, features/i386/64bit-avx.c, features/i386/64bit-avx512.c, features/i386/64bit-core.c, features/i386/64bit-linux.c, features/i386/64bit-mpx.c, features/i386/64bit-pkeys.c, features/i386/64bit-segments.c, features/i386/64bit-sse.c, features/i386/x32-core.c, features/riscv/32bit-cpu.c, features/riscv/32bit-csr.c, features/riscv/32bit-fpu.c, features/riscv/64bit-cpu.c, features/riscv/64bit-csr.c, features/riscv/64bit-fpu.c, features/tic6x-c6xp.c, features/tic6x-core.c, features/tic6x-gp.c, filename-seen-cache.h, findcmd.c, findvar.c, fork-child.c, gcore.c, gdb_bfd.c, gdb_bfd.h, gdb_proc_service.h, gdb_regex.c, gdb_select.h, gdb_usleep.c, gdbarch-selftests.c, gdbthread.h, gdbtypes.h, gnu-nat.c, go32-nat.c, guile/guile.c, guile/scm-ports.c, guile/scm-safe-call.c, guile/scm-type.c, i386-fbsd-nat.c, i386-fbsd-tdep.c, i386-go32-tdep.c, i386-linux-nat.c, i386-linux-tdep.c, i386-tdep.c, i387-tdep.c, ia64-libunwind-tdep.c, ia64-linux-nat.c, inf-child.c, inf-ptrace.c, infcall.c, infcall.h, infcmd.c, inferior-iter.h, inferior.c, inferior.h, inflow.c, inflow.h, infrun.c, infrun.h, inline-frame.c, language.h, linespec.c, linux-fork.c, linux-nat.c, linux-tdep.c, linux-thread-db.c, location.c, machoread.c, macrotab.h, main.c, maint.c, maint.h, memattr.c, memrange.h, mi/mi-cmd-break.h, mi/mi-cmd-env.c, mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-interp.c, mi/mi-main.c, mi/mi-parse.h, minsyms.c, mips-linux-tdep.c, namespace.h, nat/aarch64-linux-hw-point.c, nat/aarch64-linux-hw-point.h, nat/aarch64-linux.c, nat/aarch64-sve-linux-ptrace.c, nat/amd64-linux-siginfo.c, nat/fork-inferior.c, nat/linux-btrace.c, nat/linux-btrace.h, nat/linux-namespaces.c, nat/linux-nat.h, nat/linux-osdata.c, nat/linux-personality.c, nat/linux-procfs.c, nat/linux-ptrace.c, nat/linux-ptrace.h, nat/linux-waitpid.c, nat/mips-linux-watch.c, nat/mips-linux-watch.h, nat/ppc-linux.c, nat/x86-dregs.c, nat/x86-dregs.h, nat/x86-linux-dregs.c, nat/x86-linux.c, nto-procfs.c, nto-tdep.c, objfile-flags.h, objfiles.c, objfiles.h, obsd-nat.c, observable.h, osdata.c, p-valprint.c, parse.c, parser-defs.h, ppc-linux-nat.c, printcmd.c, probe.c, proc-api.c, procfs.c, producer.c, progspace.h, psymtab.h, python/py-framefilter.c, python/py-inferior.c, python/py-ref.h, python/py-type.c, python/python.c, record-btrace.c, record-full.c, record.c, record.h, regcache-dump.c, regcache.c, regcache.h, remote-fileio.c, remote-fileio.h, remote-sim.c, remote.c, riscv-tdep.c, rs6000-aix-tdep.c, rust-exp.y, s12z-tdep.c, selftest-arch.c, ser-base.c, ser-event.c, ser-pipe.c, ser-tcp.c, ser-unix.c, skip.c, solib-aix.c, solib-target.c, solib.c, source-cache.c, source.c, source.h, sparc-nat.c, spu-linux-nat.c, stack.c, stap-probe.c, symfile-add-flags.h, symfile.c, symfile.h, symtab.c, symtab.h, target-descriptions.c, target-descriptions.h, target-memory.c, target.c, target.h, target/waitstatus.c, target/waitstatus.h, thread-iter.h, thread.c, tilegx-tdep.c, top.c, top.h, tracefile-tfile.c, tracefile.c, tracepoint.c, tracepoint.h, tui/tui-io.c, ui-file.c, ui-out.h, unittests/array-view-selftests.c, unittests/child-path-selftests.c, unittests/cli-utils-selftests.c, unittests/common-utils-selftests.c, unittests/copy_bitwise-selftests.c, unittests/environ-selftests.c, unittests/format_pieces-selftests.c, unittests/function-view-selftests.c, unittests/lookup_name_info-selftests.c, unittests/memory-map-selftests.c, unittests/memrange-selftests.c, unittests/mkdir-recursive-selftests.c, unittests/observable-selftests.c, unittests/offset-type-selftests.c, unittests/optional-selftests.c, unittests/parse-connection-spec-selftests.c, unittests/ptid-selftests.c, unittests/rsp-low-selftests.c, unittests/scoped_fd-selftests.c, unittests/scoped_mmap-selftests.c, unittests/scoped_restore-selftests.c, unittests/string_view-selftests.c, unittests/style-selftests.c, unittests/tracepoint-selftests.c, unittests/unpack-selftests.c, unittests/utils-selftests.c, unittests/xml-utils-selftests.c, utils.c, utils.h, valarith.c, valops.c, valprint.c, value.c, value.h, varobj.c, varobj.h, windows-nat.c, x86-linux-nat.c, xml-support.c, xml-support.h, xml-tdesc.h, xstormy16-tdep.c, xtensa-linux-nat.c, dwarf2read.h: Change common to gdbsupport. gdb/gdbserver/ChangeLog 2019-07-09 Tom Tromey <tom@tromey.com> * configure: Rebuild. * configure.ac: Change common to gdbsupport. * acinclude.m4: Change common to gdbsupport. * Makefile.in (SFILES, OBS, GDBREPLAY_OBS, IPA_OBJS) (version-generated.c, gdbsupport/%-ipa.o, gdbsupport/%.o): Change common to gdbsupport. * ax.c, event-loop.c, fork-child.c, gdb_proc_service.h, gdbreplay.c, gdbthread.h, hostio-errno.c, hostio.c, i387-fp.c, inferiors.c, inferiors.h, linux-aarch64-tdesc-selftest.c, linux-amd64-ipa.c, linux-i386-ipa.c, linux-low.c, linux-tic6x-low.c, linux-x86-low.c, linux-x86-tdesc-selftest.c, linux-x86-tdesc.c, lynx-i386-low.c, lynx-low.c, mem-break.h, nto-x86-low.c, regcache.c, regcache.h, remote-utils.c, server.c, server.h, spu-low.c, symbol.c, target.h, tdesc.c, tdesc.h, thread-db.c, tracepoint.c, win32-i386-low.c, win32-low.c: Change common to gdbsupport.
2019-03-07C++-ify bcacheTom Tromey1-9/+2
This somewhat C++-ifies bcache. It replaces bcache_xmalloc and bcache_xfree with constructors; changes some functions into methods; and changes various structures to include a bcache directly (as opposed to a pointer to a bcache). Tested by the buildbot. gdb/ChangeLog 2019-03-07 Tom Tromey <tom@tromey.com> * symmisc.c (print_symbol_bcache_statistics): Update. (print_objfile_statistics): Update. * symfile.c (allocate_symtab): Update. * stabsread.c: Don't include bcache.h. * psymtab.h (struct psymbol_bcache): Don't declare. (class psymtab_storage) <psymbol_cache>: Now a bcache. (psymbol_bcache_init, psymbol_bcache_free) (psymbol_bcache_get_bcache): Don't declare. * psymtab.c (struct psymbol_bcache): Remove. (psymtab_storage::psymtab_storage): Update. (psymtab_storage::~psymtab_storage): Update. (psymbol_bcache_init, psymbol_bcache_free) (psymbol_bcache_get_bcache, psymbol_bcache_full): Remove. (add_psymbol_to_bcache): Update. (allocate_psymtab): Update. * objfiles.h (struct objfile_per_bfd_storage) <filename_cache, macro_cache>: No longer pointers. * objfiles.c (get_objfile_bfd_data): Don't call bcache_xmalloc. (free_objfile_per_bfd_storage): Don't call bcache_xfree. * macrotab.c (macro_bcache): Update. * macroexp.c: Don't include bcache.h. * gdbtypes.c (check_types_worklist): Update. (types_deeply_equal): Remove TRY/CATCH. Update. * elfread.c (elf_symtab_read): Update. * dwarf2read.c: Don't include bcache.h. * buildsym.c (buildsym_compunit::get_macro_table): Update. * bcache.h (bcache, bcache_full, bcache_xffree, bcache_xmalloc) (print_bcache_statistics, bcache_memory_used): Don't declare. (struct bcache): Move from bcache.c. Add constructor, destructor, methods. Rename all data members. * bcache.c (struct bcache): Move to bcache.h. (bcache::expand_hash_table): Rename from expand_hash_table. (bcache): Remove. (bcache::insert): Rename from bcache_full. (bcache::compare): Rename from bcache_compare. (bcache_xmalloc): Remove. (bcache::~bcache): Rename from bcache_xfree. (bcache::print_statistics): Rename from print_bcache_statistics. (bcache::memory_used): Rename from bcache_memory_used.
2019-01-17Make psymtab range adapter a method on objfileTom Tromey1-3/+12
This removes the objfile_psymtabs class in favor of a method on objfile and on psymtab_storage. 2019-01-16 Tom Tromey <tom@tromey.com> * objfiles.h (struct objfile) <psymtabs>: New method. (class objfile_psymtabs): Remove. * psymtab.h (class psymtab_storage) <partial_symtab_range>: New typedef. <range>: New method. (require_partial_symbols): Change return type. * psymtab.c (require_partial_symbols) (psym_expand_symtabs_matching): Update. * mdebugread.c (parse_partial_symbols): Update. * dbxread.c (dbx_end_psymtab): Update.
2019-01-10Move psymtabs to their own obstackTom Tromey1-5/+21
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.
2019-01-10Make psymtab_storage::free_psymtabs privateTom Tromey1-4/+10
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.
2019-01-10Add psymtab_storage::allocate_dependenciesTom Tromey1-0/+9
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.
2019-01-10Allocate the address map on the psymtab obstackTom Tromey1-4/+13
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.
2019-01-10Introduce class psymtab_storageTom Tromey1-13/+64
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.
2019-01-09Remove ALL_OBJFILE_PSYMTABSTom Tromey1-4/+18
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.
2019-01-01Update copyright year range in all GDB files.Joel Brobecker1-1/+1
This commit applies all changes made after running the gdb/copyright.py script. Note that one file was flagged by the script, due to an invalid copyright header (gdb/unittests/basic_string_view/element_access/char/empty.cc). As the file was copied from GCC's libstdc++-v3 testsuite, this commit leaves this file untouched for the time being; a patch to fix the header was sent to gcc-patches first. gdb/ChangeLog: Update copyright year range in all GDB files.
2018-01-02Update copyright year range in all GDB filesJoel Brobecker1-1/+1
gdb/ChangeLog: Update copyright year range in all GDB files
2017-12-08DWARF-5: .debug_names index consumerJan Kratochvil1-0/+1
Some testcases needed to be updated as they were missing .debug_aranges. While that does not matter for no-index (as GDB builds the mapping internally during dwarf2_build_psymtabs_hard) and neither for .gdb_index (as GDB uses that internally built mapping which it stores into .gdb_index) it does matter for .debug_names as that simply assumes existing .debug_aranges from GCC. gdb/ChangeLog: 2017-12-08 Jan Kratochvil <jan.kratochvil@redhat.com> Pedro Alves <palves@redhat.com> * defs.h (elf_sym_fns_debug_names): New declaration. * dwarf2read.c: Include "hash_enum.h". (mapped_debug_names): New. (struct dwarf2_per_objfile): Add debug_names, debug_aranges and debug_names_table. (dwarf2_elf_names): Add ".debug_names" and ".debug_aranges". (struct dwz_file): Add debug_names. (dwarf2_per_objfile::locate_sections): Handle debug_names and debug_aranges. (locate_dwz_sections): Handle debug_names. (create_signatured_type_table_from_debug_names) (create_addrmap_from_aranges): New. (dwarf2_read_index): Update function comment. (dwarf5_augmentation): Moved up. (read_debug_names_from_section, create_cus_from_debug_names_list) (create_cus_from_debug_names, dwarf2_read_debug_names): New. (dwarf5_djb_hash): Moved up. (dw2_debug_names_iterator): New. (read_indirect_string_at_offset): New declaration. (mapped_debug_names::namei_to_name) (dw2_debug_names_iterator::find_vec_in_debug_names) (dw2_debug_names_iterator::next, dw2_debug_names_lookup_symbol) (dw2_debug_names_dump, dw2_debug_names_expand_symtabs_for_function) (dw2_debug_names_expand_symtabs_matching, dwarf2_debug_names_functions): New. (dwarf2_initialize_objfile): Return also elf_sym_fns_debug_names. (debug_names::djb_hash): Rename it to dwarf5_djb_hash. (debug_names::build): Update djb_hash caller. (write_debug_names): Move out and rename augmentation to dwarf5_augmentation. * elfread.c (elf_sym_fns_debug_names): New. * psymtab.h (dwarf2_debug_names_functions): New declaration. * symfile.h (struct dwarf2_debug_sections): Add debug_names and debug_aranges. * xcoffread.c (dwarf2_xcoff_names): Add debug_names and debug_aranges. gdb/testsuite/ChangeLog: 2017-12-08 Jan Kratochvil <jan.kratochvil@redhat.com> Pedro Alves <palves@redhat.com> * gdb.base/maint.exp (check for .gdb_index): Check also for .debug_names. * gdb.dlang/watch-loc.c (.debug_aranges): New. * gdb.dwarf2/dw2-case-insensitive-debug.S: Likewise. * gdb.dwarf2/gdb-index.exp (check if index present, .gdb_index used) (.gdb_index used after symbol reloading): Support also .debug_names. * gdb.mi/dw2-ref-missing-frame-func.c (.debug_aranges): New.
2017-01-01update copyright year range in GDB filesJoel Brobecker1-1/+1
This applies the second part of GDB's End of Year Procedure, which updates the copyright year range in all of GDB's files. gdb/ChangeLog: Update copyright year range in all GDB files.
2016-01-01GDB copyright headers update after running GDB's copyright.py script.Joel Brobecker1-1/+1
gdb/ChangeLog: Update year range in copyright notice of all files.
2015-01-01Update year range in copyright notice of all files owned by the GDB project.Joel Brobecker1-1/+1
gdb/ChangeLog: Update year range in copyright notice of all files.
2014-01-14psymtab cleanup patch 1/3Doug Evans1-6/+0
This is the first of a set of three patches to cleanup psymtab.c a bit. Basically, these two functions do not belong in psymtab.c: expand_partial_symbol_names, map_partial_symbol_filenames, and "partial" does not belong in the function name. This first patch moves them to a better location. The second patch adds some typedefs for function parameters to quick_symbol_functions.expand_symtabs_matching. The third patch removes "partial" from the function names and uses them in more places. * psymtab.c (expand_partial_symbol_names): Delete, moved to symfile.c. (map_partial_symbol_filenames): Ditto. * psymtab.h (expand_partial_symbol_names): Delete, moved to symfile.h. (map_partial_symbol_filenames): Ditto. * symfile.c (expand_partial_symbol_names): Moved here from psymtab.c. (map_partial_symbol_filenames): Ditto. * symfile.h (expand_partial_symbol_names): Moved here from psymtab.h. (map_partial_symbol_filenames): Ditto. * symtab.c: Delete #include "psymtab.h".
2014-01-01Update Copyright year range in all files maintained by GDB.Joel Brobecker1-1/+1
2013-01-01Update years in copyright notice for the GDB files.Joel Brobecker1-1/+1
Two modifications: 1. The addition of 2013 to the copyright year range for every file; 2. The use of a single year range, instead of potentially multiple year ranges, as approved by the FSF.
2012-01-26Remove language param from name_matcher in struct quick_symbol_functionsJoel Brobecker1-2/+1
The quick_symbol_functions struct contains a field which is pointer a function which takes another function, called name_matcher, as its parameter. This name_matcher currently has 3 arguments, one of them being the language. This parameter is no longer used, and thus deleted. gdb/ChangeLog: * symfile.h (struct quick_symbol_functions) [expand_symtabs_matching]: Remove language parameter from name_matcher. Adjust the comment. * symtab.c (search_symbols_name_matches, expand_partial_symbol_name): Remove language parameter. * ada-lang.c (ada_expand_partial_symbol_name): Likewise. * linespec.c (iterate_name_matcher): Likewise. * dwarf2read.c (dw2_expand_symtabs_matching): Adjust type of name_matcher. Adjust call accordingly. * psymtab.c (expand_symtabs_matching_via_partial): Likewise. (maintenance_check_symtabs): Adjust type of parameter "fun". * psymtab.h (maintenance_check_symtabs): Likewise.