aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2
AgeCommit message (Collapse)AuthorFilesLines
2020-10-02DWARFv5: Handle DW_MACRO_define_strx and DW_MACRO_undef_strx macro entries.nitachra3-4/+91
GDB complaints "During symbol reading: unrecognized DW_MACFINO opcode 0xb" with the testcase given below. Clang is emitting DW_MACRO_define_strx and DW_MACRO_undef_strx entries in .debug_macro section which are not supported in GDB. This patch handles them. DW_MACRO_define_strx and DW_MACRO_undef_strx are added in DWARFv5. They have two operands. The first operand encodes the line number of the #define or #undef macro directive. The second operand identifies a string; it is represented using an unsigned LEB128 encoded value, which is interpreted as a zero-based index into an array of offsets in the .debug_str_offsets section. This is as per the section 6.3.2.1 of Dwarf Debugging Information Format Version 5. Test case used: #define MAX_SIZE 10 int main(void) { int size = 0; size = size + MAX_SIZE; printf("\n The value of size is [%d]\n",size); return 0; } clang -gdwarf-5 -fdebug-macro macro.c -o macro.out Before the patch: gdb/new_gdb/binutils-gdb/build/bin/gdb -q macro.out -ex "set complaints 1" -ex "start" Reading symbols from macro.out... During symbol reading: unrecognized DW_MACFINO opcode 0xb Temporary breakpoint 1 at 0x4004df: file macro.c, line 7. Starting program: /home/nitika/workspace/macro.out Temporary breakpoint 1, main () at macro.c:7 7 int size = 0; (gdb) Tested by running the testsuite before and after the patch with -gdwarf-5 and there is no increase in the number of test cases that fails. Used clang 11.0.0. gdb/ChangeLog: * dwarf2/macro.c (dwarf_decode_macro_bytes): Handle DW_MACRO_define_strx and DW_MACRO_undef_strx. (dwarf_decode_macros): Likewise * dwarf2/read.c (dwarf_decode_macros): Pass str_offsets_base in the parameters which is the value of DW_AT_str_offsets_base. * dwarf2/macro.h (dwarf_decode_macros): Modify the definition to include str_offsets_base.
2020-09-30[gdb] Fix regression in dwarf2_nameTom de Vries1-0/+2
Since commit 2c830f5475 "Change some uses of DW_STRING to string method" we have these regressions: ... FAIL: gdb.base/info-types-c++.exp: info types FAIL: gdb.cp/anon-struct.exp: print type of t::t FAIL: gdb.cp/anon-struct.exp: print type of X::t2 FAIL: gdb.cp/anon-struct.exp: print type of X::t2::t2 FAIL: gdb.cp/anon-struct.exp: print type of t3::~t3 ... Fix these in dwarf2_name by updating attr_name each time attr is updated. Tested on x86_64-linux. gdb/ChangeLog: 2020-09-30 Tom de Vries <tdevries@suse.de> PR symtab/26683 * dwarf2/read.c (dwarf2_name): Update attr_name after attr is updated.
2020-09-30Fix regression in variant part handlingTom Tromey1-2/+2
My series to change DWARF attribute handling to be type-safe introduced a regression in gdb.ada/variant.exp. handle_variant was using as_unsigned on an attribute with DW_FORM_sdata. This patch changes it to use constant_value instead. 2020-09-30 Tom Tromey <tromey@adacore.com> * dwarf2/read.c (handle_variant): Use constant_value.
2020-09-29Remove DW_UNSNDTom Tromey2-89/+86
This removes DW_UNSND, replacing uses with either as_unsigned or constant_value, depending primarily on whether or not the form is already known to be appropriate. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (lookup_dwo_id, get_type_unit_group) (read_file_scope, dwarf2_get_pc_bounds) (dwarf2_record_block_ranges, dwarf2_add_field, get_alignment) (read_structure_type, handle_struct_member_die) (read_enumeration_type, read_array_type, read_set_type) (read_tag_pointer_type, read_tag_reference_type) (read_subroutine_type, read_base_type, read_subrange_type) (read_full_die_1, partial_die_info::read) (partial_die_info::read, by, new_symbol) (dwarf2_const_value_data, dwarf2_const_value_attr) (dump_die_shallow, dwarf2_fetch_constant_bytes) (prepare_one_comp_unit): Update. * dwarf2/attribute.h (DW_UNSND): Remove.
2020-09-29Add attribute::as_boolean methodTom Tromey3-15/+31
This adds a new attribute::as_boolean method, and updates the reader to use it. The main benefit of this change is that now the code will respect the attribute's form. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_func_scope, prototyped_function_p) (read_subroutine_type, partial_die_info::read) (dwarf2_flag_true_p, new_symbol, dump_die_shallow) (dwarf2_add_member_fn): Update. * dwarf2/attribute.h (struct attribute) <as_boolean>: Declare. * dwarf2/attribute.c (attribute::as_boolean): New method.
2020-09-29Add attribute::as_virtuality methodTom Tromey3-2/+30
This adds a new attribute::as_virtuality method and changes the DWARF reader to use it. This also ensures that the attibute's form will now be respected. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_add_field, dwarf2_add_member_fn): Update. * dwarf2/attribute.h (struct attribute) <as_virtuality>: New method. * dwarf2/attribute.c (attribute::as_virtuality): New method.
2020-09-29Change die_info methods to check the attribute's formTom Tromey1-5/+17
This changes two die_info methods to check the form of the attribute before using it. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/die.h (struct die_info) <addr_base, ranges_base>: Check the attribute's form.
2020-09-29Change is_valid_DW_AT_defaulted to a method on attributeTom Tromey3-21/+32
This changes is_valid_DW_AT_defaulted to be a method on struct attribute. Now it correctly respects the form of the attribute. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (is_valid_DW_AT_defaulted): Move to attribute.c. (dwarf2_add_member_fn): Update. * dwarf2/attribute.h (struct attribute) <defaulted>: Declare. * dwarf2/attribute.c (attribute::defaulted): New method, from is_valid_DW_AT_defaulted.
2020-09-29Add attribute::as_unsigned methodTom Tromey2-12/+21
This introduces a new attribute::as_unsigned method and changes a few spots to use it. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dw2_get_file_names_reader) (dwarf2_build_include_psymtabs, handle_DW_AT_stmt_list) (dwarf2_cu::setup_type_unit_groups, fill_in_loclist_baton) (dwarf2_symbol_mark_computed): Use as_unsigned. * dwarf2/attribute.h (struct attribute) <as_unsigned>: New method. <form_is_section_offset>: Update comment.
2020-09-29Change how accessibility is handled in dwarf2/read.cTom Tromey1-22/+19
dwarf2/read.c uses dwarf2_default_access_attribute to check for the default access attribute. This patch simplifies the code by moving more of the access processing into this function, changing its name to reflect the difference. This also ensures that the attribute's form is respected, by changing to code to use the constant_value method. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_access_attribute): Rename from dwarf2_default_access_attribute. Look up attribute. (dwarf2_add_field, dwarf2_add_type_defn, dwarf2_add_member_fn): Update.
2020-09-29Change how reprocessing is doneTom Tromey2-32/+37
Currently gdb keeps a vector of attributes that require reprocessing. However, now that there is a reprocessing flag in the attribute, we can remove the vector and instead simply loop over attributes a second time. Normally there are not many attributes, so this should be reasonably cheap. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (skip_one_die): Update. (read_full_die_1): Change how reprocessing is done. (partial_die_info::read): Update. (read_attribute_value): Remove need_reprocess parameter. (read_attribute): Likewise. * dwarf2/attribute.h (struct attribute) <requires_reprocessing_p>: New method.
2020-09-29Remove DW_ADDRTom Tromey3-9/+25
This removes DW_ADDR in favor of accessor methods. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_attribute_reprocess, read_attribute_value) (dwarf2_const_value_attr, dump_die_shallow) (dwarf2_fetch_constant_bytes): Update. * dwarf2/attribute.h (struct attribute) <form_is_ref>: Update comment. <set_address>: New method. (DW_ADDR): Remove. * dwarf2/attribute.c (attribute::form_is_ref): Update comment. (attribute::as_string, attribute::as_address): Add assert.
2020-09-29Add reprocessing flag to struct attributeTom Tromey3-6/+57
Some forms require "reprocessing" -- a second pass to update their value appropriately. In this case, we'll set the unsigned value on the attribute, and then later set it to the correct value. To handle this, we introduce a reprocessing flag to attribute. Then, we manage this flag to ensure that setting and unsetting is done properly. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_cutu_die_from_dwo): Use OBSTACK_ZALLOC. (read_attribute_reprocess, read_attribute_value): Update. (read_attribute): Clear requires_reprocessing. * dwarf2/attribute.h (struct attribute) <as_unsigned_reprocess, form_requires_reprocessing>: New methods. <string_init>: Clear requires_reprocessing. <set_unsigned_reprocess>: New method. <name>: Shrink by one bit. <requires_reprocessing>: New member. * dwarf2/attribute.c (attribute::form_requires_reprocessing): New method.
2020-09-29Use setter for attribute's unsigned valueTom Tromey3-26/+59
This adds form_is_unsigned and an unsigned setter method to struct attribute, and updates the remaining code. Now DW_UNSND is no longer used as an lvalue. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_attribute_value): Update. * dwarf2/attribute.h (struct attribute) <form_is_unsigned, set_unsigned>: New methods. * dwarf2/attribute.c (attribute::form_is_unsigned): New method.
2020-09-29Remove DW_SNDTom Tromey2-9/+27
This removes DW_SND in favor of accessors on struct attribute. These accessors check that the form is appropriate. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (get_alignment, read_array_order) (read_attribute_value, dwarf2_const_value_attr) (dump_die_shallow, dwarf2_fetch_constant_bytes): Update. * dwarf2/attribute.h (struct attribute) <as_signed, set_signed>: New methods. (DW_SND): Remove.
2020-09-29Remove DW_SIGNATURETom Tromey2-6/+20
This removes DW_SIGNATURE in favor of methods on struct attribute. As usual, the methods check the form, which DW_SIGNATURE did not do. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_attribute_value, lookup_die_type) (dump_die_shallow, follow_die_sig, get_DW_AT_signature_type): Update. * dwarf2/attribute.h (struct attribute) <as_signature, set_signature>: New methods. (DW_SIGNATURE): Remove.
2020-09-29Remove DW_BLOCKTom Tromey3-74/+109
This removes the DW_BLOCK accessor in favor of methods on struct attribute. The methods, unlike the access, check the form. Note that DW_FORM_data16 had to be handled by form_is_block, because in practice that is how we store values of this form. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_call_site_scope) (handle_data_member_location, dwarf2_add_member_fn) (mark_common_block_symbol_computed, attr_to_dynamic_prop) (partial_die_info::read, read_attribute_value) (var_decode_location, dwarf2_const_value_attr, dump_die_shallow) (dwarf2_fetch_die_loc_sect_off, dwarf2_fetch_constant_bytes) (dwarf2_symbol_mark_computed): Update. * dwarf2/attribute.h (struct attribute) <as_block, set_block>: New methods. (DW_BLOCK): Remove. * dwarf2/attribute.c (attribute::form_is_block): Add DW_FORM_data16.
2020-09-29Remove DW_STRING and DW_STRING_IS_CANONICALTom Tromey3-49/+67
This removes DW_STRING and DW_STRING_IS_CANONICAL, replacing them with accessor methods on struct attribute. The new code ensures that a string value will only ever be used when the form allows it. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_cutu_die_from_dwo) (read_attribute_reprocess, read_attribute_value, read_attribute) (dwarf2_const_value_attr, dwarf2_name, dump_die_shallow) (dwarf2_fetch_constant_bytes): Update. * dwarf2/attribute.h (struct attribute) <form_is_string>: Declare. <set_string_noncanonical, set_string_canonical>: New methods. <string_is_canonical>: Update comment. <canonical_string_p>: Add assert. (DW_STRING, DW_STRING_IS_CANONICAL): Remove. * dwarf2/attribute.c (attribute::form_is_string): New method. (attribute::string): Use it.
2020-09-29Remove some uses of DW_STRING_IS_CANONICALTom Tromey2-4/+14
This removes the rvalue uses of DW_STRING_IS_CANONICAL, replacing them with an accessor method. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (anonymous_struct_prefix, dwarf2_name) (dump_die_shallow): Use canonical_string_p. * dwarf2/attribute.h (struct attribute) <canonical_string_p>: New method.
2020-09-29Change some uses of DW_STRING to string methodTom Tromey1-28/+36
This changes some of the simpler spots to use attribute::string rather than DW_STRING. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (partial_die_info::read) (dwarf2_const_value_attr, anonymous_struct_prefix, ) (dwarf2_name, dwarf2_fetch_constant_bytes): Use attribute::as_string.
2020-09-29Avoid using DW_* macros in dwarf2/attribute.cTom Tromey1-5/+5
There's no need to use the DW_* accessor macros in dwarf2/attribute.c, and this is a necessary step toward our goal of removing them entirely. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/attribute.c (attribute::address): Don't use DW_UNSND or DW_ADDR. (attribute::string): Don't use DW_STRING. (attribute::get_ref_die_offset): Don't use DW_UNSND. (attribute::constant_value): Don't use DW_UNSND or DW_SND.
2020-09-29Rename struct attribute accessorsTom Tromey3-16/+16
This removes the "value_" prefix from the struct value accessors. This seemed unnecessarily wordy to me. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_find_base_address, read_call_site_scope) (dwarf2_get_pc_bounds, dwarf2_record_block_ranges) (partial_die_info::read, dwarf2_string_attr, new_symbol): Update. * dwarf2/attribute.h (struct attribute): Rename methods. * dwarf2/attribute.c (attribute::as_address): Rename from value_as_address. (attribute::as_string): Rename from value_as_string.
2020-09-29Add attribute::value_as_string methodTom Tromey1-5/+0
The full DIE reader checks that an attribute has a "string" form in some spots, but the partial DIE reader does not. This patch brings the two readers in sync for one specific case, namely when examining the linkage name. This avoids regressions in an existing DWARF test case. A full fix for this problem would be preferable. An accessor like DW_STRING should always check the form. However, I haven't attempted that in this series. Also the fact that the partial and full readers can disagree like this is a design flaw. gdb/ChangeLog 2020-09-29 Tom Tromey <tom@tromey.com> * dwarf2/read.c (partial_die_info::read) <case DW_AT_linkage_name>: Use value_as_string. (dwarf2_string_attr): Use value_as_string. * dwarf2/attribute.h (struct attribute) <value_as_string>: Declare method. * dwarf2/attribute.c (attribute::value_as_string): New method.
2020-09-23Handle bit offset and bit size in base typesTom Tromey1-0/+20
PR symtab/25470 points out that the Zig programming language allows integers of various bit sizes (including zero), not just sizes that are a multiple of 8. This is supported in DWARF by applying both a byte size and a DW_AT_bit_size. This patch adds support for this feature to integer and boolean types. Other base types are not handled -- for floating-point types, this didn't seem to make sense, and for character types I didn't see much need. (These can be added later if desired.) I've also added support for DW_AT_data_bit_offset at the same time. I don't know whether the Zig compiler requires this, but it was described in the same section in the DWARF standard and was easy to add. A new test case is supplied, using the DWARF assembler. gdb/ChangeLog 2020-09-23 Tom Tromey <tom@tromey.com> PR symtab/25470: * value.c (unpack_long, pack_long, pack_unsigned_long): Handle bit offset and bit size. * printcmd.c (print_scalar_formatted): Handle zero-length integer. (print_scalar_formatted): Use bit_size_differs_p. * gdbtypes.h (enum type_specific_kind) <TYPE_SPECIFIC_INT>: New constant. (union type_specific): <int_stuff>: New member. (struct type) <bit_size_differs_p, bit_size, bit_offset>: New methods. * gdbtypes.c (init_integer_type, init_boolean_type): Initialize TYPE_SPECIFIC_FIELD. (recursive_dump_type, copy_type_recursive): Update. * dwarf2/read.c (read_base_type): Handle DW_AT_bit_size and DW_AT_data_bit_offset. gdb/testsuite/ChangeLog 2020-09-23 Tom Tromey <tom@tromey.com> * gdb.dwarf2/intbits.exp: New file. * gdb.dwarf2/intbits.c: New file.
2020-09-19Use gdb_bfd_sections in dwarf2/read.cTom Tromey1-26/+24
This changes some functions in dwarf2/read.c to avoid bfd_map_over_sections, in favor of iteration. gdb/ChangeLog 2020-09-19 Tom Tromey <tom@tromey.com> * dwarf2/read.c (locate_dwz_sections): Change parameters. (dwarf2_get_dwz_file): Use foreach. (dwarf2_locate_dwo_sections): Change parameters. (open_and_init_dwo_file): Use foreach. (dwarf2_locate_common_dwp_sections): Change parameters. (open_and_init_dwp_file): Use foreach.
2020-09-17Use htab_up in dwarf2/read.cTom Tromey1-11/+9
This changes dwarf2/read.c to use htab_up rather than explicit calls to htab_delete. gdb/ChangeLog 2020-09-17 Tom Tromey <tom@tromey.com> * dwarf2/read.c (compute_compunit_symtab_includes): Use htab_up.
2020-09-16gdb: Convert language_data::la_array_ordering to a methodAndrew Burgess1-1/+1
Convert language_data::la_array_ordering member variable to a virtual method language_defn::array_ordering. There should be no user visible changes after this commit. gdb/ChangeLog: * ada-lang.c (ada_language_data): Remove la_array_ordering initializer. * c-lang.c (c_language_data): Likewise. (cplus_language_data): Likewise. (asm_language_data): Likewise. (minimal_language_data): Likewise. * d-lang.c (d_language_data): Likewise. * dwarf2/read.c (read_array_order): Update for call to array_ordering. * f-lang.c (f_language_data): Remove la_array_ordering initializer. (f_language::array_ordering): New member function. * go-lang.c (go_language_data): Remove la_array_ordering initializer. * language.c (unknown_language_data): Likewise. (auto_language_data): Likewise. * language.h (language_data): Delete la_array_ordering field. (language_defn::array_ordering): New member function. * m2-lang.c (m2_language_data): Remove la_array_ordering initializer. * objc-lang.c (objc_language_data): Likewise. * opencl-lang.c (opencl_language_data): Likewise. * p-lang.c (pascal_language_data): Likewise. * rust-lang.c (rust_language_data): Likewise.
2020-09-16gdb: Override store_sym_names_in_linkage_form_p for Go languageAndrew Burgess1-6/+0
When store_sym_names_in_linkage_form_p was introduced in this commit: commit 59cc4834e53565da1de4a7b615ed8890ed55c7da Date: Tue Mar 27 08:57:16 2018 -0500 problem looking up some symbols when they have a linkage name A special case was left behind for Go, however, this special case was not really needed anymore, it could be handled by having store_sym_names_in_linkage_form_p return the true for go, instead of false. This commit overrides store_sym_names_in_linkage_form_p for Go, and then removes the special case. As store_sym_names_in_linkage_form_p is only called once throughout GDB this should be perfectly safe. There should be no user visible changes after this commit. gdb/ChangeLog: * dwarf2/read.c (dwarf2_physname): Remove special case for language_go. * go-lang.c (go_language::store_sym_names_in_linkage_form_p): New member function.
2020-09-16gdb: Convert la_store_sym_names_in_linkage_form_p to a methodAndrew Burgess1-1/+1
Convert language_data::la_store_sym_names_in_linkage_form_p member variable to language_defn::store_sym_names_in_linkage_form_p virtual function. There should be no user visible changes after this commit. gdb/ChangeLog: * ada-lang.c (ada_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. (ada_language::store_sym_names_in_linkage_form_p): New member function. * c-lang.c (c_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. (c_language::store_sym_names_in_linkage_form_p): New member function. (cplus_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. (asm_language_data): Likewise. (asm_language::store_sym_names_in_linkage_form_p): New member function. (minimal_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. (minimal_language::store_sym_names_in_linkage_form_p): New member function. * d-lang.c (d_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. * dwarf2/read.c (dwarf2_physname): Update call to store_sym_names_in_linkage_form_p. * f-lang.c (f_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. * go-lang.c (go_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. * language.c (unknown_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. (unknown_language::store_sym_names_in_linkage_form_p): New member function. (auto_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. (auto_language::store_sym_names_in_linkage_form_p): New member function. * language.h (language_data): Remove la_store_sym_names_in_linkage_form_p member variable. (language_defn::store_sym_names_in_linkage_form_p): New member function. * m2-lang.c (m2_language_data): Remove la_store_sym_names_in_linkage_form_p initializer. * objc-lang.c (objc_language_data): Likewise. * opencl-lang.c (opencl_language_data): Likewise. * p-lang.c (pascal_language_data): Likewise. * rust-lang.c (rust_language_data): Likewise.
2020-09-14Use type_instance_flags more throughoutPedro Alves1-4/+3
A later patch in this series will rewrite enum_flags fixing some API holes. That would cause build failures around code using type_instance_flags. Or rather, that should be using it, but wasn't. This patch fixes it by using type_instance_flags throughout instead of plain integers. Note that we can't make the seemingly obvious change to struct type::instance_flags: - unsigned instance_flags : 9; + ENUM_BITFIELD (type_instance_flag_value) instance_flags : 9; Because G++ complains then that 9 bits isn't sufficient for holding all values of type_instance_flag_value. So the patch adds an type::instance_flags() method, which takes care of casting appropriately, and adds a separate type::set_instance_flags method, following the pattern of the ongoing TYPE_XXX macro elimination. This converts uses of TYPE_INSTANCE_FLAGS to type::instance_flags() in the places where the code was already being touched, but there are still many references to the TYPE_INSTANCE_FLAGS macro left behind. Those could/should be fully replaced at some point. gdb/ChangeLog: * avr-tdep.c (avr_address_class_type_flags): Return type_instance_flags. (avr_address_class_type_flags_to_name): Take a type_instance_flags. (avr_address_class_name_to_type_flags): Return bool and take a type_instance_flags. * d-lang.c (build_d_types): Use type::set_instance_flags. * ft32-tdep.c (ft32_address_class_type_flags): Return type_instance_flags. (ft32_address_class_type_flags_to_name): Take a type_instance_flags. (ft32_address_class_name_to_type_flags): Return bool and take a type_instance_flags. (ft32_gdbarch_init): Use type::set_instance_flags. * eval.c (fake_method::fake_method): Use type::set_instance_flags. * gdbarch.h, gdbarch.c: Regenerate. * gdbarch.sh (address_class_type_flags): Use type_instance_flags. (address_class_name_to_type_flags): Use type_instance_flags and bool. * gdbtypes.c (address_space_name_to_int) (address_space_int_to_name, make_qualified_type): Use type_instance_flags. (make_qualified_type): Use type_instance_flags and type::set_instance_flags. (make_type_with_address_space, make_cv_type, make_vector_type) (check_typedef): Use type_instance_flags. (recursive_dump_type): Cast type_instance_flags to unsigned for printing. (copy_type_recursive): Use type::set_instance_flags. (gdbtypes_post_init): Use type::set_instance_flags. * gdbtypes.h (struct type) <instance_flags>: Rename to ... <m_instance_flags>: ... this. <instance_flags, set_instance_flags>: New methods. (TYPE_INSTANCE_FLAGS): Use the instance_flags method. (SET_TYPE_INSTANCE_FLAGS): New. (address_space_name_to_int, address_space_int_to_name) (make_type_with_address_space): Pass flags using type_instance_flags instead of int. * stabsread.c (cleanup_undefined_types_noname): Use type::set_instance_flags. * s390-tdep.c (s390_address_class_type_flags): Return type_instance_flags. (s390_address_class_type_flags_to_name): Take a type_instance_flags. (s390_address_class_name_to_type_flags): Return bool and take a type_instance_flags. * type-stack.c (type_stack::follow_types): Use type_instance_flags. * dwarf2/read.c (read_tag_pointer_type): Use type_instance_flags.
2020-09-14gdb: add type::endianity_is_not_default / type::set_endianity_is_not_defaultSimon Marchi1-1/+1
Add the `endianity_is_not_default` and `set_endianity_is_not_default` methods on `struct type`, in order to remove the `TYPE_ENDIANITY_NOT_DEFAULT` macro. In this patch, the macro is changed to use the getter, so all the call sites of the macro that are used as a setter are changed to use the setter method directly. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <endianity_is_not_default, set_endianity_is_not_default>: New methods. (TYPE_ENDIANITY_NOT_DEFAULT): Use type::endianity_is_not_default, change all write call sites to use type::set_endianity_is_not_default. Change-Id: I67acd68fcdae424d7e4a601afda78612ad5d92db
2020-09-14gdb: add type::stub_is_supported / type::set_stub_is_supportedSimon Marchi1-1/+1
Add the `stub_is_supported` and `set_stub_is_supported` methods on `struct type`, in order to remove the `TYPE_STUB_SUPPORTED` macro. In this patch, the macro is changed to use the getter, so all the call sites of the macro that are used as a setter are changed to use the setter method directly. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <stub_is_supported, set_stub_is_supported>: New methods. (TYPE_STUB_SUPPORTED): Use type::stub_is_supported, change all write call sites to use type::set_stub_is_supported. Change-Id: I4dfecf2b5df9c2b7bb8db1e9252082140adf3028
2020-09-14gdb: remove TYPE_VARARGSSimon Marchi1-3/+3
gdb/ChangeLog: * gdbtypes.h (TYPE_VARARGS): Remove, replace all uses with type::has_varargs. Change-Id: Ieea4a64b4bfa4b8be643e68cb403081881133740
2020-09-14gdb: add type::has_varargs / type::set_has_varargsSimon Marchi1-1/+2
Add the `has_varargs` and `set_has_varargs` methods on `struct type`, in order to remove the `TYPE_VARARGS` macro. In this patch, the macro is changed to use the getter, so all the call sites of the macro that are used as a setter are changed to use the setter method directly. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <has_varargs, set_has_varargs>: New methods. (TYPE_VARARGS): Use type::has_varargs, change all write call sites to use type::set_has_varargs. Change-Id: I898a1093ae40808b37a7c6fced7f6fa2aae604de
2020-09-14gdb: add type::is_prototyped / type::set_is_prototypedSimon Marchi1-1/+1
Add the `is_prototyped` and `set_is_prototyped` methods on `struct type`, in order to remove the `TYPE_PROTOTYPED` macro. In this patch, the macro is changed to use the getter, so all the call sites of the macro that are used as a setter are changed to use the setter method directly. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <is_prototyped, set_is_prototyped>: New methods. (TYPE_PROTOTYPED): Use type::is_prototyped, change all write call sites to use type::set_is_prototyped. Change-Id: I6ba285250fae413f7c1bf2ffcb5a2cedc8e743da
2020-09-14gdb: add type::target_is_stub / type::set_target_is_stubSimon Marchi1-1/+1
Add the `target_is_stub` and `set_target_is_stub` methods on `struct type`, in order to remove the `TYPE_TARGET_STUB` macro. In this patch, the macro is changed to use the getter, so all the call sites of the macro that are used as a setter are changed to use the setter method directly. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <target_is_stub, set_target_is_stub>: New methods. (TYPE_TARGET_STUB): Use type::is_stub, change all write call sites to use type::set_target_is_stub. Change-Id: I9c71a89adc7ae8d018db9ee156f41c623be0484a
2020-09-14gdb: remove TYPE_STUBSimon Marchi1-1/+1
gdb/ChangeLog: * gdbtypes.h (TYPE_STUB): Remove, replace all uses with type::is_stub. Change-Id: Iec25b50449a0d10a38f815209e478c343e98632c
2020-09-14gdb: add type::is_stub / type::set_is_stubSimon Marchi1-5/+5
Add the `is_stub` and `set_is_stub` methods on `struct type`, in order to remove the `TYPE_STUB` macro. In this patch, the macro is changed to use the getter, so all the call sites of the macro that are used as a setter are changed to use the setter method directly. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <is_stub, set_is_stub>: New methods. (TYPE_STUB): Use type::is_stub, change all write call sites to use type::set_is_stub. Change-Id: Ie935e8fe72c908afd8718411e83f4ff00c386bf3
2020-09-14gdb: remove TYPE_NOSIGNSimon Marchi1-1/+1
gdb/ChangeLog: * gdbtypes.h (TYPE_NOSIGN): Remove, replace all uses with type::has_no_signedness. Change-Id: Iaf8d1cedad195d03a4358e90f6ada77290d03bf2
2020-09-14gdb: add type::has_no_signedness / type::set_has_no_signednessSimon Marchi1-1/+1
Add the `has_no_signedness` and `set_has_no_signednes` methods on `struct type`, in order to remove the `TYPE_NOSIGN` macro. In this patch, the macro is changed to use the getter, so all the call sites of the macro that are used as a setter are changed to use the setter method directly. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <has_no_signedness, set_has_no_signedness>: New methods. (TYPE_NOSIGN): Use type::has_no_signedness, change all write call sites to use type::set_has_no_signedness. Change-Id: I80d8e774316d146fbd814b2928ad5392bada39d5
2020-09-14gdb: remove TYPE_UNSIGNEDSimon Marchi3-9/+9
gdb/ChangeLog: * gdbtypes.h (TYPE_UNSIGNED): Remove, replace all uses with type::is_unsigned. Change-Id: I84f76f5cd44ff7294e421d317376a9e476bc8666
2020-09-14gdb: add type::is_unsigned / type::set_is_unsignedSimon Marchi1-2/+6
Add the `is_unsigned` and `set_is_unsigned` methods on `struct type`, in order to remove the `TYPE_UNSIGNED` macro. In this patch, the `TYPE_UNSIGNED` macro is changed to use `type::is_unsigned`, so all the call sites that are used to set this property on a type are changed to use the new method. The next patch will remove the macro completely. gdb/ChangeLog: * gdbtypes.h (struct type) <is_unsigned, set_is_unsigned>: New methods. (TYPE_UNSIGNED): Use type::is_unsigned. Change all write call sites to use type::set_is_unsigned. Change-Id: Ib09ddce84eda160a801a8f288cccf61c8ef136bc
2020-09-03[gdb/breakpoint, PIE] Handle setting breakpoint on label without addressTom de Vries1-1/+3
When adding: ... if ![runto_main] then { fail "can't run to main" return 0 } ... to test-case gdb.base/label-without-address.exp and running it with target board unix/-fPIE/-pie, we run into: ... (gdb) break main:L1^M Breakpoint 2 at 0x555555554000: file label-without-address.c, line 22.^M ... That is, for a label with optimized-out address, we set a breakpoint at the relocation base. The root cause is that the dwarf reader, despite finding that attribute DW_AT_low_pc is missing, still tags the L1 symbol as having LOC_LABEL, which means it has a valid address, which defaults to 0. Fix this by instead tagging the L1 symbol with LOC_OPTIMIZED_OUT. Tested on x86_64-linux. gdb/ChangeLog: 2020-09-03 Tom de Vries <tdevries@suse.de> PR breakpoint/26546 * dwarf2/read.c (new_symbol): Tag label symbol without DW_AT_low_pc as LOC_OPTIMIZED_OUT instead of LOC_LABEL. gdb/testsuite/ChangeLog: 2020-09-03 Tom de Vries <tdevries@suse.de> PR breakpoint/26546 * gdb.base/label-without-address.exp: Runto main first.
2020-08-31gdb: change type of field_info::non_public_fields to boolSimon Marchi1-3/+3
gdb/ChangeLog: * dwarf2/read.c (struct field_info) <non_public_fields>: Change type to bool. (dwarf2_add_field): Use true instead of 1. Change-Id: I7e9c86429402c28d4f15861d17976b9c50049f94
2020-08-31gdb: fix indentation of struct field_infoSimon Marchi1-28/+28
The indentation is off, fix it before doing other changes. gdb/ChangeLog: * dwarf2/read.c (struct field_info): Fix indentation. Change-Id: Ife6a3d017abcf0a33e49e47e51429e95d504343c
2020-08-17gdb: fix wrong indentation in symbol_needs_eval_contextSimon Marchi1-13/+13
gdb/ChangeLog: * loc.c (class symbol_needs_eval_context): Fix indentation. Change-Id: Ibf4e6a9ca9573b498737a61db116ee10b287b7f5
2020-08-17gdb: use bool in dwarf2_loc_desc_get_symbol_read_needsSimon Marchi1-4/+3
This variable is really a boolean, so use the bool type. gdb/ChangeLog: * dwarf2/loc.c (dwarf2_loc_desc_get_symbol_read_needs): Use bool. Change-Id: I814a47d1200f3b88722c54c822fd49607a6b77be
2020-08-09gdb: replace function pointer with `void *` data with function_viewSimon Marchi3-41/+26
Replace the function pointer + `void *` parameters of dwarf2_fetch_die_loc_sect_off and dwarf2_fetch_die_loc_cu_off with a function_view parameter. Change call sites to use a lambda function. This improves type-safety, so reduces the chances of errors. gdb/ChangeLog: * read.h (dwarf2_fetch_die_loc_sect_off, dwarf2_fetch_die_loc_cu_off): Replace function pointer + `void *` parameter with function_view. * read.c (dwarf2_fetch_die_loc_sect_off, dwarf2_fetch_die_loc_cu_off): Likewise. * loc.c (get_frame_pc_for_per_cu_dwarf_call): Remove. (per_cu_dwarf_call): Adjust. (get_frame_address_in_block_wrapper): Remove. (indirect_synthetic_pointer): Adjust. (get_ax_pc): Remove. (dwarf2_compile_expr_to_ax): Adjust. Change-Id: Ic9b6ced0c4128f2b75ca62e0ed638b0962a22859
2020-08-07Add code for processing version 5 DWP files (for use with DWARF v5).Caroline Tice1-52/+428
The DWARF v5 Spec describes a (slightly) new format for V5 .dwp files. This patch updates GDB to allow it to read/process .dwp files in the new DWARF v5 format, while continuing to be able to read/process .dwp files in the older V1 & V2 formats (older, pre-standard formats). The two major differences between the V2 and the V5 format are: - The inclusion of DWARF-v5-specific sections: .debug_loclists.dwo .debug_rnglists.dwo - The .dwp section identifier encodings have changed. The table below shows the old & new encodings. Notice the re-purposing of 5, 7 & 8 in particular. Val DW4 section DW4 section id DW5 section DW5 section id --- ----------------- -------------- ----------------- -------------- 1 .debug_info.dwo DW_SECT_INFO .debug_info.dwo DW_SECT_INFO 2 .debug_types.dwo DW_SECT_TYPES -- reserved 3 .debug_abbrev.dwo DW_SECT_ABBREV .debug_abbrev.dwo DW_SECT_ABBREV 4 .debug_line.dwo DW_SECT_LINE .debug_line.dwo DW_SECT_LINE 5 .debug_loc.dwo DW_SECT_LOC .debug_loclists.dwo DW_SECT_LOCLISTS 6 .debug_str_offsets.dwo .debug_str_offsets.dwo DW_SECT_STR_OFFSETS DW_SECT_STR_OFFSETS 7 .debug_macinfo.dwo DW_SECT_MACINFO .debug_macro.dwo DW_SECT_MACRO 8 .debug_macro.dwo DW_SECT_MACRO .debug_rnglists.dwo DW_SECT_RNGLISTS
2020-08-06gdb: move regcache::regcaches to regcache.cSimon Marchi1-0/+1
I don't really understand why `regcache_thread_ptid_changed` is a static method of `struct regcache` instead of being a static free function in regcache.c. And I don't understand why `current_regcache` is a static member of `struct regcache` instead of being a static global in regcache.c. It's not wrong per-se, but there's no other place where we do it like this in GDB (as far as I remember) and it just exposes things unnecessarily in the .h. Move them to be just static in regcache.c. As a result, registers_changed_ptid doesn't need to be friend of the regcache class anymore. Removing the include of forward_list in regcache.h showed that we were missing an include for it in dwarf2/index-write.c, record-btrace.c and sparc64-tdep.c. gdb/ChangeLog: * regcache.h (class regcache): Remove friend registers_changed_ptid. <regcache_thread_ptid_changed>: Remove. <regcaches>: Remove. * regcache.c (regcache::regcaches): Rename to... (regcaches): ... this. Make static. (get_thread_arch_aspace_regcache): Update. (regcache::regcache_thread_ptid_changed): Rename to... (regcache_thread_ptid_changed): ... this. Update. (class regcache_access): Remove. (regcaches_test): Update. (_initialize_regcache): Update. * sparc64-tdep.c, dwarf2/index-write.c, record-btrace.c: Include <forward_list>. Change-Id: Iabc25759848010cfbb7ee7e27f60eaca17d61c12