Commit Graph

105560 Commits

Author SHA1 Message Date
Andrew Burgess
702cf3f5df gdb: handle invalid DWARF when compilation unit is missing
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-22 14:34:53 +00:00
Andrew Burgess
46fec6428e gdb/objc: make objc_demangle a member function of objc_language
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-22 10:07:37 +00:00
Martin Liska
08dedd6631 Add startswith function and use it instead of CONST_STRNEQ.
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-22 11:01:43 +01:00
Andrew Burgess
1e7fcccb8d gdb/testsuite: use the correct .debug_str section name for DW_FORM_strp
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-22 10:00:19 +00:00
Tankut Baris Aktemur
d171632faa gdbserver: convert the global dll list into a process_info field
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-22 09:18:04 +01:00
Jan Beulich
2aaf2ce843 bfd: add translation wrappers to PE image section RVA diagnostics
In commit 87fa7d568d ("bfd: don't silently wrap or truncate PE image
section RVAs") I forgot about the need to wrap string literals for
translation.
2021-03-22 08:23:42 +01:00
GDB Administrator
1808ba4b9a Automatic date update in version.in 2021-03-22 00:00:08 +00:00
Alan Modra
e93388417c Provide an inline startswith function in bfd.h
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-21 23:00:32 +10:30
GDB Administrator
38e41a8845 Automatic date update in version.in 2021-03-21 00:00:07 +00:00
Tom Tromey
eb36a3eb2f Allow multiple partial symbol readers per objfile
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-20 17:23:46 -06:00
Tom Tromey
e11145903f Switch objfile to hold a list of psymbol readers
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-20 17:23:45 -06:00
Tom Tromey
de909f0b76 Remove objfile::psymtabs
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-20 17:23:45 -06:00
Tom Tromey
caf8c1e507 Change count_psyms to be a method on psymbol_functions
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-20 17:23:45 -06:00
Tom Tromey
3aa31ce788 Remove last objfile partial_symtab references from psymtab.c
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-20 17:23:45 -06:00
Tom Tromey
7b249e470a Add partial_symtabs parameter to psymtab construction functions
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-20 17:23:45 -06:00
Tom Tromey
d1eef86d12 Introduce objfile::require_partial_symbols
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-20 17:23:44 -06:00
Tom Tromey
eb00e4686d Remove sym_fns::sym_read_psymbols
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-20 17:23:44 -06:00
Tom Tromey
b29b98cf84 Rearrange psymtab_storage construction
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-20 17:23:44 -06:00
Tom Tromey
17d66340eb Attach partial symtab storage to psymbol_functions
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-20 17:23:44 -06:00
Tom Tromey
8468590493 Reference psymtabs via per_bfd in DWARF reader
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-20 17:23:44 -06:00
Tom Tromey
79cc99f69b Change how DWARF index writer finds address map
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-20 17:23:43 -06:00
Tom Tromey
4829711b6b Move psymtab statistics printing to psymtab.c
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-20 17:23:43 -06:00
Tom Tromey
efd7398ee2 Change how DWARF indices use addrmap
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-20 17:23:43 -06:00
Tom Tromey
51962708bd Set per_bfd->partial_symtabs earlier
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-20 17:23:43 -06:00
Tom Tromey
484b109063 Do not pass objfile to psymtab_discarder
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-20 17:23:42 -06:00
Tom Tromey
7e9c0476a7 Change how some psymbol readers access the psymtab storage
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-20 17:23:42 -06:00
Tom Tromey
75336a5a2a Move psymbol_map out of objfile
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-20 17:23:42 -06:00
Tom Tromey
39298a5d97 Convert quick_symbol_functions to use methods
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-20 17:23:42 -06:00
Tom Tromey
5c3f1e5bfc Move sym_fns::qf to objfile
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-20 17:23:41 -06:00
Tom Tromey
9b99dcc8db Move quick_symbol_functions to a new header
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-20 17:23:41 -06:00
Tom Tromey
4d080b4687 Introduce method wrappers for quick_symbol_functions
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-20 17:23:41 -06:00
Tom Tromey
fae2120ba0 Change objfile::has_partial_symbols to return bool
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-20 17:23:41 -06:00
Tom Tromey
a8ad4f3c17 Change objfile_has_partial_symbols to a method
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-20 17:23:41 -06:00
Tom Tromey
701823751b Introduce dwarf2/public.h
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.
2021-03-20 17:23:40 -06:00
Tom Tromey
18038e6363 Move some DWARF code out of symfile.h
This moves a bit of the DWARF-specific code out of symfile.h and into
dwarf2/read.h.

gdb/ChangeLog
2021-03-20  Tom Tromey  <tom@tromey.com>

	* symfile.h (enum dwarf2_section_enum)
	(dwarf2_get_section_info): Move to dwarf2/read.h.
	* dwarf2/read.h (enum dwarf2_section_enum)
	(dwarf2_get_section_info): Move from symfile.h.
2021-03-20 17:23:40 -06:00
Cary Coutant
35891b4775 Use stdout when printing object file names for -t option.
gold/
	PR gold/27615
	* errors.cc (Errors::trace): New method.
	(gold_trace): New function.
	* errors.h (Errors::trace): New method.
	* gold.h (gold_trace): New function.
	* object.cc (Input_objects::add_object): Use gold_trace to print
	object file names.
2021-03-19 18:41:12 -07:00
Cary Coutant
b218a83935 Fix failing test for PR 23870.
gold/
	PR gold/pr23870
	* testsuite/aarch64_pr23870_bar.c: Return a magic value.
	* testsuite/aarch64_pr23870_foo.c: Check the magic value and return
	success or failure.
2021-03-19 17:58:32 -07:00
H.J. Lu
1de96e5de9 x86-64: Add a testcase for PR ld/27590
PR ld/27590
	* testsuite/ld-x86-64/pr27590.rd: New file.
	* testsuite/ld-x86-64/pr27590a.obj.bz2: Likewise.
	* testsuite/ld-x86-64/pr27590b.obj.bz2: Likewise.
	* testsuite/ld-x86-64/x86-64.exp: Run ld/27590 test.
2021-03-19 17:23:47 -07:00
Alan Modra
15407e7e0d DWARF LTO debug sections vs. .stabstr
The exception for debug sections in clearing SEC_EXCLUDE when
relocatable was really for one specific debug section, so let's make
it do just that.

bfd/
	PR 27590
	* elf.c (_bfd_elf_make_section_from_shdr): Remove SHF_EXCLUDE
	test for .gnu.debuglto*.
ld/
	PR 27590
	* ldlang.c (lang_gc_sections): Clear SEC_EXCLUDE when relocatable
	for all sections except .stabstr.
2021-03-20 10:35:18 +10:30
GDB Administrator
6536577167 Automatic date update in version.in 2021-03-20 00:00:06 +00:00
Holger Berger
07b1c3dbd9 Fix call to system fallocate to handle errno correctly.
2021-03-19  Holger Berger  <holger.berger@googlemail.com>

gold/
	PR gold/26541
	* output.cc (gold_fallocate): Use errno when calling system fallocate.
2021-03-19 16:18:53 -07:00
Cary Coutant
cc1849716f Fix typo in previous patch: should use struct mallinfo2.
PR gold/26585
	* main.cc (main): Fix typo in previous patch.
2021-03-19 15:29:49 -07:00
Cary Coutant
9331846e44 Regenerate config.in, missing from previous commit.
PR gold/26585
	* config.in: Regenerate from previous commit.
2021-03-19 15:23:49 -07:00
Duncan Simpson
4ee6049505 Fix gold to use mallinfo2 if available instead of deprecated mallinfo.
gold/
	PR gold/26585
	* configure.ac: Add check for mallinfo2.
	* configure: Regenerate.
	* main.cc (main): Use mallinfo2 if available.
2021-03-19 14:22:08 -07:00
Cary Coutant
5cde809b7b Add DWARF 5 support in gold.
elfcpp/
	PR gold/27246
	* dwarf.h (enum DW_LNCT): Add line number table content type codes.
	(enum DW_LINE_OPS): Reformat.
	(enum DW_LINE_EXTENDED_OPS): Reformat.
	(enum DW_CHILDREN): Reformat.
	(enum DW_RLE): Add range list entry types.
	(enum DW_SECT): Update values for DWARF 5.

gold/
	PR gold/27246
	* dwarf_reader.cc (Dwarf_abbrev_table::do_get_abbrev): Handle
	DW_FORM_implicit_const.
	(Dwarf_ranges_table::read_ranges_table): Add version parameter;
	Adjust all callers.  Look for .debug_rnglists section if DWARF 5.
	(Dwarf_ranges_table::read_range_list_v5): New method.
	(Dwarf_die::read_attributes): Handle new DWARF 5 DW_FORM codes.
	(Dwarf_die::skip_attributes): Likewise.
	(Dwarf_info_reader::do_parse): Support DWARF 5 unit header format.
	(Dwarf_info_reader::read_3bytes_from_pointer): New method.
	(Sized_dwarf_line_info::Sized_dwarf_line_info): Initialize
	str_buffer_, str_buffer_start, reloc_map_, line_number_map_.
	Look for .debug_line_str section.
	(Sized_dwarf_line_info::read_header_prolog): Support DWARF 5 prolog.
	(Sized_dwarf_line_info::read_header_tables): Rename to...
	(Sized_dwarf_line_info::read_header_tables_v2): ... this.
	(Sized_dwarf_line_info::read_header_tables_v5): New method.
	(Sized_dwarf_line_info::process_one_opcode): Insert missing "this->".
	Change advance_line to signed int64_t.
	(Sized_dwarf_line_info::read_lines): Add endptr parameter; adjust
	callers.  Insert missing "this->".
	(Sized_dwarf_line_info::read_line_mappings): Support DWARF 5.
	(Sized_dwarf_line_info::do_addr2line): Add debug code.
	* dwarf_reader.h (Dwarf_abbrev_table::Attribute): Add implicit_const
	field. Adjust constructor.
	(Dwarf_abbrev_table::add_sttribute): Add implicit_const parameter.
	(Dwarf_ranges_table::read_ranges_table): Add version parameter.
	(Dwarf_ranges_table::read_range_list_v5): New method.
	(Dwarf_die): Remove unused attr_off field.
	(Dwarf_info_reader::Dwarf_info_reader): Initialize unit_type_ field.
	(Dwarf_info_reader::is_type_unit): New method.
	(Dwarf_info_reader::read_3bytes_from_pointer): New method.
	(Dwarf_info_reader::read_range_list): Call read_range_list_v5 for
	DWARF 5 range lists.
	(Dwarf_info_reader::is_type_unit_): Remove.
	(Dwarf_info_reader::unit_type_): New field.
	(Sized_dwarf_line_info::~Sized_dwarf_line_info): Delete
	str_buffer_start_.
	(Sized_dwarf_line_info::read_header_tables): Rename to...
	(Sized_dwarf_line_info::read_header_tables_v2): ... this.
	(Sized_dwarf_line_info::read_header_tables_v5): New method.
	(Sized_dwarf_line_info::read_lines): Add endptr parameter.
	(Sized_dwarf_line_info::Dwarf_line_infoHeader): Add address_size field.
	(Sized_dwarf_line_info::str_buffer_): New field.
	(Sized_dwarf_line_info::str_buffer_end_): New field.
	(Sized_dwarf_line_info::str_buffer_start_): New field.
	(Sized_dwarf_line_info::end_of_header_length_): New field.
	(Sized_dwarf_line_info::end_of_unit_): New field.
2021-03-19 13:55:35 -07:00
Kevin Buettner
e0d6d27406 Fix potential hang during gdbserver testing
We're currently seeing testing of native-extended-gdbserver hang while
testing the x86_64 architecture on both Fedora 34 and Fedora Rawhide.
The test responsible for the hang is gdb.threads/fork-plus-threads.exp.

While there is clearly a problem/bug with this test on F34 and
Rawhide, it's also the case that testing should not hang.  This commit
prevents the hang by waiting with the "-nowait" flag in
close_gdbserver.

The -nowait flag is also used in the kill_wait_spawned_process proc in
gdb/testsuite/lib/gdb.exp, so there is precedent for doing this.

There are also 15 other uses of "wait -i" scattered throughout the
test suite.  While it's tempting to change these to also use the
-nowait flag, I think it might be safer to defer doing so until we
actually see a problem.

I've tested this patch on Fedora 32, 33, 34, and Rawhide.  Results are
comparable on Fedora 32 and 33.  On Fedora 34 and Rawhide, with this
commit in place, testing completes when the target_board is
native-extended-gdbserver.  On those OSes, when not using this commit,
testing usually hangs due to a problem with
gdb.threads/fork-plus-threads.exp.  I've also tested on all of the
mentioned OSes with target_board=native-gdbserver; for that testing,
I achieved comparable results over a number of runs.  (Unfortunately
results are rarely identical due to racy tests.)

gdb/testsuite/ChangeLog:

	* lib/gdbserver-support.exp (gdbserver_exit): Use the
	"-nowait" flag when waiting for gdbserver to exit.
2021-03-19 13:36:33 -07:00
Pedro Alves
219f56b484 Fix any_thread_of_inferior
Running gdb-term.exp against gdbserver with "maint set target-non-stop
on", runs into this:

  [infrun] fetch_inferior_event: exit
  [infrun] fetch_inferior_event: enter
  /home/pedro/gdb/binutils-gdb/src/gdb/thread.c:72: internal-error: thread_info* inferior_thread(): Assertion `current_thread_ != nullptr' failed.
  A problem internal to GDB has been detected,
  further debugging may prove unreliable.

  This is a bug, please report it.  For instructions, see:
  <https://www.gnu.org/software/gdb/bugs/>.

  FAIL: gdb.base/gdb-sigterm.exp: expect eof #2 (GDB internal error)
  Resyncing due to internal error.
  ERROR: : spawn id exp9 not open
      while executing
  "expect {
  -i exp9 -timeout 10
	      -re "Quit this debugging session\\? \\(y or n\\) $" {
		  send_gdb "n\n" answer
		  incr count
	      }
	      -re "Create ..."
      ("uplevel" body line 1)
      invoked from within
  "uplevel $body" NONE : spawn id exp9 not open
  ERROR: Could not resync from internal error (timeout)
  gdb.base/gdb-sigterm.exp: expect eof #2: stepped 0 times
  UNRESOLVED: gdb.base/gdb-sigterm.exp: 50 SIGTERM passes

The assertion fails here:

  ...
  #5  0x000055af4b4a7164 in internal_error (file=0x55af4b5e5de8 "/home/pedro/gdb/binutils-gdb/src/gdb/thread.c", line=72, fmt=0x55af4b5e5ce9 "%s: Assertion `%s' failed.") at /home/pedro/gdb/binutils-gdb/src/gdbsupport/errors.cc:55
  #6  0x000055af4b25fc43 in inferior_thread () at /home/pedro/gdb/binutils-gdb/src/gdb/thread.c:72
  #7  0x000055af4b26177e in any_thread_of_inferior (inf=0x55af4cf874f0) at /home/pedro/gdb/binutils-gdb/src/gdb/thread.c:638
  #8  0x000055af4b26eec8 in kill_or_detach (inf=0x55af4cf874f0, from_tty=0) at /home/pedro/gdb/binutils-gdb/src/gdb/top.c:1665
  #9  0x000055af4b26f37f in quit_force (exit_arg=0x0, from_tty=0) at /home/pedro/gdb/binutils-gdb/src/gdb/top.c:1767
  #10 0x000055af4b2f72a7 in quit () at /home/pedro/gdb/binutils-gdb/src/gdb/utils.c:633
  #11 0x000055af4b2f730b in maybe_quit () at /home/pedro/gdb/binutils-gdb/src/gdb/utils.c:657
  #12 0x000055af4b1adb74 in ser_base_wait_for (scb=0x55af4d02e460, timeout=0) at /home/pedro/gdb/binutils-gdb/src/gdb/ser-base.c:236
  #13 0x000055af4b1adf0f in do_ser_base_readchar (scb=0x55af4d02e460, timeout=0) at /home/pedro/gdb/binutils-gdb/src/gdb/ser-base.c:365
  #14 0x000055af4b1ae06d in generic_readchar (scb=0x55af4d02e460, timeout=0, do_readchar=0x55af4b1adeb1 <do_ser_base_readchar(serial*, int)>) at /home/pedro/gdb/binutils-gdb/src/gdb/ser-base.c:444
  ...

The bug is that any_thread_of_inferior incorrectly assumes that
there's always a selected thread.  This fixes it.

gdb/ChangeLog:

	* thread.c (any_thread_of_inferior): Check if there's a selected
	thread before calling inferior_thread().

Change-Id: Ica4b9ec746121a7a7c22bef09baea72103b3853d
2021-03-19 19:35:20 +00:00
H.J. Lu
7b9f985957 elf: Rename EM_INTEL205 to EM_INTELGT
Rename EM_INTEL205 to EM_INTELGT for Intel Graphics Technology.

binutils/

	* readelf.c (get_machine_name): Add EM_INTELGT.

include/

	* elf/common.h (EM_INTEL205): Renamed to ...
	(EM_INTELGT): This.
2021-03-19 05:58:46 -07:00
Alan Modra
826b97d42d gas/app.c don't throw away spaces before slash
I don't know really why we should lose a space before a '/'.  Possibly
it would make sense if '/' started a comment, but otherwise no.

	* app.c (do_scrub_chars): Don't lose spaces before a slash.
2021-03-19 20:12:30 +10:30
Alan Modra
fba7f7533c pr27590 testcase fixes
PR 27590
	* testsuite/ld-elf/pr27590a.d: Match relocs using label, and
	R_MIPS_NONE.
	* testsuite/ld-elf/pr27590b.d: Likewise.
2021-03-19 20:03:56 +10:30