aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2read.c
AgeCommit message (Collapse)AuthorFilesLines
2018-07-20Convert the DWARF reader to new-style buildysmTom Tromey1-126/+164
This converts the DWARF reader to use the new-style buildsym API. A new buildsym_compunit is created for each CU and is used to construct the symbol table. In some cases the CU must be passed to functions which previously did not accept it. FWIW I tend to think that most methods in the DWARF reader ought to be methods on the dwarf2_cu object. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * dwarf2read.c: Include buildsym.h. (struct dwarf2_cu) <builder>: New method. (fixup_go_packaging): Update. (process_full_comp_unit, process_full_type_unit): Update. Don't use scoped_free_pendings. (using_directives): Add "cu" parameter, remove "language". (read_import_statement, setup_type_unit_groups, ) (read_func_scope, read_lexical_block_scope) (dwarf2_record_block_ranges, read_namespace): Update. (lnp_state_machine::lnp_state_machine): Add cu parameter. (lnp_state_machine::handle_end_sequence): Update. (class lnp_state_machine) <m_cu>: New member. <m_record_line_callback>: Remove. <m_currently_recording_lines>: New member. (lnp_state_machine::handle_set_file): Update. (noop_record_line): Remove. (dwarf_record_line_p): Add cu parameter. (dwarf_record_line_1, dwarf_finish_line): Likewise. (lnp_state_machine::record_line) (lnp_state_machine::lnp_state_machine) (lnp_state_machine::check_line_address, dwarf_decode_lines_1) (dwarf_decode_lines): Update. (dwarf2_start_subfile): Add cu parameter. (dwarf2_start_symtab, new_symbol): Update. (macro_start_file, dwarf_decode_macro_bytes): Add cu parameter. Remove dwarf2_per_objfile parameter. (dwarf_decode_macros): Update.
2018-07-20Parameterize cp_scan_for_anonymous_namespacesTom Tromey1-1/+2
This changes cp_scan_for_anonymous_namespaces to use the buildsym_compunit API, rather than the function-based API. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * stabsread.c (define_symbol): Update. * buildsym-legacy.h (get_buildsym_compunit): Declare. * dwarf2read.c (new_symbol): Update. * cp-support.h (cp_scan_for_anonymous_namespaces): Update. * cp-namespace.c: Include buildsym.h. (cp_scan_for_anonymous_namespaces): Add "compunit" parameter. * buildsym-legacy.c (get_buildsym_compunit): New function.
2018-07-20Introduce buildsym-legacy.hTom Tromey1-1/+1
This introduces a new header, buildsym-legacy.h, and changes all the symbol readers to use it. The idea is to put the function-based interface, that relies on the buildsym_compunit global, into a separate header. Then when a symbol reader is updated to use the new interface, it can simply not include buildsym-legacy.h, so it's easy to be sure that the new API is used everywhere. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * xcoffread.c: Include buildsym-legacy.h. * windows-nat.c: Include buildsym-legacy.h. * stabsread.c: Include buildsym-legacy.h. * mdebugread.c: Include buildsym-legacy.h. * buildsym-legacy.h: New file. * buildsym-legacy.c: New file, from buildsym.c. * go32-nat.c: Include buildsym-legacy.h. * dwarf2read.c: Include buildsym-legacy.h. * dbxread.c: Include buildsym-legacy.h. * cp-namespace.c: Include buildsym-legacy.h. * coffread.c: Include buildsym-legacy.h. * buildsym.h: Move some contents to buildsym-legacy.h. * buildsym.c: Include buildsym-legacy.h. Move many functions to buildsym-legacy.c. * Makefile.in (HFILES_NO_SRCDIR): Add buildsym-legacy.h.
2018-07-20Remove buildsym_initTom Tromey1-2/+0
Now that buildsym_init does nothing, it can be removed. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * coffread.c (coff_symtab_read): Update. * xcoffread.c (xcoff_psymtab_to_symtab_1): Update. (xcoff_new_init): Update. * mipsread.c (mipscoff_new_init): Update. * mdebugread.c (mdebug_build_psymtabs): Update. * elfread.c (elf_new_init): Update. * dwarf2read.c (process_full_comp_unit, process_full_type_unit): Update. * dbxread.c (dbx_new_init, dbx_psymtab_to_symtab_1) (coffstab_build_psymtabs, elfstab_build_psymtabs) (stabsect_build_psymtabs): Update. * buildsym.h (buildsym_init): Don't declare. * buildsym.c: Update comment. (prepare_for_building): Remove. (start_symtab, restart_symtab): Update. (reset_symtab_globals): Update comment. (buildsym_init): Remove.
2018-07-20Move the symbol lists to buildsym_compunitTom Tromey1-20/+20
This moves the global symbol lists into buildsym_compunit, adds accessors, and updates all the users. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * xcoffread.c (read_xcoff_symtab, process_xcoff_symbol): Update. * stabsread.c (patch_block_stabs, define_symbol, read_type) (read_enum_type, common_block_start, common_block_end) (cleanup_undefined_types_1, finish_global_stabs): Update. * mdebugread.c (psymtab_to_symtab_1): Update. * dwarf2read.c (fixup_go_packaging, read_func_scope) (read_lexical_block_scope, new_symbol): Update. * dbxread.c (process_one_symbol): Update. * coffread.c (coff_symtab_read, process_coff_symbol) (coff_read_enum_type): Update. * buildsym.h (file_symbols, global_symbols, local_symbols): Don't declare. (get_local_symbols, get_file_symbols, get_global_symbols): New functions. * buildsym.c (~buildsym_compunit): Clean up m_file_symbols and m_global_symbols. <m_file_symbols, m_local_symbols, m_global_symbols>: New members. (~scoped_free_pendings): Update. (finish_block, prepare_for_building, reset_symtab_globals) (end_symtab_get_static_block, end_symtab_with_blockvector) (augment_type_symtab, push_context): Update. (get_local_symbols, get_file_symbols, get_global_symbols): New functions. (buildsym_init): Update.
2018-07-20Set list_in_scope later in DWARF readerTom Tromey1-4/+2
Currently the DWARF reader sets the list_in_scope member of the CU when first starting to process symbols. Future changes will make this assert -- code will not be able to refer to these lists until after start_symtab has been called. This patch prepares for the problem by arranging to initialize list_in_scope in dwarf2_start_symtab. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * dwarf2read.c (process_full_comp_unit): Do not set list_in_scope. (process_full_type_unit): Likewise. (dwarf2_start_symtab): Set list_in_scope.
2018-07-20Do not look at file symbols when reading psymtabsTom Tromey1-3/+0
The DWARF reader was setting the list_in_scope member when reading partial symbols. however, this member is only useful when reading full symbols. Future patches will make this assert, so remove these unneeded initializations. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * dwarf2read.c (process_psymtab_comp_unit_reader) (build_type_psymtabs_reader): Do not set list_in_scope.
2018-07-20Remove the "listhead" argument from finish_blockTom Tromey1-2/+2
finish_block is only ever called with "&local_symbols" as the "listhead" argument. So, remove this argument. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * xcoffread.c (read_xcoff_symtab): Update. * dwarf2read.c (read_func_scope, read_lexical_block_scope): Update. * dbxread.c (process_one_symbol): Update. * coffread.c (coff_symtab_read): Update. * buildsym.h (finish_block): Update. * buildsym.c (finish_block): Remove "listhead" argument. (end_symtab_get_static_block): Update.
2018-07-20Move current_subfile to buildsym_compunitTom Tromey1-13/+13
This moves the global current_subfile into buildsym_compunit. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * xcoffread.c (process_linenos): Update. * stabsread.c (define_symbol, read_type, read_enum_type): Update. * mdebugread.c (psymtab_to_symtab_1): Update. * dwarf2read.c (setup_type_unit_groups) (lnp_state_machine::handle_set_file, dwarf_record_line_p) (lnp_state_machine::record_line, dwarf_decode_lines): Update. * dbxread.c (process_one_symbol): Update. * coffread.c (coff_symtab_read, enter_linenos) (process_coff_symbol): Update. * buildsym.h (current_subfile): Don't declare. (get_current_subfile): Declare. * buildsym.c (struct buildsym_compunit) <m_current_subfile>: New member. (start_subfile, free_buildsym_compunit, push_subfile) (prepare_for_building, start_symtab): Update. (get_current_subfile): New function.
2018-07-20Move the context stack to buildsym_compunitTom Tromey1-31/+32
This moves the context stack globals to be members of buildsym_compunit, changing the type to a std::vector in the process. Because the callers expect the context stack object to be valid after being popped, at Simon's suggestion I've changed pop_context to return the object rather than the pointer. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * coffread.c (coff_symtab_read): Update. * xcoffread.c (read_xcoff_symtab): Update. * dwarf2read.c (new_symbol): Update. (read_func_scope, read_lexical_block_scope): Update. * dbxread.c (process_one_symbol): Update. * buildsym.h (context_stack, context_stack_depth): Don't declare. (outermost_context_p): Remove macro. (outermost_context_p, get_current_context_stack) (get_context_stack_depth): Declare. (pop_context): Return struct context_stack. * buildsym.c (struct buildsym_compunit) <m_context_stack: New member. (context_stack_size): Remove. (INITIAL_CONTEXT_STACK_SIZE): Remove. (prepare_for_building, end_symtab_get_static_block) (augment_type_symtab, push_context): Update. (pop_context): Return struct context_stack. (outermost_context_p, get_current_context_stack) (get_context_stack_depth): New functions. (buildsym_init): Update.
2018-07-16Use outermost_context_p in more placesTom Tromey1-2/+2
This changes a few explicit checks of context_stack_depth to use outermost_context_p instead. This simplifies some future work. gdb/ChangeLog 2018-07-16 Tom Tromey <tom@tromey.com> * xcoffread.c (read_xcoff_symtab): Use outermost_context_p. * dwarf2read.c (using_directives, new_symbol): Use outermost_context_p. * dbxread.c (process_one_symbol): Use outermost_context_p. * coffread.c (coff_symtab_read): Use outermost_context_p.
2018-07-16Move the using directives to buildsym_compunitTom Tromey1-5/+5
This moves the globals local_using_directives and global_using_directives to be members of buildsym_compunit, and adds the necessary accessors. gdb/ChangeLog 2018-07-16 Tom Tromey <tom@tromey.com> * dwarf2read.c (using_directives, read_func_scope) (read_lexical_block_scope): Update. * cp-namespace.c (cp_scan_for_anonymous_namespaces): Update. * buildsym.h (local_using_directives, global_using_directives): Don't declare. (get_local_using_directives, set_local_using_directives) (get_global_using_directives): Declare. * buildsym.c (struct buildsym_compunit) <m_local_using_directives, m_global_using_directives>: New members. (finish_block_internal, prepare_for_building) (reset_symtab_globals, end_symtab_get_static_block) (push_context): Update. (get_local_using_directives, set_local_using_directives) (get_global_using_directives): New functions. (buildsym_init): Update.
2018-07-16Move processing_gcc to stabsreadTom Tromey1-3/+0
processing_gcc is also only used by stabsread -- it is set by the DWARF reader, but this turns out not to be needed. So, this patch moves processing_gcc and removes the assignment from the DWARF reader. gdb/ChangeLog 2018-07-16 Tom Tromey <tom@tromey.com> * stabsread.h (processing_gcc_compilation): Move from buildsym.h. * dwarf2read.c (dwarf2_start_symtab): Don't set processing_gcc_compilation. * buildsym.h (processing_gcc_compilation): Move to stabsread.h.
2018-07-04[gdb/symtab] Fix version check in dwarf compilation unit headerTom de Vries1-5/+4
The version check of the dwarf compilation unit header in error_check_comp_unit_head is done too late, and consequently dwarf code with an unsupported version in the compilation unit header is interpreted as dwarf5 code in read_comp_unit_head. Fixed by moving the check earlier. Build and reg-tested on x86_64-linux. 2018-07-04 Tom de Vries <tdevries@suse.de> * dwarf2read.c (error_check_comp_unit_head): Move dwarf version check ... (read_comp_unit_head): ... here. * gdb.dwarf2/dw2-error.exp: Update expected error message.
2018-06-28Make dwarf2_free_objfile staticTom Tromey1-6/+6
I noticed that dwarf2_free_objfile can be made static, by changing it to be a registry cleanup function. This simplifies the code, as well, because now symbol readers don't have to explicitly call it. Tested by the buildbot. gdb/ChangeLog 2018-06-28 Tom Tromey <tom@tromey.com> * coffread.c (coff_symfile_finish): Update. * xcoffread.c (xcoff_symfile_finish): Update. * elfread.c (elf_symfile_finish): Update. * symfile.h (dwarf2_free_objfile): Don't declare. * dwarf2read.c (_initialize_dwarf2_read): Use register_objfile_data_with_cleanup. (dwarf2_free_objfile): Now static. Change signature.
2018-06-27Fix lost line info for symbol at addr zeroOmair Javaid1-10/+10
This patch fixes a unique condition where GDB fails to provide line information of symbol at address zero when code is compiled with text address zero but loaded at an offset > 0. For example lets compile following code snippet: int main() { return 0; } gcc -O0 -g3 -nostdlib -emain -Wl,-Ttext=0x00 -o file.out file.c Start gdb and run: add-symbol-file file.out 0xffff0000 info line main GDB will return error saying no line info is available for the symbol. This is a direct consequence of the fix for PR 12528 where GDB tries to ignore line table for a function which has been garbage collected by the linker. As the garbage collected symbols are sent to address zero GDB assumes a symbol actually placed at address zero as garbage collected. This was fixed with an additional check address < lowpc. But when symbol is loaded at an offset lowpc becomes lowpc + offset while no offset is added to address rather final symbol address is calculated based on baseaddr and address added together. So in case where symbols are loaded at an offset the condition address < lowpc will always return true. This patch fixes this by comparing address against a non offset lowpc. This patch also adds a GDB test case to replicate this behavior. gdb: 2018-06-27 Omair Javaid <omair.javaid@linaro.org> PR gdb/21695 * dwarf2read.c (lnp_state_machine::check_line_address): Update declaration. (dwarf_decode_lines_1): Adjust. gdb/testsuite: 2018-06-27 Omair Javaid <omair.javaid@linaro.org> PR gdb/21695 * gdb.base/infoline-reloc-main-from-zero.exp: New test. * gdb.base/infoline-reloc-main-from-zero.c: New file.
2018-06-11Rename some functions, index -> gdb_indexSimon Marchi1-22/+22
Since we now have two index formats, DWARF5/debug_names and gdb_index, I wanted to rename some functions to make it clear that they deal with the gdb_index format specifically. gdb/ChangeLog: * dwarf2read.c (read_index_from_section): Rename to... (read_gdb_index_from_section): ... this, update all callers. (dwarf2_read_index): Rename to... (dwarf2_read_gdb_index): ... this, update all callers.
2018-06-10Remove more "struct" keywords in range-based for loopsSimon Marchi1-1/+1
GCC 6.3.0 produces this kind of errors: CXX dwarf2read.o /home/simark/src/binutils-gdb/gdb/dwarf2read.c: In function 'void process_cu_includes(dwarf2_per_objfile*)': /home/simark/src/binutils-gdb/gdb/dwarf2read.c:10220:8: error: types may not be defined in a for-range-declaration [-Werror] for (struct dwarf2_per_cu_data *iter : dwarf2_per_objfile->just_read_cus) ^~~~~~ Removing the struct keyword makes it happy. gdb/ChangeLog: * dwarf2read.c (process_cu_includes): Remove struct keyword. * serial.c (serial_interface_lookup): Remove struct keyword.
2018-06-09Remove a VEC from dwarf2read.cTom Tromey1-9/+3
This removes a VEC from dwarf2read.c, replacing it with a std::vector. Tested by the buildbot. gdb/ChangeLog 2018-06-09 Tom Tromey <tom@tromey.com> * dwarf2read.c (process_cu_includes): Update. (process_full_comp_unit): Update. * dwarf2read.h (struct dwarf2_per_objfile) <just_read_cus>: Now a std::vector.
2018-06-01Remove type_name_no_tag and rename type_name_no_tag_or_errorTom Tromey1-2/+2
type_name_no_tag is just a plain wrapper for TYPE_NAME now, so this patch removes it. And, because tag names no longer exist, this renames type_name_no_tag_or_error to type_name_or_error. gdb/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * valops.c (value_cast_structs, destructor_name_p): Update. * symtab.c (gdb_mangle_name): Update. * stabsread.c (define_symbol, read_cpp_abbrev, read_baseclasses): Update. * p-valprint.c (pascal_object_is_vtbl_ptr_type) (pascal_object_print_value_fields, pascal_object_print_value): Update. * p-typeprint.c (pascal_type_print_derivation_info): Update. * linespec.c (find_methods): Update. * gdbtypes.h (type_name_no_tag): Remove. (type_name_or_error): Rename from type_name_no_tag_or_error. * gdbtypes.c (type_name_no_tag): Remove. (type_name_or_error): Rename from type_name_no_tag_or_error. (lookup_struct_elt_type, check_typedef): Update. * expprint.c (print_subexp_standard): Update. * dwarf2read.c (dwarf2_add_field, load_partial_dies): Update. * d-namespace.c (d_lookup_nested_symbol): Update. * cp-valprint.c (cp_is_vtbl_ptr_type, cp_print_value_fields) (cp_print_class_member): Update. * cp-namespace.c (cp_lookup_nested_symbol): Update. * completer.c (add_struct_fields): Update. * c-typeprint.c (cp_type_print_derivation_info) (c_type_print_varspec_prefix, c_type_print_base_struct_union): Update. * ada-lang.c (parse_old_style_renaming, xget_renaming_scope) (ada_prefer_type, ada_is_exception_sym): Update.
2018-06-01Remove TYPE_TAG_NAMETom Tromey1-22/+10
TYPE_TAG_NAME has been an occasional source of confusion and bugs. It seems to me that it is only useful for C and C++ -- but even there, not so much, because at least with DWARF there doesn't seem to be any way to wind up with a type where the name and the tag name are both non-NULL and different. So, this patch removes TYPE_TAG_NAME entirely. This should save a little memory, but more importantly, it simplifies this part of gdb. A few minor test suite adjustments were needed. In some situations the new code does not yield identical output to the old code. gdb/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * valops.c (enum_constant_from_type, value_namespace_elt) (value_maybe_namespace_elt): Update. * valarith.c (find_size_for_pointer_math): Update. * target-descriptions.c (make_gdb_type): Update. * symmisc.c (print_symbol): Update. * stabsread.c (define_symbol, read_type) (complain_about_struct_wipeout, add_undefined_type) (cleanup_undefined_types_1): Update. * rust-lang.c (rust_tuple_type_p, rust_slice_type_p) (rust_range_type_p, val_print_struct, rust_print_struct_def) (rust_internal_print_type, rust_composite_type) (rust_evaluate_funcall, rust_evaluate_subexp) (rust_inclusive_range_type_p): Update. * python/py-type.c (typy_get_tag): Update. * p-typeprint.c (pascal_type_print_base): Update. * mdebugread.c (parse_symbol, parse_type): Update. * m2-typeprint.c (m2_long_set, m2_record_fields, m2_enum): Update. * guile/scm-type.c (gdbscm_type_tag): Update. * go-lang.c (sixg_string_p): Update. * gnu-v3-abi.c (build_gdb_vtable_type, build_std_type_info_type): Update. * gdbtypes.h (struct main_type) <tag_name>: Remove. (TYPE_TAG_NAME): Remove. * gdbtypes.c (type_name_no_tag): Simplify. (check_typedef, check_types_equal, recursive_dump_type) (copy_type_recursive, arch_composite_type): Update. * f-typeprint.c (f_type_print_base): Update. Print "Type" prefix in summary mode when needed. * eval.c (evaluate_funcall): Update. * dwarf2read.c (fixup_go_packaging, read_structure_type) (process_structure_scope, read_enumeration_type) (read_namespace_type, read_module_type, determine_prefix): Update. * cp-support.c (inspect_type): Update. * coffread.c (process_coff_symbol, decode_base_type): Update. * c-varobj.c (c_is_path_expr_parent): Update. * c-typeprint.c (c_type_print_base_struct_union): Update. (c_type_print_base_1): Update. Print struct/class/union/enum in summary when using C language. * ax-gdb.c (gen_struct_ref, gen_namespace_elt) (gen_maybe_namespace_elt): Update. * ada-lang.c (ada_type_name): Simplify. (empty_record, ada_template_to_fixed_record_type_1) (template_to_static_fixed_type) (to_record_with_fixed_variant_part, ada_check_typedef): Update. gdb/testsuite/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * gdb.xml/tdesc-regs.exp (load_description): Update expected results. * gdb.dwarf2/method-ptr.exp: Set language to C++. * gdb.dwarf2/member-ptr-forwardref.exp: Set language to C++. * gdb.cp/typeid.exp (do_typeid_tests): Update type_re. * gdb.base/maint.exp (maint_pass_if): Update.
2018-06-01Thread language through c_type_print_argsTom Tromey1-1/+2
Currently dwarf2read.c will pass the CU's language to c_type_print_args -- but this doesn't affect all aspects of type printing, because some code in c-typeprint.c refers to current_language. This patch threads the language through more of the type printing code, adding an overload to c_type_print. Some uses of current_language remain, but now they are only in top-level functions. gdb/ChangeLog 2018-06-01 Tom Tromey <tom@tromey.com> * dwarf2read.c (dwarf2_compute_name): Pass CU's language to c_print_type. * c-typeprint.c (c_print_type_1): Add "language" parameter. (c_print_type): Update. (c_print_type): New overload. (c_type_print_varspec_prefix, c_type_print_args) (c_type_print_varspec_suffix, c_print_type_no_offsets) (c_type_print_base_struct_union, c_type_print_base_1) (cp_type_print_method_args): Add "language" parameter. (c_type_print_base): Update. * c-lang.h (c_print_type): Add new overload.
2018-05-29Remove "struct" keyword in range-based for loopsSimon Marchi1-3/+3
I get this kind of errors with GCC 6.3.0: /home/simark/src/binutils-gdb/gdb/breakpoint.c: In function 'void print_solib_event(int)': /home/simark/src/binutils-gdb/gdb/breakpoint.c:4618:12: error: types may not be defined in a for-range-declaration [-Werror] for (struct so_list *iter : current_program_space->added_solibs) ^~~~~~ Removing the struct keyword makes it happy. gdb/ChangeLog: * breakpoint.c (print_solib_event, check_status_catch_solib): Remove struct keyword in range-based for loops. * dbxread.c (find_corresponding_bincl_psymtab): Likewise. * dwarf2read.c (compute_delayed_physnames, rust_union_quirks); Likewise. * linespec.c (find_superclass_methods, search_minsyms_for_name): Likewise. * symfile.c (addr_info_make_relative): Likewise. * thread.c (value_in_thread_stack_temporaries): Likewise.
2018-05-23Remove symfile_complaintsTom Tromey1-273/+144
The complaint system seems to allow for multiple different complaint topics. However, in practice only symfile_complaints has ever been defined. Seeing that complaints.c dates to 1992, and that no new complaints have been added in the intervening years, I think it is reasonable to admit that complaints are specifically related to debuginfo reading. This patch removes symfile_complaints and updates all the callers. Some of these spots should perhaps be calls to warning instead, but I did not make that change. gdb/ChangeLog 2018-05-23 Tom Tromey <tom@tromey.com> * complaints.c (symfile_complaints): Remove. (complaint_internal): Remove "complaints" parameter. (clear_complaints, vcomplaint): Remove "c" parameter. (get_complaints): Remove. * dwarf2read.c (dwarf2_statement_list_fits_in_line_number_section_complaint) (dwarf2_debug_line_missing_file_complaint) (dwarf2_debug_line_missing_end_sequence_complaint) (dwarf2_complex_location_expr_complaint) (dwarf2_const_value_length_mismatch_complaint) (dwarf2_section_buffer_overflow_complaint) (dwarf2_macro_malformed_definition_complaint) (dwarf2_invalid_attrib_class_complaint) (create_addrmap_from_index, dw2_symtab_iter_next) (dw2_expand_marked_cus) (dw2_debug_names_iterator::find_vec_in_debug_names) (dw2_debug_names_iterator::next, dw2_debug_names_iterator::next) (create_debug_type_hash_table, init_cutu_and_read_dies) (partial_die_parent_scope, add_partial_enumeration) (skip_one_die, fixup_go_packaging, quirk_rust_enum, process_die) (dwarf2_compute_name, dwarf2_physname, read_namespace_alias) (read_import_statement, read_file_scope, create_dwo_cu_reader) (create_cus_hash_table, create_dwp_hash_table) (inherit_abstract_dies, read_func_scope, read_call_site_scope) (dwarf2_rnglists_process, dwarf2_ranges_process) (dwarf2_add_type_defn, dwarf2_attach_fields_to_type) (dwarf2_add_member_fn, get_alignment, maybe_set_alignment) (handle_struct_member_die, process_structure_scope) (read_array_type, read_common_block, read_module_type) (read_tag_pointer_type, read_typedef, read_base_type) (read_subrange_type, load_partial_dies, partial_die_info::read) (partial_die_info::read, partial_die_info::read) (partial_die_info::read, read_checked_initial_length_and_offset) (dwarf2_string_attr, read_formatted_entries) (dwarf_decode_line_header) (lnp_state_machine::check_line_address, dwarf_decode_lines_1) (new_symbol, dwarf2_const_value_attr, lookup_die_type) (read_type_die_1, determine_prefix, dwarf2_get_ref_die_offset) (dwarf2_get_attr_constant_value, dwarf2_fetch_constant_bytes) (get_signatured_type, get_DW_AT_signature_type) (decode_locdesc, file_file_name, consume_improper_spaces) (skip_form_bytes, skip_unknown_opcode, dwarf_parse_macro_header) (dwarf_decode_macro_bytes, dwarf_decode_macros) (dwarf2_symbol_mark_computed, set_die_type) (read_attribute_value): Update. * stap-probe.c (handle_stap_probe, get_stap_base_address): Update. * dbxread.c (unknown_symtype_complaint) (lbrac_mismatch_complaint, repeated_header_complaint) (set_namestring, function_outside_compilation_unit_complaint) (read_dbx_symtab, process_one_symbol): Update. * gdbtypes.c (stub_noname_complaint): Update. * windows-nat.c (handle_unload_dll): Update. * coffread.c (coff_symtab_read, enter_linenos, decode_type) (decode_base_type): Update. * xcoffread.c (bf_notfound_complaint, ef_complaint) (eb_complaint, record_include_begin, record_include_end) (enter_line_range, xcoff_next_symbol_text, read_xcoff_symtab) (process_xcoff_symbol, read_symbol) (function_outside_compilation_unit_complaint) (scan_xcoff_symtab): Update. * machoread.c (macho_symtab_read, macho_add_oso_symfile): Update. * buildsym.c (finish_block_internal, make_blockvector) (end_symtab_get_static_block, augment_type_symtab): Update. * dtrace-probe.c (dtrace_process_dof) (dtrace_static_probe_ops::get_probes): Update. * complaints.h (struct complaint): Don't declare. (symfile_complaints): Remove. (complaint_internal): Remove "complaints" parameter. (complaint): Likewise. (clear_complaints): Likewise. * symfile.c (syms_from_objfile_1, finish_new_objfile) (reread_symbols): Update. * dwarf2-frame.c (dwarf2_restore_rule, execute_cfa_program) (dwarf2_frame_cache, decode_frame_entry): Update. * dwarf2loc.c (dwarf_reg_to_regnum): Update. * objc-lang.c (lookup_objc_class, lookup_child_selector) (info_selectors_command): Update. * macrotab.c (macro_include, check_for_redefinition) (macro_undef): Update. * objfiles.c (filter_overlapping_sections): Update. * stabsread.c (invalid_cpp_abbrev_complaint) (reg_value_complaint, stabs_general_complaint, dbx_lookup_type) (define_symbol, error_type, read_type, rs6000_builtin_type) (stabs_method_name_from_physname, read_member_functions) (read_cpp_abbrev, read_baseclasses, read_tilde_fields) (attach_fields_to_type, complain_about_struct_wipeout) (read_range_type, read_args, common_block_start) (common_block_end, cleanup_undefined_types_1, scan_file_globals): Update. * mdebugread.c (index_complaint, unknown_ext_complaint) (basic_type_complaint, bad_tag_guess_complaint) (bad_rfd_entry_complaint, unexpected_type_code_complaint) (reg_value_complaint, parse_symbol, parse_type, upgrade_type) (parse_procedure, parse_lines) (function_outside_compilation_unit_complaint) (parse_partial_symbols, psymtab_to_symtab_1, cross_ref) (bad_tag_guess_complaint, reg_value_complaint): Update. * cp-support.c (demangled_name_complaint): Update. * macroscope.c (sal_macro_scope): Update. * dwarf-index-write.c (class debug_names): Update. gdb/testsuite/ChangeLog 2018-05-23 Tom Tromey <tom@tromey.com> * gdb.gdb/complaints.exp (test_initial_complaints): Don't mention symfile_complaints. (test_short_complaints): Likewise. (test_empty_complaints): Likewise. (test_initial_complaints): Update.
2018-05-21Use std::unique_ptr in dwarf2_read_debug_namesTom Tromey1-9/+11
This changes dwarf2_read_debug_names to use std::unique_ptr from the outset. This simplifies the code that installs the resulting map into dwarf2_per_objfile. Tested by the buildbot. ChangeLog 2018-05-21 Tom Tromey <tom@tromey.com> * dwarf2read.c (dwarf2_read_debug_names): Use std::unique_ptr. (mapped_index_base): Use DISABLE_COPY_AND_ASSIGN. Default constructor.
2018-05-18Allocate dwz_file with newTom Tromey1-20/+22
This adds a constructor to struct dwz_file and arranges for it to be allocated with "new" and wrapped in a unique_ptr. This cuts down on the amount of manual memory management that must be done. Regression tested by the buildbot. gdb/ChangeLog 2018-05-18 Tom Tromey <tom@tromey.com> * dwarf2read.c (struct dwz_file): Add constructor, initializers. <dwz_bfd>: Now a gdb_bfd_ref_ptr. (~dwarf2_per_objfile): Update (dwarf2_get_dwz_file): Use new. * dwarf2read.h (struct dwarf2_per_objfile) <dwz_file>: Now a unique_ptr.
2018-05-18Allocate dwp_file with newTom Tromey1-28/+36
This adds a constructor and initializer to dwp_file and changes it to be allocated with "new". This removes a bit of manual refcount management. Tested by the buildbot. gdb/ChangeLog 2018-05-18 Tom Tromey <tom@tromey.com> * dwarf2read.h (struct dwarf2_per_objfile) <dwp_file>: Now a unique_ptr. * dwarf2read.c (struct dwp_file): Add constructor and initializers. (open_and_init_dwp_file): Return a unique_ptr. (dwarf2_per_objfile, create_dwp_hash_table) (create_dwo_unit_in_dwp_v1, create_dwo_unit_in_dwp_v2) (lookup_dwo_unit_in_dwp): Update. (open_and_init_dwp_file, get_dwp_file): Update.
2018-05-18Use new to allocate mapped_indexTom Tromey1-15/+8
This changes struct mapped_index to be allocated with new. This simplifies the creation a bit (see dwarf2_read_index) and also removes a somewhat ugly explicit destructor call from ~dwarf2_per_objfile. Tested by the buildbot. gdb/ChangeLog 2018-05-18 Tom Tromey <tom@tromey.com> * dwarf2read.c (dwarf2_per_objfile): Update. (struct mapped_index): Add initializers. (dwarf2_read_index): Use new. (dw2_symtab_iter_init): Update. * dwarf2read.h (struct dwarf2_per_objfile) <index_table>: Now a unique_ptr.
2018-05-18Remove mapped_index::total_sizeSimon Marchi1-4/+0
It is unused. gdb/ChangeLog: * dwarf2read.c (mapped_index) <total_size>: Remove.
2018-05-17Fix for dwz-related crashTom Tromey1-34/+45
PR symtab/23010 reports a crash that occurs when using -readnow on a dwz-generated debuginfo file. The crash occurs because the DWARF has a partial CU with no language set, and then a full CU that references this partial CU using DW_AT_abstract_origin. In this case, the partial CU is read by dw2_expand_all_symtabs using language_minimal; but then this conflicts with the creation of the block's symbol table in the C++ CU. This patch fixes the problem by arranging for partial CUs not to be read by -readnow. I tend to think that it doesn't make sense to read a partial CU in isolation -- they should only be read when imported into some other CU. In conjunction with some other patches I am going to post, this also fixes the Rust -readnow crash that Jan reported. There are two problems with this patch: 1. It is difficult to reason about. There are many cases where I've patched the code to call init_cutu_and_read_dies with the flag set to "please do read partial units" -- but I find it difficult to be sure that this is always correct. 2. It is still missing a standalone test case. This seemed hard. 2018-05-17 Tom Tromey <tom@tromey.com> PR symtab/23010: * dwarf2read.c (load_cu, dw2_do_instantiate_symtab) (dw2_instantiate_symtab): Add skip_partial parameter. (dw2_find_last_source_symtab, dw2_map_expand_apply) (dw2_lookup_symbol, dw2_expand_symtabs_for_function) (dw2_expand_all_symtabs, dw2_expand_symtabs_with_fullname) (dw2_expand_symtabs_matching_one) (dw2_find_pc_sect_compunit_symtab) (dw2_debug_names_lookup_symbol) (dw2_debug_names_expand_symtabs_for_function): Update. (init_cutu_and_read_dies): Add skip_partial parameter. (process_psymtab_comp_unit, build_type_psymtabs_1) (process_skeletonless_type_unit, load_partial_comp_unit) (psymtab_to_symtab_1): Update. (load_full_comp_unit): Add skip_partial parameter. (process_imported_unit_die, dwarf2_read_addr_index) (follow_die_offset, dwarf2_fetch_die_loc_sect_off) (dwarf2_fetch_constant_bytes, dwarf2_fetch_die_type_sect_off) (read_signatured_type): Update.
2018-05-14Clear rust_unions in rust_union_quirksTom Tromey1-0/+2
It turns out that a dwarf2_cu can remain allocated after psymtab expansion is done, and so it makes sense to clear rust_unions when done processing it. Tested on x86-64 Fedora 27. 2018-05-14 Tom Tromey <tom@tromey.com> * dwarf2read.c (rust_union_quirks): Clear rust_unions.
2018-05-04Fix "fall through" commentsTom Tromey1-1/+2
This patch updates existing "fall through" comments so that they can be recognized by gcc's -Wimplicit-fallthrough comment-parsing heuristic. ChangeLog 2018-05-04 Tom Tromey <tom@tromey.com> * s390-tdep.c (s390_process_record): Fix fall-through comments. * xcoffread.c (scan_xcoff_symtab): Move comment later. * symfile.c (section_is_mapped): Fix fall-through comment. * stabsread.c (define_symbol, read_member_functions): Fix fall-through comment. * s390-linux-tdep.c (s390_process_record): Fix fall-through comment. * remote.c (remote_wait_as): Fix fall-through comment. * p-exp.y (yylex): Fix fall-through comment. * nat/x86-dregs.c (x86_length_and_rw_bits): Fix fall-through comment. * msp430-tdep.c (msp430_gdbarch_init): Fix fall-through comment. * mdebugread.c (parse_partial_symbols): Fix fall-through comment. * jv-exp.y (yylex): Fix fall-through comment. * go-exp.y (lex_one_token): Fix fall-through comment. * gdbtypes.c (get_discrete_bounds, rank_one_type): Fix fall-through comment. * f-exp.y (yylex): Fix fall-through comment. * dwarf2read.c (process_die): Fix fall-through comments. * dbxread.c (process_one_symbol): Fix fall-through comment. * d-exp.y (lex_one_token): Fix fall-through comment. * cp-name-parser.y (yylex): Fix fall-through comment. * coffread.c (coff_symtab_read): Fix fall-through comment. * c-exp.y (lex_one_token): Fix fall-through comment. * arm-tdep.c (arm_decode_miscellaneous): Fix fall-through comment. * arch/arm.c (arm_instruction_changes_pc): Fix fall-through comment.
2018-04-30Add initial type alignment supportTom Tromey1-4/+113
This adds some basic type alignment support to gdb. It changes struct type to store the alignment, and updates dwarf2read.c to handle DW_AT_alignment. It also adds a new gdbarch method and updates i386-tdep.c. None of this new functionality is used anywhere yet, so tests will wait until the next patch. 2018-04-30 Tom Tromey <tom@tromey.com> * i386-tdep.c (i386_type_align): New function. (i386_gdbarch_init): Update. * gdbarch.sh (type_align): New method. * gdbarch.c, gdbarch.h: Rebuild. * arch-utils.h (default_type_align): Declare. * arch-utils.c (default_type_align): New function. * gdbtypes.h (TYPE_ALIGN_BITS): New define. (struct type) <align_log2>: New field. <instance_flags>: Now a bitfield. (TYPE_RAW_ALIGN): New macro. (type_align, type_raw_align, set_type_align): Declare. * gdbtypes.c (type_align, type_raw_align, set_type_align): New functions. * dwarf2read.c (quirk_rust_enum): Set type alignment. (get_alignment, maybe_set_alignment): New functions. (read_structure_type, read_enumeration_type, read_array_type) (read_set_type, read_tag_pointer_type, read_tag_reference_type) (read_subrange_type, read_base_type): Set type alignment.
2018-04-30Use bool in read_index_from_sectionSimon Marchi1-3/+3
gdb/ChangeLog: * dwarf2read.c (read_index_from_section): Use bool.
2018-04-27Enable -Wsuggest-overrideTom Tromey1-2/+2
I noticed the existence of -Wsuggest-override and so this patch enables it for gdb. It found a few spots that could use "override". Also I went ahead and removed all uses of the "OVERRIDE" macro. Using override is beneficial because it makes it harder to change a base class and then forget to change a derived class. Tested by the buildbot. ChangeLog 2018-04-27 Tom Tromey <tom@tromey.com> * configure: Rebuild. * warning.m4 (AM_GDB_WARNINGS): Add -Wsuggest-override. * dwarf2loc.c (class dwarf_evaluate_loc_desc): Use "override", not "OVERRIDE". (class symbol_needs_eval_context): Likewise. * dwarf2read.c (mock_mapped_index::symbol_name_count) (mock_mapped_index::symbol_name_at): Use "override". Remove "virtual". * dwarf2-frame.c (dwarf_expr_executor::get_addr_index): Use "override". (class dwarf_expr_executor): Use "override", not "OVERRIDE". * aarch64-tdep.c (instruction_reader::read): Use "override". (instruction_reader_test::read): Likewise. * arm-tdep.c (instruction_reader::read): Use "override". (instruction_reader_thumb::read): Likewise. gdbserver/ChangeLog 2018-04-27 Tom Tromey <tom@tromey.com> * configure: Rebuild.
2018-04-17Conditionally drop the discriminant field in quirk_rust_enumTom Tromey1-3/+6
While debugging the crash that Jan reported, I noticed that in some situations we could end up with a situation where one branch of a Rust enum type ended up with a field count of -1. The fix is simple: only conditionally drop the discriminant field when rewriting the enum variants. I couldn't find a way to test this; I only noticed it while debugging the DWARF reader. 2018-04-17 Tom Tromey <tom@tromey.com> * dwarf2read.c (quirk_rust_enum): Conditionally drop the discriminant field.
2018-04-17Fix crash in quirk_rust_enumTom Tromey1-1/+7
I noticed that quirk_rust_enum can crash when presented with a union whose fields are all scalar types. This patch adds a new test case and fixes the bug. Regression tested on Fedora 26 x86-64. 2018-04-17 Tom Tromey <tom@tromey.com> * dwarf2read.c (quirk_rust_enum): Handle unions correctly. 2018-04-17 Tom Tromey <tom@tromey.com> * gdb.rust/simple.rs (Union): New type. (main): New local "u". * gdb.rust/simple.exp (test_one_slice): Add new test case.
2018-04-07Make dwarf2_per_objfile::all_type_units an std::vectorSimon Marchi1-78/+51
Make all_type_units an std::vector, remove n_type_units/n_allocated_type_units and some manual memory management. gdb/ChangeLog: * dwarf2read.h (struct dwarf2_per_objfile) <n_type_units>: Remove. <n_allocated_type_units>: Remove. <all_type_units>: Change to std::vector. * dwarf2read.c (dwarf2_per_objfile::~dwarf2_per_objfile): Adjust to std::vector change. (dwarf2_per_objfile::get_cutu): Likewise. (dwarf2_per_objfile::get_tu): Likewise. (create_signatured_type_table_from_index): Likewise. (create_signatured_type_table_from_debug_names): Likewise. (dw2_symtab_iter_next): Likewise. (dw2_print_stats): Likewise. (dw2_expand_all_symtabs): Likewise. (dw2_expand_marked_cus): Likewise. (dw2_debug_names_iterator::next): Likewise. (dwarf2_initialize_objfile): Likewise. (add_signatured_type_cu_to_table): Likewise. (create_all_type_units): Likewise. (add_type_unit): Likewise. (struct tu_abbrev_offset): Add constructor. (build_type_psymtabs_1): Adjust to std::vector change. (print_tu_stats): Likewise. * dwarf-index-write.c (check_dwarf64_offsets): Likewise. (write_debug_names): Likewise.
2018-04-07Make dwarf2_per_objfile::all_comp_units an std::vectorSimon Marchi1-132/+65
Make all_comp_units an std::vector, remove n_comp_units and some manual memory management. gdb/ChangeLog: * dwarf2read.h (struct dwarf2_per_objfile) <all_comp_units>: Likewise. Make an std::vector. <n_comp_units>: Remove. * dwarf2read.c (dwarf2_per_objfile::~dwarf2_per_objfile): Adjust to std::vector change. (dwarf2_per_objfile::get_cutu): Likewise. (dwarf2_per_objfile::get_cu): Likewise. (create_cus_from_index): Likewise. (create_addrmap_from_index): Likewise. (create_addrmap_from_aranges): Likewise. (dwarf2_read_index): Likewise. (dw2_find_last_source_symtab): Likewise. (dw2_map_symtabs_matching_filename): Likewise. (dw2_symtab_iter_next): Likewise. (dw2_print_stats): Likewise. (dw2_expand_all_symtabs): Likewise. (dw2_expand_symtabs_with_fullname): Likewise. (dw2_expand_marked_cus): Likewise. (dw2_map_symbol_filenames): Likewise. (create_cus_from_debug_names): Likewise. (dwarf2_read_debug_names): Likewise. (dw2_debug_names_iterator::next): Likewise. (dwarf2_initialize_objfile): Likewise. (set_partial_user): Likewise. (dwarf2_build_psymtabs_hard): Likewise. (read_comp_units_from_section): Remove arguments, adjust to std::vector change. (create_all_comp_units): Adjust to std::vector and read_comp_units_from_section changes. (dwarf2_find_containing_comp_unit): Adjust to std::vector change. * dwarf-index-write.c (check_dwarf64_offsets): Likewise. (psyms_seen_size): Likewise. (write_gdbindex): Likewise. (write_debug_names): Likewise.
2018-04-07Remove some usages of get_dwarf2_per_objfileSimon Marchi1-35/+25
This patch removes some usages of get_dwarf2_per_objfile, where we can get hold of the dwarf2_per_objfile object in a simpler way. For example, it's simpler (and slightly less work) to pass dwarf2_per_objfile and get the objfile from it than to pass the objfile and call get_dwarf2_per_objfile. Ideally, get_dwarf2_per_objfile should only be used in the entry points of the dwarf2 code, where we receive an objfile. gdb/ChangeLog: * dwarf2read.c (create_cus_from_index_list): Replace objfile arg with dwarf2_per_objfile. (create_cus_from_index): Likewise. (create_signatured_type_table_from_index): Likewise. (dwarf2_read_index): Likewise. (dwarf2_initialize_objfile): Likewise. (dwarf2_fetch_die_loc_sect_off): Get dwarf2_per_objfile from per_cu rather than get_dwarf2_per_objfile.
2018-04-07Replace dw2_get_cu/dw2_get_cutu with methods of dwarf2_per_objfileSimon Marchi1-47/+39
Those two functions look like good candidates to become methods of dwarf2_per_objfile. I did that, and added get_tu as well. When replacing usages of dw2_get_cutu, I changed some instances to get_cutu and others to get_cu, when appropriate (when we know we want a CU and not a TU). gdb/ChangeLog: * dwarf2read.h (struct signatured_type): Forward declare. (struct dwarf2_per_objfile) <get_cutu, get_cu, get_tu>: New methods. * dwarf2read.c (dwarf2_per_objfile::get_cutu): Rename from... (dw2_get_cutu): ...this. (dwarf2_per_objfile::get_cu): Rename from... (dw2_get_cu): ...this. (dwarf2_per_objfile::get_tu): New. (create_addrmap_from_index): Adjust. (create_addrmap_from_aranges): Adjust. (dw2_find_last_source_symtab): Adjust. (dw2_map_symtabs_matching_filename): Adjust. (dw2_symtab_iter_next): Adjust. (dw2_print_stats): Adjust. (dw2_expand_all_symtabs): Adjust. (dw2_expand_symtabs_with_fullname): Adjust. (dw2_expand_marked_cus): Adjust. (dw_expand_symtabs_matching_file_matcher): Adjust. (dw2_map_symbol_filenames): Adjust. (dw2_debug_names_iterator::next): Adjust. (dwarf2_initialize_objfile): Adjust. (set_partial_user): Adjust. (dwarf2_build_psymtabs_hard): Adjust.
2018-04-07Remove some unused variables in dwarf2read.cSimon Marchi1-23/+0
Most of them are obvious. The ones in dwarf2_record_block_ranges are less obvious, because it is a bit suspicious to have that many variables unused. But after inspection, it seems like it dates from commit 5f46c5a54825 ("Code cleanup: Split dwarf2_ranges_read to a callback"), where dwarf2_record_block_ranges was made to use dwarf2_ranges_process, which contains the same functionality. gdb/ChangeLog: * dwarf2read.c (create_signatured_type_table_from_debug_names): Remove unused variables. (dw2_map_symtabs_matching_filename): Likewise. (dwarf2_record_block_ranges): Likewise. (dwarf2_read_addr_index): Likewise. (follow_die_offset): Likewise.
2018-04-06Introduce a gdb_ref_ptr specialization for struct valueTom Tromey1-1/+0
struct value is internally reference counted and so, while it also has some ownership rules unique to it, it makes sense to use a gdb_ref_ptr when managing it automatically. This patch removes the existing unique_ptr specialization in favor of a reference-counted pointer. It also introduces two other clarifications: 1. Rename value_free to value_decref, which I think is more in line with what the function actually does; and 2. Change release_value to return a gdb_ref_ptr. This change allows us to remove the confusing release_value_or_incref function, primarily by making it much simpler to reason about the result of release_value. gdb/ChangeLog 2018-04-06 Tom Tromey <tom@tromey.com> * varobj.c (varobj_clear_saved_item) (update_dynamic_varobj_children, install_new_value, ~varobj): Update. * value.h (value_incref): Move declaration earlier. (value_decref): Rename from value_free. (struct value_ref_policy): New. (value_ref_ptr): New typedef. (struct value_deleter): Remove. (gdb_value_up): Remove typedef. (release_value): Change return type. (release_value_or_incref): Remove. * value.c (set_value_parent): Update. (value_incref): Change return type. (value_decref): Rename from value_free. (value_free_to_mark, free_all_values, free_value_chain): Update. (release_value): Return value_ref_ptr. (release_value_or_incref): Remove. (record_latest_value, set_internalvar, clear_internalvar): Update. * stack.c (info_frame_command): Don't call value_free. * python/py-value.c (valpy_dealloc, valpy_new) (value_to_value_object): Update. * printcmd.c (do_examine): Update. * opencl-lang.c (lval_func_free_closure): Update. * mi/mi-main.c (register_changed_p): Don't call value_free. * mep-tdep.c (mep_frame_prev_register): Don't call value_free. * m88k-tdep.c (m88k_frame_prev_register): Don't call value_free. * m68hc11-tdep.c (m68hc11_frame_prev_register): Don't call value_free. * guile/scm-value.c (vlscm_free_value_smob) (vlscm_scm_from_value): Update. * frame.c (frame_register_unwind, frame_unwind_register_signed) (frame_unwind_register_unsigned, get_frame_register_bytes) (put_frame_register_bytes): Don't call value_free. * findvar.c (address_from_register): Don't call value_free. * dwarf2read.c (dwarf2_compute_name): Don't call value_free. * dwarf2loc.c (entry_data_value_free_closure) (value_of_dwarf_reg_entry, free_pieced_value_closure) (dwarf2_evaluate_loc_desc_full): Update. * breakpoint.c (update_watchpoint, breakpoint_init_inferior) (~bpstats, bpstats, bpstat_clear_actions, watchpoint_check) (~watchpoint, watch_command_1) (invalidate_bp_value_on_memory_change): Update. * alpha-tdep.c (alpha_register_to_value): Don't call value_free.
2018-03-30Remove free_dwo_file_cleanupTom Tromey1-30/+19
This removes free_dwo_file_cleanup, the last cleanup in dwarf2read.c. This is replaced with a unique_ptr; which, despite the fact that a dwo_file is obstack-allocated, seemed like the best fit. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * dwarf2read.c (struct free_dwo_file_cleanup_data): Remove. (struct dwo_file_deleter): New. (dwo_file_up): New typedef. (open_and_init_dwo_file): Use dwo_file_up. (free_dwo_file_cleanup): Remove.
2018-03-30Remove parameter from free_dwo_fileTom Tromey1-8/+4
The objfile parameter to free_dwo_file is unused, so remove it. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * dwarf2read.c (free_dwo_file): Remove "objfile" parameter. (free_dwo_file_cleanup, free_dwo_file_from_slot): Update.
2018-03-30Remove free_cached_comp_units cleanupsTom Tromey1-20/+26
This changes free_cached_comp_units from a cleanup function to an RAII class. gdb/ChangeLog 2018-03-30 Tom Tromey <tom@tromey.com> * dwarf2read.c (class free_cached_comp_units): New class. (dw2_instantiate_symtab, dwarf2_build_psymtabs_hard): Use it. (free_cached_comp_units): Remove function.
2018-03-27Move DWARF index-related things to a separate fileSimon Marchi1-2053/+7
I want to add a DWARF index-related feature (automatically produce index files when loading objfiles in GDB), but I don't want to add many hundred lines to the already too big dwarf2read.c. I thought it would be a logical split to move everything related to the DWARF index to its own file. I first tried to move everything that reads and writes DWARF indices to a separate file, but found that the "read" part is a little bit entangled with the rest of dwarf2read.c, so the line is hard to draw about where to split. The write part is quite isolated though, so I moved this part to a new file, dwarf-index-write.c. Some things are necessary to both reading and writing indices, so I placed them in dwarf-index-common.{c,h}. The idea would be to have a dwarf-index-read.c eventually that would use it too (for now that code is still in dwarf2read.c). This required moving some things to a new dwarf2read.h header, so they can be read by the code that writes the index. The patch is big in number of lines, but it's all existing code being moved around. The only changes are that some functions are not static anymore, a declaration is added in a .h file, and therefore the comment is moved there. I built-tested it with a little and big endian target. This patch is also available on the users/simark/split-dwarf2read branch. gdb/ChangeLog: * Makefile.in (COMMON_SFILES): Add dwarf-index-common.c and dwarf-index-write.c (HFILES_NO_SRCDIR): Add dwarf-index-common.h and dwarf2read.h. * dwarf-index-common.c: New file. * dwarf-index-common.h: New file. * dwarf-index-write.c: New file. * dwarf2read.c: Include dwarf2read.h and dwarf-index-common.h. (struct dwarf2_section_info): Move from here. (dwarf2_section_info_def): Likewise. (DEF_VEC_O (dwarf2_section_info_def)): Likewise. (offset_type): Likewise. (DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE): Likewise. (DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE): Likewise. (DW2_GDB_INDEX_CU_SET_VALUE): Likewise. (byte_swap): Likewise. (MAYBE_SWAP): Likewise. (dwarf2_per_cu_ptr): Likewise. (DEF_VEC_P (dwarf2_per_cu_ptr)): Likewise. (struct tu_stats): Likewise. (struct dwarf2_per_objfile): Likewise. (struct dwarf2_per_cu_data): Likewise. (struct signatured_type): Likewise. (sig_type_ptr): Likewise. (DEF_VEC_P (sig_type_ptr)): Likewise. (INDEX4_SUFFIX): Likewise. (INDEX5_SUFFIX): Likewise. (DEBUG_STR_SUFFIX): Likewise. (dwarf2_read_section): Make non-static. (mapped_index_string_hash): Move from here. (dwarf5_djb_hash): Likewise. (file_write): Likewise. (class data_buf): Likewise. (struct symtab_index_entry): Likewise. (struct mapped_symtab): Likewise. (find_slot): Likewise. (hash_expand): Likewise. (add_index_entry): Likewise. (uniquify_cu_indices): Likewise. (class c_str_view): Likewise. (class c_str_view_hasher): Likewise. (class vector_hasher): Likewise. (write_hash_table): Likewise. (psym_index_map): Likewise. (struct addrmap_index_data): Likewise. (add_address_entry): Likewise. (add_address_entry_worker): Likewise. (write_address_map): Likewise. (symbol_kind): Likewise. (write_psymbols): Likewise. (struct signatured_type_index_data): Likewise. (write_one_signatured_type): Likewise. (recursively_count_psymbols): Likewise. (recursively_write_psymbols): Likewise. (class debug_names): Likewise. (check_dwarf64_offsets): Likewise. (psyms_seen_size): Likewise. (write_gdbindex): Likewise. (write_debug_names): Likewise. (assert_file_size): Likewise. (write_psymtabs_to_index): Likewise. (save_gdb_index_command): Likewise. (_initialize_dwarf2_read): Don't register the "save gdb-index" command. * dwarf2read.h: New file.
2018-03-27problem looking up some symbols when they have a linkage nameJoel Brobecker1-1/+5
This patch fixes a known failure in gdb.ada/maint_with_ada.exp (maintenance check-psymtabs). Another way to witness the same issue is by considering the following Ada declarations... type Wrapper is record A : Integer; end record; u00045 : constant Wrapper := (A => 16#060287af#); pragma Export (C, u00045, "symada__cS"); ... which declares a variable name "u00045" but with a linkage name which is "symada__cS". This variable is a record with one component, the Ada equivalent of a struct with one field in C. Trying to print that variable's value currently yields: (gdb) p /x <symada__cS> 'symada(char, signed)' has unknown type; cast it to its declared type This indicates that GDB was only able to find the minimal symbol, but not the full symbol. The expected output is: (gdb) print /x <symada__cS> $1 = (a => 0x60287af) The error message gives a hint about what's happening: We processed the symbol through gdb_demangle, which in the case of this particular symbol name, ends up matching the C++ naming scheme. As a result, the demangler transforms our symbol name into 'symada(char, signed)', thus breaking Ada lookups. This patch fixes the issue by first introducing a new language_defn attribute called la_store_sym_names_in_linkage_form_p, which is a boolean to be set to true for the few languages that do not want their symbols to have their names stored in demangled form, and false otherwise. We then use this language attribute to skip the call to gdb_demangle for all languages whose la_store_sym_names_in_linkage_form_p is true. In terms of the selection of languages for which the new attribute is set to true, the selection errs on the side of preserving the existing behavior, and only changes the behavior for the languages where we are certain storing symbol names in demangling form is not needed. It is conceivable that other languages might be in the same situation, but I not knowing in detail the symbol name enconding strategy, I decided to play it safe and let other language maintainers potentially adjust their language if it makes sense to do so. gdb/ChangeLog: PR gdb/22670 * dwarf2read.c (dwarf2_physname): Do not return the demangled symbol name if the CU's language stores symbol names in linkage format. * language.h (struct language_defn) <la_store_sym_names_in_linkage_form_p>: New field. Adjust all instances of this struct. gdb/testsuite/ChangeLog: * gdb.ada/maint_with_ada.exp: Remove PR gdb/22670 setup_kfail. * gdb.ada/notcplusplus: New testcase. * gdb.base/c-linkage-name.c: New file. * gdb.base/c-linkage-name.exp: New testcase. Tested on x86_64-linux. This also passes AdaCore's internal GDB testsuite.
2018-03-26Remove DEF_VEC_I(offset_type)Simon Marchi1-2/+0
It is unused. gdb/ChangeLog: * dwarf2read.c (DEF_VEC_I(offset_type)): Remove.
2018-03-23Add psymbols for nested typesKeith Seitz1-1/+2
c++/22968 involves the inability of ptype to find a type definition for a type defined inside another type. I recently added some additional support for nested type definitions, but I apparently overlooked psymbols. The user reports that using -readnow fixes the problem: $ gdb 22968 -ex "ptype Outer::Inner" There is no field named Inner $ gdb -readnow 22968 -ex "ptype Outer::Inner" type = struct Outer::Inner { <no data field> } We clearly did not find a psymbol for Outer::Inner because it was located in another CU. This patch addresses this problem by scanning structs for additional psymbols. Rust is already doing this. With this patch, the identical result to "-readnow" is given (without using `-readnow', of course). gdb/ChangeLog: PR c++/22968 * dwarf2read.c (scan_partial_symbols): Scan structs/classes for nested type definitions for C++, too. gdb/testsuite/ChangeLog: PR c++/22968 * gdb.cp/subtypes.exp: New file. * gdb.cp/subtypes.h: New file. * gdb.cp/subtypes.cc: New file. * gdb.cp/subtypes-2.cc: New file.