aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-03-24New target methods for memory tagging supportLuis Machado5-0/+215
This patch starts adding some of the generic pieces to accomodate memory tagging. We have three new target methods: - supports_memory_tagging: Checks if the target supports memory tagging. This defaults to false for targets that don't support memory tagging. - fetch_memtags: Fetches the allocation tags associated with a particular memory range [address, address + length). The default is to return 0 without returning any tags. This should only be called if memory tagging is supported. - store_memtags: Stores a set of allocation tags for a particular memory range [address, address + length). The default is to return 0. This should only be called if memory tagging is supported. gdb/ChangeLog: 2021-03-24 Luis Machado <luis.machado@linaro.org> * remote.c (remote_target) <supports_memory_tagging>: New method override. <fetch_memtags>: New method override. <store_memtags>: New method override. (remote_target::supports_memory_tagging): New method. (remote_target::fetch_memtags): New method. (remote_target::store_memtags): New method. * target-delegates.c: Regenerate. * target.h (struct target_ops) <supports_memory_tagging>: New virtual method. <fetch_memtags>: New virtual method. <store_memtags>: New virtual method. (target_supports_memory_tagging): Define. (target_fetch_memtags): Define. (target_store_memtags): Define. * target-debug.h (target_debug_print_size_t) (target_debug_print_const_gdb_byte_vector_r) (target_debug_print_gdb_byte_vector_r): New functions.
2021-03-24x86: derive opcode length from opcode valueJan Beulich7-7479/+7514
In the majority of cases we can easily determine the length from the encoding, irrespective of whether a prefix is specified there as well. We further don't even need to record the value in the table entries, as it's easy enough to determine it (without any guesswork, unless an insn with major opcode 00 appeared that requires a 2nd opcode byte to be specified explicitly) when installing the chosen template for further processing. Should an encoding appear which - has a major opcode byte of 66, F3, or F2, - requires a 2nd opcode byte to be specified explicitly, - doesn't have a mandatory prefix we'd need to convert all templates presently encoding a mandatory prefix this way to the Prefix_0X<nn> model to eliminate the respective guessing i386-gen does.
2021-03-24x86: derive mandatory prefix attribute from base opcodeJan Beulich6-5100/+5091
Just like is already done for legacy encoded insns, record the mandatory prefix information in the respective opcode modifier field. Do this without changing the source table, but rather by deriving the values from their existing source representation.
2021-03-24x86: don't use opcode_length to identify pseudo prefixesJan Beulich7-36/+48
This is in preparation of opcode_length going away as a field in the templates. Identify pseudo prefixes by a base opcode of zero instead: No real prefix has an opcode of zero. This at the same time allows dropping a curious special case from i386-gen. Since most attributes are identical for all pseudo prefixes, take the opportunity and also template them.
2021-03-24Automatic date update in version.inGDB Administrator1-1/+1
2021-03-23x86: re-number PREFIX_0X<nn>Jan Beulich5-154/+165
In preparation to use PREFIX_0X<nn> attributes also in VEX/XOP/EVEX encoding templates, renumber the pseudo-enumerators such that their values can then also be used directly in the respective prefix bit fields.
2021-03-23x86: re-order two fields of struct insn_templateJan Beulich5-12106/+12118
To facilitate a subsequent table parser change, re-order CPU flags and opcode modifier fields. No functional change intended.
2021-03-23x86: split opcode prefix and opcode space representationJan Beulich7-9362/+9374
Commit 8b65b8953af2 ("x86: Remove the prefix byte from non-VEX/EVEX base_opcode") used the opcodeprefix field for two distinct purposes. In preparation of having VEX/XOP/EVEX and non-VEX templates become similar in the representatioon of both encoding space and opcode prefixes, split the field to have a separate one holding an insn's opcode space.
2021-03-23gdb: remote target_longnameSimon Marchi2-1/+4
I noticed it was unused. gdb/ChangeLog: * target.h (target_longname): Remove. Change-Id: Id4f514ea038a6d8d40e11179db587b11793cbbd8
2021-03-23gdb: remove target_is_pushed free functionSimon Marchi10-29/+24
Same principle as the previous patches. gdb/ChangeLog: * target.h (target_is_pushed): Remove, update callers to use inferior::target_is_pushed instead. * target.c (target_is_pushed): Remove. Change-Id: I9862e6205acc65672da807cbe4b46cde009e7b9d
2021-03-23gdb: remove push_target free functionsSimon Marchi30-61/+54
Same as the previous patch, but for the push_target functions. The implementation of the move variant is moved to a new overload of inferior::push_target. gdb/ChangeLog: * target.h (push_target): Remove, update callers to use inferior::push_target. * target.c (push_target): Remove. * inferior.h (class inferior) <push_target>: New overload. Change-Id: I5a95496666278b8f3965e5e8aecb76f54a97c185
2021-03-23gdb: remove unpush_target free functionSimon Marchi17-35/+36
unpush_target unpushes the passed-in target from the current inferior's target stack. Calling it is therefore an implicit dependency on the current global inferior. Remove that function and make the callers use the inferior::unpush_target method directly. This sometimes allows using the inferior from the context rather than the global current inferior. target_unpusher::operator() now needs to be implemented in target.c, otherwise target.h and inferior.h both need to include each other, and that wouldn't work. gdb/ChangeLog: * target.h (unpush_target): Remove, update all callers to use `inferior::unpush_target` instead. (struct target_unpusher) <operator()>: Just declare. * target.c (unpush_target): Remove. (target_unpusher::operator()): New. Change-Id: Ia5172dfb3f373e0a75b991885b50322ca2142a8c
2021-03-23x86: don't open-code PREFIX_NONEJan Beulich2-11/+12
Use the constant rather than literal zero. While at it fold two conditionals (using the same base opcode and prefix) in load_insn_p().
2021-03-23x86: unbreak certain MPX insn operand formsJan Beulich5-27/+55
Commit 8b65b8953af2 ("x86: Remove the prefix byte from non-VEX/EVEX base_opcode") dropped the mandatory prefix bytes from legacy encoded insn templates, but failed to also adjust affected MPX-specific checks in two places. For the expressions to remain halfway readable, introduce local variables to hold current_templates->start.
2021-03-23bfd: avoid "shadowing" of glibc function nameJan Beulich2-1/+5
Old enough glibc has an (unguarded) declaration of index() in string.h, which triggers a "shadows a global declaration" warning.
2021-03-23Automatic date update in version.inGDB Administrator1-1/+1
2021-03-22gdb: handle invalid DWARF when compilation unit is missingAndrew Burgess5-1/+134
Replace an abort call in process_psymtab_comp_unit with a real error, and add a test to cover this case. The case is question is when badly formed DWARF is missing a DW_TAG_compile_unit, DW_TAG_partial_unit, or DW_TAG_type_unit as its top level tag. I then tested with --target_board=readnow and added additional code to also validate the top-level tag in this case. I added an assert that would trigger for the readnow case before I added the fix. I suspect there's lots of places where badly formed DWARF could result in the builder being nullptr when it shouldn't be, but I only added this one assert, as this is the one that would have helped me in this case. gdb/ChangeLog: * dwarf2/read.c (process_psymtab_comp_unit): Replace abort with an error. (process_full_comp_unit): Validate the top-level tag before processing the first DIE. (read_func_scope): Ensure we have a valid builder. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-missing-cu-tag.c: New file. * gdb.dwarf2/dw2-missing-cu-tag.exp: New file.
2021-03-22gdb/objc: make objc_demangle a member function of objc_languageAndrew Burgess3-73/+80
Makes the objc_demangle helper function a member function of objc_language (by renaming it to be the demangle_symbol member function). I also fixed some of the obvious coding standard violations in obj_demangle, so the '&&' operators are now at the start of the line, not the end. Comparison to nullptr are now made explicit, as are comparisons to the null character. There should be no user visible changes after this commit. gdb/ChangeLog: * objc-lang.c (objc_demangle): Renamed to objc_language::demangle_symbol, and moved later in the file. (objc_language::sniff_from_mangled_name): Call demangle_symbol member function. (objc_language::demangle_symbol): Defined outside of class declaration. The definition is the old objc_demangle with NULL changed to nullptr, and if conditions relating to nullptr pointers or null character checks made explicit. * objc-lang.h (objc_demangle): Delete declaration.
2021-03-22Add startswith function and use it instead of CONST_STRNEQ.Martin Liska97-344/+493
bfd/ChangeLog: * bfd-in.h (startswith): Add startswith function. (CONST_STRNEQ): Remove. * bfd-in2.h (startswith): Regenerate with make headers. * archive.c (bfd_slurp_armap): Replace usage of CONST_STRNEQ with startswith. (_bfd_slurp_extended_name_table): Likewise. * archive64.c (_bfd_archive_64_bit_slurp_armap): Likewise. * bfd.c (bfd_get_sign_extend_vma): Likewise. (bfd_convert_section_size): Likewise. (bfd_convert_section_contents): Likewise. * coff-stgo32.c (go32exe_create_stub): Likewise. (go32exe_check_format): Likewise. * coffcode.h (styp_to_sec_flags): Likewise. (GNU_DEBUGALTLINK): Likewise. * coffgen.c (_bfd_coff_section_already_linked): Likewise. (coff_gc_sweep): Likewise. (bfd_coff_gc_sections): Likewise. * cofflink.c (coff_link_add_symbols): Likewise. (process_embedded_commands): Likewise. * compress.c (bfd_is_section_compressed_with_header): Likewise. (bfd_init_section_decompress_status): Likewise. * dwarf2.c (find_debug_info): Likewise. (place_sections): Likewise. * ecoff.c (_bfd_ecoff_slurp_armap): Likewise. * elf-m10300.c (_bfd_mn10300_elf_size_dynamic_sections): Likewise. * elf.c (_bfd_elf_make_section_from_shdr): Likewise. (assign_section_numbers): Likewise. (elfcore_grok_win32pstatus): Likewise. * elf32-arm.c (cmse_scan): Likewise. (elf32_arm_gc_mark_extra_sections): Likewise. (elf32_arm_size_dynamic_sections): Likewise. (is_arm_elf_unwind_section_name): Likewise. * elf32-bfin.c (bfin_size_dynamic_sections): Likewise. * elf32-cr16.c (_bfd_cr16_elf_size_dynamic_sections): Likewise. * elf32-cris.c (elf_cris_size_dynamic_sections): Likewise. * elf32-csky.c (csky_elf_size_dynamic_sections): Likewise. * elf32-hppa.c (elf32_hppa_size_dynamic_sections): Likewise. * elf32-iq2000.c (iq2000_elf_check_relocs): Likewise. * elf32-lm32.c (lm32_elf_size_dynamic_sections): Likewise. * elf32-m32r.c (m32r_elf_size_dynamic_sections): Likewise. * elf32-m68k.c (elf_m68k_size_dynamic_sections): Likewise. * elf32-metag.c (elf_metag_size_dynamic_sections): Likewise. * elf32-msp430.c (msp430_elf_relax_delete_bytes): Likewise. * elf32-nios2.c (nios2_elf32_size_dynamic_sections): Likewise. * elf32-or1k.c (or1k_elf_size_dynamic_sections): Likewise. * elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise. * elf32-s390.c (elf_s390_size_dynamic_sections): Likewise. * elf32-score.c (s3_bfd_score_elf_size_dynamic_sections): Likewise. * elf32-score7.c (s7_bfd_score_elf_size_dynamic_sections): Likewise. * elf32-sh.c (sh_elf_size_dynamic_sections): Likewise. * elf32-tic6x.c (is_tic6x_elf_unwind_section_name): Likewise. (elf32_tic6x_size_dynamic_sections): Likewise. * elf32-vax.c (elf_vax_size_dynamic_sections): Likewise. * elf32-xtensa.c (elf_xtensa_size_dynamic_sections): Likewise. (xtensa_is_insntable_section): Likewise. (xtensa_is_littable_section): Likewise. (xtensa_is_proptable_section): Likewise. (xtensa_property_section_name): Likewise. (xtensa_callback_required_dependence): Likewise. * elf64-alpha.c (elf64_alpha_size_dynamic_sections): Likewise. * elf64-hppa.c (elf64_hppa_size_dynamic_sections): Likewise. * elf64-ia64-vms.c (is_unwind_section_name): Likewise. (get_reloc_section): Likewise. (elf64_ia64_size_dynamic_sections): Likewise. (elf64_ia64_object_p): Likewise. * elf64-mmix.c (mmix_elf_add_symbol_hook): Likewise. * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Likewise. * elf64-s390.c (elf_s390_size_dynamic_sections): Likewise. * elflink.c (elf_link_add_object_symbols): Likewise. (_bfd_elf_gc_mark_extra_sections): Likewise. (bfd_elf_parse_eh_frame_entries): Likewise. (_bfd_elf_section_already_linked): Likewise. * elfnn-aarch64.c (elfNN_aarch64_size_dynamic_sections): Likewise. * elfnn-ia64.c (is_unwind_section_name): Likewise. (elfNN_ia64_size_dynamic_sections): Likewise. (elfNN_ia64_object_p): Likewise. * elfxx-mips.c (FN_STUB_P): Likewise. (CALL_STUB_P): Likewise. (CALL_FP_STUB_P): Likewise. (_bfd_mips_elf_section_from_shdr): Likewise. (_bfd_mips_elf_fake_sections): Likewise. (_bfd_mips_elf_size_dynamic_sections): Likewise. (_bfd_mips_final_write_processing): Likewise. (_bfd_mips_elf_final_link): Likewise. * elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): Likewise. * elfxx-x86.c (elf_i386_is_reloc_section): Likewise. (elf_x86_64_is_reloc_section): Likewise. * hpux-core.c (thread_section_p): Likewise. * libcoff.h (bfd_pei_p): Likewise. * linker.c (REAL): Likewise. (unwrap_hash_lookup): Likewise. (_bfd_generic_link_add_one_symbol): Likewise. * mmo.c (mmo_internal_write_section): Likewise. * osf-core.c (osf_core_core_file_p): Likewise. * pef.c (bfd_pef_print_symbol): Likewise. * pei-x86_64.c (pex64_print_all_pdata_sections): Likewise. * som.c (som_slurp_symbol_table): Likewise. (som_slurp_armap): Likewise. * wasm-module.c (wasm_compute_custom_section_file_position): Likewise. binutils/ChangeLog: * dlltool.c (scan_drectve_symbols): Replace usage of CONST_STRNEQ with startswith. * emul_aix.c (ar_emul_aix_parse_arg): Likewise. * objcopy.c (is_mergeable_note_section): Likewise. * objdump.c (dump_dwarf_section): Likewise. * prdbg.c (pr_method_type): Likewise. (pr_class_baseclass): Likewise. (tg_class_baseclass): Likewise. * readelf.c (process_lto_symbol_tables): Likewise. * stabs.c (ULLHIGH): Likewise. (parse_stab_argtypes): Likewise. (stab_demangle_function_name): Likewise. gas/ChangeLog: * config/tc-i386.c (md_parse_option): Replace usage of CONST_STRNEQ with startswith. (x86_64_section_word): Likewise. * config/tc-sparc.c (md_parse_option): Likewise. gdb/ChangeLog: * arm-tdep.c (show_disassembly_style_sfunc): Replace usage of CONST_STRNEQ with startswith. (_initialize_arm_tdep): Likewise. ld/ChangeLog: * emultempl/aix.em: Replace usage of CONST_STRNEQ with startswith. * emultempl/beos.em: Likewise. * emultempl/elf.em: Likewise. * emultempl/pe.em: Likewise. * emultempl/pep.em: Likewise. * emultempl/xtensaelf.em: Likewise. * ldctor.c (ctor_prio): Likewise. * ldelf.c (ldelf_try_needed): Likewise. (ldelf_parse_ld_so_conf): Likewise. (ldelf_after_open): Likewise. (output_rel_find): Likewise. (ldelf_place_orphan): Likewise. * ldfile.c (ldfile_add_library_path): Likewise. * ldlang.c (lang_add_input_file): Likewise. * ldmain.c (get_sysroot): Likewise. (get_emulation): Likewise. (add_archive_element): Likewise. * ldwrite.c (unsplittable_name): Likewise. (clone_section): Likewise. * lexsup.c (parse_args): Likewise. * pe-dll.c (is_import): Likewise. (pe_implied_import_dll): Likewise. opcodes/ChangeLog: * aarch64-dis.c (parse_aarch64_dis_option): Replace usage of CONST_STRNEQ with startswith. * arc-dis.c (parse_option): Likewise. * arm-dis.c (parse_arm_disassembler_options): Likewise. * cris-dis.c (print_with_operands): Likewise. * h8300-dis.c (bfd_h8_disassemble): Likewise. * i386-dis.c (print_insn): Likewise. * ia64-gen.c (fetch_insn_class): Likewise. (parse_resource_users): Likewise. (in_iclass): Likewise. (lookup_specifier): Likewise. (insert_opcode_dependencies): Likewise. * mips-dis.c (parse_mips_ase_option): Likewise. (parse_mips_dis_option): Likewise. * s390-dis.c (disassemble_init_s390): Likewise. * wasm32-dis.c (parse_wasm32_disassembler_options): Likewise.
2021-03-22gdb/testsuite: use the correct .debug_str section name for DW_FORM_strpAndrew Burgess4-1/+137
When handling DWARF attributes of the form DW_FORM_strp the strings should be placed in the .debug_str section, not .debug_string as they currently are by the DWARF assembler (in lib/dwarf.exp). I've added a test. This is as much to test the DWARF generator as it is to test GDB as GCC makes frequent use of DW_FORM_strp so we can be pretty sure this part of GDB is already well tested. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-using-debug-str.c: New file. * gdb.dwarf2/dw2-using-debug-str.exp: New file. * lib/dwarf.exp (Dwarf::DW_FORM_strp): Create .debug_str section, not .debug_string.
2021-03-22gdbserver: convert the global dll list into a process_info fieldTankut Baris Aktemur6-20/+70
The 'all_dlls' list is global. This would cause the complete dll list to be reported for individual processes. Move the list into the process_info struct. Currently the dll list is used only by the win32-low target, which does not support the multi-process feature. Therefore, it practically does not matter whether the list is global or per-process. However, there may be targets that are outside the binutils-gdb repo (e.g. we, at Intel, have such a target) that have multi-process and use the dll list. So, it makes sense to do the right thing. gdbserver/ChangeLog: 2021-03-22 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * inferiors.h (struct process_info) <all_dlls, dlls_changed>: New fields. * dll.h (loaded_dll) (unloaded_dll): Declare an overloaded version that takes a proc parameter. * dll.cc (loaded_dll) (unloaded_dll): Implement the overloaded versions. (clear_dlls): Clear all process' dll lists. (all_dlls, dlls_changed): Remove the global variables. * remote-utils.cc (prepare_resume_reply): Update to consider a dll list per proc. * server.cc (handle_qxfer_libraries): Ditto. (handle_v_attach): Ditto. (captured_main): Ditto.
2021-03-22bfd: add translation wrappers to PE image section RVA diagnosticsJan Beulich2-2/+8
In commit 87fa7d568ddd ("bfd: don't silently wrap or truncate PE image section RVAs") I forgot about the need to wrap string literals for translation.
2021-03-22Automatic date update in version.inGDB Administrator1-1/+1
2021-03-21Provide an inline startswith function in bfd.hAlan Modra7-12/+35
bfd/ * bfd-in.h (startswith): New inline. (CONST_STRNEQ): Use startswith. * bfd-in2.h: Regenerate. gdbsupport/ * common-utils.h (startswith): Delete version now supplied by bfd.h. libctf/ * ctf-impl.h: Include string.h.
2021-03-21Automatic date update in version.inGDB Administrator1-1/+1
2021-03-20Allow multiple partial symbol readers per objfileTom Tromey13-61/+67
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-20Switch objfile to hold a list of psymbol readersTom Tromey8-262/+337
This changes objfile::qf to be a forward_list, and then updates all the uses to iterate over the list. Note that there is still only ever a single element in the list; this is handled by clearing the list whenever an object is added. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_build_psymtabs): Update. * symfile.c (syms_from_objfile_1, reread_symbols): Update. * symfile-debug.c (objfile::has_partial_symbols) (objfile::find_last_source_symtab) (objfile::forget_cached_source_info) (objfile::map_symtabs_matching_filename, objfile::lookup_symbol) (objfile::print_stats, objfile::dump) (objfile::expand_symtabs_for_function) (objfile::expand_all_symtabs) (objfile::expand_symtabs_with_fullname) (objfile::map_matching_symbols) (objfile::expand_symtabs_matching) (objfile::find_pc_sect_compunit_symtab) (objfile::map_symbol_filenames) (objfile::find_compunit_symtab_by_address) (objfile::lookup_global_symbol_language) (objfile::require_partial_symbols): Update. * psymtab.c (maintenance_print_psymbols) (maintenance_info_psymtabs, maintenance_check_psymtabs): Update. * objfiles.h (struct objfile) <qf>: Now a forward_list. * objfiles.c (objfile_relocate1): Update. * elfread.c (elf_symfile_read): Update.
2021-03-20Remove objfile::psymtabsTom Tromey2-8/+4
The method objfile::psymtabs is no longer used and can be removed. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * objfiles.h (struct objfile) <psymtabs>: Remove method.
2021-03-20Change count_psyms to be a method on psymbol_functionsTom Tromey3-4/+14
This removes a use of objfile->psymtabs by changing count_psyms to be a method on psymbol_functions. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * psymtab.c (psymbol_functions::count_psyms): Rename. (psymbol_functions::print_stats): Update. * psympriv.h (struct psymbol_functions) <count_psyms>: Declare method.
2021-03-20Remove last objfile partial_symtab references from psymtab.cTom Tromey3-100/+143
This removes the last references to the partial_symtab via the objfile from psymtab.c. require_partial_symbols is now a method on psymbol_functions, and maintenance_print_psymbols is changed to use dynamic_cast to verify that it is examining partial symbols. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * psymtab.c (psymbol_functions::require_partial_symbols): Rename. (psymbol_functions::find_pc_sect_psymtab): Rename. (psymbol_functions::find_pc_sect_compunit_symtab) (maintenance_print_psymbols, maintenance_check_psymtabs): Update. * psympriv.h (struct psymbol_functions) <require_partial_symbols>: Declare new method. <get_partial_symtabs, find_pc_sect_psymtab>: Likewise.
2021-03-20Add partial_symtabs parameter to psymtab construction functionsTom Tromey9-107/+206
This adds a partial_symtabs parameter to the psymtab constructors and to add_psymbol. This helps with the overall project of removing the partial symtabs from the objfile. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_start_psymtab): Add partial_symtabs parameter. (xcoff_end_psymtab, scan_xcoff_symtab): Update. * psymtab.c (partial_symtab::partial_symtab): Add partial_symtabs parameter. (add_psymbol_to_bcache): Remove. (partial_symtab::add_psymbol): Add partial_symtabs parameter. (partial_symtab::add_psymbol, partial_symtab::partial_symtab): Likewise. * psympriv.h (partial_symtab): Add partial_symtabs parameter. <add_psymbol>: Likewise. (standard_psymtab, legacy_psymtab): Likewise. * mdebugread.c (parse_partial_symbols): Update. (handle_psymbol_enumerators): Add partial_symtabs parameter. (handle_psymbol_enumerators): Update. (new_psymtab): Add partial_symtabs parameter. * dwarf2/read.h (dwarf2_psymtab): Add partial_symtabs parameter. * dwarf2/read.c (dwarf2_include_psymtab): Add partial_symtabs parameter. (dwarf2_create_include_psymtab): Add partial_symtabs parameter. (create_partial_symtab, add_partial_symbol, dwarf_decode_lines): Update. * dbxread.c (read_dbx_symtab): Update. (start_psymtab): Add partial_symtabs parameter. (dbx_end_psymtab): Update. * ctfread.c (struct ctf_context) <partial_symtabs>: New member. (ctf_psymtab): Add partial_symtabs parameter. (create_partial_symtab, ctf_psymtab_type_cb, ctf_psymtab_var_cb): Update. (scan_partial_symbols): Add partial_symtabs parameter. (scan_partial_symbols, elfctf_build_psymtabs) (ctf_psymtab_add_enums): Update.
2021-03-20Introduce objfile::require_partial_symbolsTom Tromey6-49/+75
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-20Remove sym_fns::sym_read_psymbolsTom Tromey11-61/+59
Partial symbols are read via the sym_fns::sym_read_psymbols function pointer. In order to separate the partial symbols from the objfile, this must instead be done via a virtual method on quick_symbol_functions. This patch implements this change. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_sym_fns): Update. * symfile.h (struct sym_fns) <sym_read_psymbols>: Remove. * symfile-debug.c (objfile::has_partial_symbols): Use can_lazily_read_symbols. (debug_sym_read_psymbols): Remove. (debug_sym_fns, install_symfile_debug_logging): Update. * quick-symbol.h (struct quick_symbol_functions) <can_lazily_read_symbols, read_partial_symbols>: New methods. * psymtab.c (require_partial_symbols): Use new 'qf' methods. * mipsread.c (ecoff_sym_fns): Update. * machoread.c (macho_sym_fns): Update. * elfread.c (struct lazy_dwarf_reader): New. (elf_symfile_read): Update. (read_psyms): Now a method of lazy_dwarf_reader. (elf_sym_fns): Update. (elf_sym_fns_lazy_psyms): Remove. * dbxread.c (aout_sym_fns): Update. * coffread.c (coff_sym_fns): Update.
2021-03-20Rearrange psymtab_storage constructionTom Tromey3-3/+9
This changes objfile so that it doesn't construct a psymtab_storage object until the psymtab functions are installed. It also applies a similar treatment to reread_symbols. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * symfile.c (syms_from_objfile_1): Call reset_psymtabs. (reread_symbols): Move reset_psymtabs call later. * objfiles.c (objfile::objfile): Don't initialize partial_symtabs.
2021-03-20Attach partial symtab storage to psymbol_functionsTom Tromey6-24/+76
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-20Reference psymtabs via per_bfd in DWARF readerTom Tromey2-17/+32
This changes the DWARF reader to reference the psymtabs via the per_bfd object, rather than via the objfile. This helps isolate the partial symtabs from the objfile. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_create_include_psymtab): Add per_bfd parameter. (process_psymtab_comp_unit_reader) (build_type_psymtab_dependencies, dwarf2_build_psymtabs_hard) (add_partial_subprogram, dwarf2_ranges_read, dwarf_decode_lines): Reference psymtabs via per_bfd.
2021-03-20Change how DWARF index writer finds address mapTom Tromey2-11/+19
This changes the DWARF index writer to find the psymtab address map in the per_bfd object, rather than go via the objfile. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * dwarf2/index-write.c (struct addrmap_index_data) <objfile>: Remove. (add_address_entry): Remove objfile parameter. (add_address_entry_worker): Update. (write_address_map): Replace objfile parameter with per_bfd. (write_gdbindex, write_psymtabs_to_index): Update.
2021-03-20Move psymtab statistics printing to psymtab.cTom Tromey11-60/+84
This moves all the psymtab statistics printing code form symmisc.c to psymtab.c. This changes the formatting of the output a little, but considering that it is a maint command (and, I assume, a rarely used one), this seems fine to me. This change helps further dissociate the psymtab from the objfile. In the end there will be no direct connect -- only via the quick_symbol_functions interface. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_base_index_functions::print_stats): Add print_bcache parameter. * symfile-debug.c (objfile::print_stats): Add print_bcache parameter. * quick-symbol.h (struct quick_symbol_functions) <print_stats>: Add print_bcache parameter. * symmisc.c (print_symbol_bcache_statistics, count_psyms): Move code to psymtab.c. (print_objfile_statistics): Move psymtab code to psymtab.c. * psymtab.c (count_psyms): Move from symmisc.c. (psymbol_functions::print_stats): Print partial symbol and bcache statistics. Add print_bcache parameter. * objfiles.h (print_symbol_bcache_statistics): Don't declare. (struct objfile) <print_stats>: Add print_bcache parameter. * maint.c (maintenance_print_statistics): Update. gdb/testsuite/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * gdb.base/maint.exp: Update "maint print statistics" output.
2021-03-20Change how DWARF indices use addrmapTom Tromey3-26/+32
Currently the DWARF index readers reuse the objfile's partial symbol table in order to store an addrmap. We're going to be remove the partial symbol object, so this patch changes the DWARF reader to store this addrmap in the per_bfd object. This object is chosen, rather than the quick_symbol_functions subclass, because the addrmap can be shared across objfiles. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * dwarf2/read.h (struct dwarf2_per_bfd) <psymtabs_addrmap>: New member. * dwarf2/read.c (create_addrmap_from_index) (create_addrmap_from_aranges): Set per_bfd addrmap. (dwarf2_read_gdb_index): Don't set partial_symtabs. (dwarf2_base_index_functions::find_pc_sect_compunit_symtab): Use per_bfd addrmap. (dwarf2_read_debug_names): Don't set partial_symtabs. (dwarf2_initialize_objfile): Likewise.
2021-03-20Set per_bfd->partial_symtabs earlierTom Tromey2-6/+11
dwarf2_build_psymtabs sets per_bfd->partial_symtabs at its end, in order to facilitate sharing. However, in order to diassociate partial symtabs from the objfile, we want to change the DWARF reader to reference partial symtabs via the per_bfd. So, we want to set this reference before reading psymtabs. This is safe to do because the assignment is done unconditionally. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_build_psymtabs): Set partial_symtabs earlier.
2021-03-20Do not pass objfile to psymtab_discarderTom Tromey3-10/+17
This changes the psymtab_discarder to not assume that partial symtabs are attached to the objfile. Instead, a psymtab_storage object is passed directly to it. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * psympriv.h (psymtab_discarder): Take psymtab_storage parameter. (~psymtab_discarder, keep): Update. <m_objfile>: Remove. <m_partial_symtabs>: New member. * dwarf2/read.c (dwarf2_build_psymtabs): Update.
2021-03-20Change how some psymbol readers access the psymtab storageTom Tromey5-27/+59
Currently, all psymbol readers access the psymtab storage via the objfile. This is done directly at any spot requiring the storage. In order to move psymbols out of the objfile, the psymtab_storage must be passed in explicitly. This patch consolidates the access of the storage in a single place in these readers, updating various functions to pass the storage object around. "Hidden" uses, like "objfile->psymtabs ()", are also updated. The DWARF reader is not yet touched. That requires more complicated changes. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * xcoffread.c (xcoff_end_psymtab): Add partial_symtabs parameter. (xcoff_end_psymtab): Update. (scan_xcoff_symtab): Add partial_symtabs parameter. (xcoff_initial_scan): Update. * stabsread.h (dbx_end_psymtab): Add partial_symtabs parameter. * mdebugread.c (mdebug_build_psymtabs): Update. (parse_partial_symbols): Add partial_symtabs parameter. * dbxread.c (dbx_symfile_read): Update. (read_dbx_symtab): Add partial_symtabs parameter. (read_dbx_symtab): Update. (dbx_end_psymtab): Add partial_symtabs parameter.
2021-03-20Move psymbol_map out of objfileTom Tromey6-27/+60
objfile::psymbol_map is used to implement a Rust feature. It is currently specific to partial symbols -- it isn't used by the DWARF indices. This patch moves it out of objfile and into psymbol_functions, adding a new method to quick_symbol_functions to handle the clearing case. This is needed because the map holds unrelocated addresses. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * quick-symbol.h (struct quick_symbol_functions) <relocated>: New method. * psymtab.h (struct psymbol_functions) <relocated>: New method. <fill_psymbol_map>: Declare method. <m_psymbol_map>: New member. * psymtab.c (psymbol_functions::fill_psymbol_map): Rename. (psymbol_functions::find_compunit_symtab_by_address): Update. * objfiles.h (reset_psymtabs): Don't clear psymbol_map. (struct objfile) <psymbol_map>: Remove. * objfiles.c (objfile_relocate1): Update.
2021-03-20Convert quick_symbol_functions to use methodsTom Tromey11-191/+416
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-03-20Move sym_fns::qf to objfileTom Tromey12-89/+77
Currently the "partial" symbol reader is attached to the objfile's symbol functions. However, in order to allow multiple separate partial symbol readers, this association must be changed. This patch moves the "qf" member out of sym_fns as a step toward that goal. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * psymtab.c (require_partial_symbols): Check that 'sf' is not null. * xcoffread.c (xcoff_sym_fns): Update. * symfile.h (struct sym_fns) <qf>: Remove. * symfile.c (syms_from_objfile_1, reread_symbols): Update. * symfile-debug.c (objfile::has_partial_symbols) (objfile::find_last_source_symtab) (objfile::forget_cached_source_info) (objfile::map_symtabs_matching_filename, objfile::lookup_symbol) (objfile::print_stats, objfile::dump) (objfile::expand_symtabs_for_function) (objfile::expand_all_symtabs) (objfile::expand_symtabs_with_fullname) (objfile::map_matching_symbols) (objfile::expand_symtabs_matching) (objfile::find_pc_sect_compunit_symtab) (objfile::map_symbol_filenames) (objfile::find_compunit_symtab_by_address) (objfile::lookup_global_symbol_language, debug_sym_fns) (install_symfile_debug_logging): Update. * objfiles.h (struct objfile) <qf>: New member. * mipsread.c (ecoff_sym_fns): Update. * machoread.c (macho_sym_fns): Update. * elfread.c (elf_sym_fns_gdb_index, elf_sym_fns_debug_names): Don't declare. (elf_symfile_read, elf_sym_fns, elf_sym_fns_lazy_psyms): Update. * dbxread.c (aout_sym_fns): Update. * coffread.c (coff_sym_fns): Update.
2021-03-20Move quick_symbol_functions to a new headerTom Tromey3-205/+238
This introduces a new header, quick-symbol.h, and moves quick_symbol_functions and related typedefs into it. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * symfile.h (symbol_compare_ftype, symbol_filename_ftype) (expand_symtabs_file_matcher_ftype) (expand_symtabs_symbol_matcher_ftype) (expand_symtabs_exp_notify_ftype, struct quick_symbol_functions): Move to quick-symbol.h. * quick-symbol.h: New file.
2021-03-20Introduce method wrappers for quick_symbol_functionsTom Tromey11-368/+368
This introduces wrappers for each function in quick_symbol_functions. The wrappers are methods on objfile, and are defined in symfile-debug.c, so that they can use the symfile_debug variable. Places that call the quick functions are all updated to call these new wrapper methods. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * symtab.c (iterate_over_symtabs, expand_symtab_containing_pc) (lookup_symbol_via_quick_fns, find_quick_global_symbol_language) (basic_lookup_transparent_type_quick) (find_pc_sect_compunit_symtab, find_symbol_at_address) (find_line_symtab, global_symbol_searcher::expand_symtabs): Update. * symmisc.c (print_objfile_statistics, dump_objfile) (maintenance_expand_symtabs): Update. * symfile.c (symbol_file_add_with_addrs) (expand_symtabs_matching, map_symbol_filenames): Update. * symfile-debug.c (objfile::has_partial_symbols) (objfile::find_last_source_symtab) (objfile::forget_cached_source_info) (objfile::map_symtabs_matching_filename, objfile::lookup_symbol) (objfile::print_stats, objfile::dump) (objfile::expand_symtabs_for_function) (objfile::expand_all_symtabs) (objfile::expand_symtabs_with_fullname) (objfile::map_matching_symbols) (objfile::expand_symtabs_matching) (objfile::find_pc_sect_compunit_symtab) (objfile::map_symbol_filenames) (objfile::find_compunit_symtab_by_address) (objfile::lookup_global_symbol_language): New methods. (debug_sym_quick_functions): Remove. (debug_sym_fns, install_symfile_debug_logging): Update. * source.c (forget_cached_source_info_for_objfile) (select_source_symtab): Update. * objfiles.h (struct objfile): Add methods corresponding to quick_symbol_functions. * objfiles.c (objfile::has_partial_symbols): Move to symfile-debug.c. * linespec.c (iterate_over_all_matching_symtabs): Update. * cp-support.c (add_symbol_overload_list_qualified): Update. * ada-lang.c (add_nonlocal_symbols): Update.
2021-03-20Change objfile::has_partial_symbols to return boolTom Tromey7-10/+20
This changes objfile::has_partial_symbols and quick_symbol_functions::has_symbols to return bool. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * objfiles.h (struct objfile) <has_partial_symbols>: Return bool. * symfile.h (struct quick_symbol_functions) <has_symbols>: Return bool. * symfile-debug.c (debug_qf_has_symbols): Return bool. * psymtab.c (psym_has_symbols): Return bool. * objfiles.c (objfile::has_partial_symbols): Return bool. * dwarf2/read.c (dw2_has_symbols): Return bool.
2021-03-20Change objfile_has_partial_symbols to a methodTom Tromey7-16/+29
This changes objfile_has_partial_symbols to be a method on objfile. There are some other functions that could benefit from this sort of change, but this was the only one that was relevant to this series. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * symfile.c (read_symbols): Update. * objfiles.h (struct objfile) <has_partial_symbols>: New method. (objfile_has_partial_symbols): Don't declare. * objfiles.c (objfile::has_partial_symbols): Rename from objfile_has_partial_symbols. (objfile_has_symbols, have_partial_symbols): Update. * elfread.c (elf_symfile_read): Update. * dwarf2/read.c (dwarf2_has_info): Update. * coffread.c (coff_symfile_read): Update.
2021-03-20Introduce dwarf2/public.hTom Tromey10-27/+67
This moves some more DWARF code out of symfile.h and into a new header, dwarf2/public.h. This header is intended to describe the public API of the DWARF reader. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * coffread.c: Include dwarf2/public.h. * dwarf2/frame.c: Include dwarf2/public.h. * dwarf2/index-write.h: Include dwarf2/public.h, not symfile.h. * dwarf2/public.h: New file. * dwarf2/read.c: Include dwarf2/public.h. * elfread.c: Include dwarf2/public.h. * machoread.c: Include dwarf2/public.h. * symfile.h (dwarf2_has_info, enum dw_index_kind) (dwarf2_initialize_objfile, dwarf2_build_psymtabs) (dwarf2_build_frame_info): Move to dwarf2/public.h. * xcoffread.c: Include dwarf2/public.h.