aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2020-05-27Add dwarf2_per_objfile parameter to allocate_piece_closureSimon Marchi2-3/+11
This allows removing a dwarf2_per_cu_data::dwarf2_per_objfile reference. gdb/ChangeLog: * dwarf2/loc.c (allocate_piece_closure): Add dwarf2_per_objfile parameter. (dwarf2_evaluate_loc_desc_full): Update. Change-Id: Ic4a694a3fc763360a131ee4e3aaf5a5b4735c813
2020-05-27Add dwarf2_per_objfile parameter to dwarf2_read_addr_indexSimon Marchi4-28/+55
Pass it all the way from the symbol batons. This allows removing a dwarf2_per_cu_data::dwarf2_per_objfile reference. gdb/ChangeLog: * dwarf2/read.h (dwarf2_read_addr_index): Add dwarf2_per_objfile parameter. * dwarf2/read.c (dwarf2_read_addr_index): Likewise. * dwarf2/loc.c (decode_debug_loclists_addresses): Add dwarf2_per_objfile parameter. (decode_debug_loc_dwo_addresses): Likewise. (dwarf2_find_location_expression): Update. (class dwarf_evaluate_loc_desc) <get_addr_index>: Update. (locexpr_describe_location_piece): Add dwarf2_per_objfile parameter. (disassemble_dwarf_expression): Add dwarf2_per_objfile parameter. (locexpr_describe_location_1): Likewise. (locexpr_describe_location): Update. Change-Id: I8414755e41a87c92f96e408524cc7aaccf086cda
2020-05-27Remove dwarf2_per_cu_data::text_offsetSimon Marchi6-39/+63
This method simply returns the text offset of the objfile associated to the dwarf2_per_cu_data object. Since dwarf2_per_cu_data objects are going to become objfile-independent, we can't keep this method. This patch removes it. Existing callers need to figure out the in the context of which objfile this is being used, and call text_offset on it. Typically, this comes from a symbol baton, where we store the corresponding dwarf2_per_objfile. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_cu_data) <text_offset>: Remove. * dwarf2/read.c (dwarf2_per_cu_data::text_offset): Remove. * dwarf2/loc.c (dwarf2_find_location_expression): Update. (dwarf2_compile_property_to_c): Update. (dwarf2_compile_expr_to_ax): Add dwarf2_per_objfile parameter, use text offset from objfile. (locexpr_tracepoint_var_ref): Update. (locexpr_generate_c_location): Update. (loclist_describe_location): Update. (loclist_tracepoint_var_ref): Update. * dwarf2/compile.h (compile_dwarf_bounds_to_c): Add dwarf2_per_objfile parameter. * dwarf2/loc2c.c (do_compile_dwarf_expr_to_c): Likewise, use text offset from objfile. (compile_dwarf_expr_to_c): Add dwarf2_per_objfile parameter. Change-Id: I56b01ba294733362a3562426a96d48ae051a776f
2020-05-27Add dwarf2_per_objfile to dwarf_expr_context and dwarf2_frame_cacheSimon Marchi5-53/+98
Evaluating DWARF expressions (such as location expressions) requires knowing about the current objfile. For example, it may call functions like dwarf2_fetch_die_loc_sect_off, which currently obtain the dwarf2_per_objfile object it needs from the dwarf2_per_cu_data object. However, since we are going to remove this dwarf2_per_cu_data::dwarf2_per_objfile link, these functions will need to obtain the current dwarf2_per_objfile by parmeter. If we go up the stack, we see that the DWARF expression contexts (dwarf_expr_context and the classes that derive from it) need to store the dwarf2_per_objfile, to be able to pass it to those functions that will need it. This patch adds a constructor to all these dwarf_expr_context variants, accepting a dwarf2_per_objfile parameter. This dwarf2_per_objfile generally comes from a symbol baton created earlier. For frame-related expressions, the dwarf2_per_objfile object must be passed through the dwarf2_frame_cache object. This lead to the dwarf2_frame_find_fde function returning (by parameter) a dwarf2_per_objfile object. I then realized that this made the existing "out_offset" parameter redundant. This offset is `objfile->text_section_offset ()`, so it can be recomputed from the dwarf2_per_objfile object at any time. I therefore opted to remove this output parameter, as well as the offset field of dwarf2_frame_cache. *Note*, there's one spot I'm particularly unsure about. In dwarf_evaluate_loc_desc::push_dwarf_reg_entry_value, we would save and overwrite the offset value in the context, along with a bunch of other state. This is because we might be about to evaluate something in a different CU that the current one. If the two CUs are in the same objfile, then the text_offset is the same, as it's a property of the objfile. However, if the two CUs are possibly in different objfiles, then it means the text_offsets are different. It would also mean we would need to save and restore the dwarf2_per_objfile in the context. Is that even possible? gdb/ChangeLog: * dwarf2/expr.h (struct dwarf_expr_context) <dwarf_expr_context>: Add dwarf2_per_objfile parameter. <offset>: Remove. <per_objfile>: New member. * dwarf2/expr.c (dwarf_expr_context::dwarf_expr_context): Add dwarf2_per_objfile parameter. Don't set offset, set per_objfile. (dwarf_expr_context::execute_stack_op): Use offset from objfile. * dwarf2/frame.c (dwarf2_frame_find_fde): Return (by parameter) a dwarf2_per_objfile object instead of an offset. (class dwarf_expr_executor) <dwarf_expr_executor>: Add constructor. (execute_stack_op): Add dwarf2_per_objfile parameter, pass it to dwarf2_expr_executor constructor. Don't set offset. (dwarf2_fetch_cfa_info): Update. (struct dwarf2_frame_cache) <text_offset>: Remove. <per_objfile>: New field. (dwarf2_frame_cache): Update. (dwarf2_frame_prev_register): Update. * dwarf2/loc.c (class dwarf_evaluate_loc_desc) <dwarf_evaluate_loc_desc>: Add constructor. (dwarf2_evaluate_loc_desc_full): Update. (dwarf2_locexpr_baton_eval): Update. (class symbol_needs_eval_context) <symbol_needs_eval_context>: Add constructor. (dwarf2_loc_desc_get_symbol_read_needs): Update. Change-Id: I14df060669cc36ad04759f1708c6d7b1fda77727
2020-05-27Move int type methods out of dwarf2_per_cu_dataSimon Marchi3-35/+53
These methods rely on the current objfile to create types based on it. Since dwarf2_per_cu_data is to become objfile-independent, these methods need to mvoe. int_type can be in dwarf2_per_objfile, as it only requires knowing about the objfile. addr_sized_int_type and addr_type also need to know about the DWARF address type size, which is CU-specific. The dwarf2_cu objects seems like a good place for it, as it knows both about the current objfile and the current CU. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_cu_data) <addr_type, addr_sized_int_type>: Move to dwarf2_cu. <int_type>: Move to dwarf2_per_objfile. (struct dwarf2_per_objfile) <int_type>: Move here. * dwarf2/read.c (struct dwarf2_cu) <addr_type, addr_sized_int_type>: Move here. (read_func_scope): Update. (read_array_type): Update. (read_tag_string_type): Update. (attr_to_dynamic_prop): Update. (dwarf2_per_cu_data::int_type): Rename to... (dwarf2_per_objfile::int_type): ... this. (dwarf2_per_cu_data::addr_sized_int_type): Rename to... (dwarf2_cu::addr_sized_int_type): ... this. (read_subrange_type): Update. (dwarf2_per_cu_data::addr_type): Rename to... (dwarf2_cu::addr_type): ... this. (set_die_type): Update. Change-Id: Ic4708ef99d43a8d99325ff91dee59b2eb706cb8f
2020-05-27Remove reference to dwarf2_per_cu_data::dwarf2_per_objfile in ↵Simon Marchi2-1/+6
queue_and_load_all_dwo_tus In this context, we know that per_cu->cu will be set, as there is this assertion: gdb_assert (per_cu->cu != NULL) So in order to remove the dwarf2_per_cu_data::dwarf2_per_objfile reference in queue_and_load_all_dwo_tus, we can go through per_cu->cu. This adds a reference to dwarf2_per_cu_data::cu, but it will get removed eventually, in a subsequent patch. gdb/ChangeLog: * dwarf2/read.c (queue_and_load_all_dwo_tus): Access per_objfile data through per_cu->cu. Change-Id: Id4662828ac3c5bc93fe221df3c9bd9a36a8427ad
2020-05-27Pass dwarf2_cu objects to dwo-related functions, instead of dwarf2_per_cu_dataSimon Marchi2-45/+53
This allows removing references to the dwarf2_per_cu_data::dwarf2_per_objfile field. I am not too sure of the code flow here, but ultimately open_and_init_dwo_file calls create_cus_hash_table, and passes it per_cu->cu. create_cus_hash_table requires a dwarf2_cu to pass to cutu_reader, as the "parent_cu". The dwarf2_per_cu_data::cu link is only set when in a certain context. It's not easy to convince myself in which situations it's safe to use it. Instead, if a function is going to use a dwarf2_cu, I think it's simpler if it takes that object directly. If it needs access to the corresponding dwarf2_per_cu_data object, then it can used the dwarf2_cu::per_cu field, which we know is always set. This patch adds some references to dwarf2_per_cu_data::cu in the cutu_reader context. In this context, we know this field will be set, as it's cutu_reader that is responsible for instantiating the dwarf2_cu and assigning the field. gdb/ChangeLog: * dwarf2/read.c (lookup_dwo_comp_unit): Change dwarf2_per_cu_data parameter fo dwarf2_cu. (lookup_dwo_type_unit): Likewise. (read_cutu_die_from_dwo): Likewise. (lookup_dwo_unit): Likewise. (open_and_init_dwo_file): Likewise. (lookup_dwo_cutu): Likewise. (lookup_dwo_comp_unit): Likewise. (lookup_dwo_type_unit): Likewise. (cutu_reader::init_tu_and_read_dwo_dies): Update. (cutu_reader::cutu_reader): Update. Change-Id: I0406a715b0797963bde2bd86237f159cbece5839
2020-05-27Add dwarf2_per_objfile parameter to process_full_{comp,type}_unitSimon Marchi2-10/+21
This allows removing the dwarf2_per_cu_data::dwarf2_per_objfile references in them. gdb/ChangeLog: * dwarf2/read.c (process_full_comp_unit): Add dwarf2_per_objfile parameter. (process_full_type_unit): Likewise. (process_queue): Update. Change-Id: Ie68baa8cc4bf1f81cc67d4ad13a59881b4c3feb6
2020-05-27Add dwarf2_per_objfile parameter to recursively_compute_inclusionsSimon Marchi2-7/+18
This allows removing dwarf2_per_cu_data::dwarf2_per_objfile references in recursively_compute_inclusions and compute_compunit_symtab_includes. gdb/ChangeLog: * dwarf2/read.c (recursively_compute_inclusions): Add dwarf2_per_objfile parameter. (compute_compunit_symtab_includes): Likewise. (process_cu_includes): Update. Change-Id: I1ee7f8dfc07b39763985e6764e8ce04dcc943ec5
2020-05-27Add dwarf2_per_objfile parameter to create_partial_symtabSimon Marchi2-7/+19
This allows removing a dwarf2_per_cu_data::dwarf2_per_objfile reference. gdb/ChangeLog: * dwarf2/read.c (create_partial_symtab): Add dwarf2_per_objfile parameter. (create_type_unit_group): Update. (process_psymtab_comp_unit_reader): Update. (build_type_psymtabs_reader): Update. Change-Id: I72e3a8fce8022943ce6992fb623e05636cd0e3a5
2020-05-27Remove dwarf2_per_cu_data::dwarf2_per_objfile reference in cutu_reader::keepSimon Marchi2-2/+10
Here, it should be safe to use dwarf2_per_cu_data->cu->per_objfile, as we know that dwarf2_per_cu_data->cu will be set at this point. Note that this adds a reference to dwarf2_per_cu_data::cu, which we'll want to remove later, but the current focus is to remove references to dwarf2_per_cu_data::dwarf2_per_objfile. We'll deal with that in a subsequent patch. gdb/ChangeLog: * dwarf2/read.c (cutu_reader::keep): Access dwarf2_per_objfile object through m_this_cu->cu. Change-Id: I8dc26d4db021e0b9e9306eb033965b2704bba87c
2020-05-27Make queue_and_load_dwo_tu receive a dwarf2_cuSimon Marchi2-7/+12
queue_and_load_dwo_tu, used as a callback for htab_traverse_noresize, currently receives a dwarf2_per_cu_data as its `info` user data. It accesses the current dwarf2_cu object through the dwarf2_per_cu_data::cu field. This field will be removed, because the dwarf2_per_cu_data will become objfile-independent, while dwarf_cu will remain objfile-dependent. To remove references to this field, change queue_and_load_dwo_tu so that it expects to receive a pointer to the dwarf2_cu as its info parameter. A reference to dwarf2_per_cu_data::cu needs to be added, but it will get removed in a subsequent patch, when this function gets re-worked. I kept this as a separate patch, because since there's no strong typing here, it's easy to miss something. gdb/ChangeLog: * dwarf2/read.c (queue_and_load_dwo_tu): Expect a dwarf2_cu as the info parameter. (queue_and_load_all_dwo_tus): Pass per_cu->cu. Change-Id: I3db2a780f0e2157d52ce6939f478558ffe20abcf
2020-05-27Add dwarf2_per_objfile parameter to cutu_reader's constructorsSimon Marchi2-50/+103
The cutu_reader type is used for reading the CU represented by the passed dwarf2_per_cu_data object. This reading is done in the context of a given obfile, which is currently the one associated to the passed dwarf2_per_cu_data object. Since the dwarf2_per_cu_data type will become objfile-independent, we will need to pass the objfile separately. This patch therefore adds a dwarf2_per_objfile parameter to the cutu_reader constructors, as well as to their callers, up until the point where we can get the dwarf2_per_objfile object from somewhere else. In the end, this allows removing the reference to dwarf2_per_cu_data::dwarf2_per_objfile in cutu_reader::cutu_reader. A few dwarf2_per_cu_data::dwarf2_per_objfile references are added (e.g. in dwarf2_fetch_die_type_sect_off). This is temporary, this will be removed once these functions will get re-worked in subsequent patches. gdb/ChangeLog: * dwarf2/read.c (class cutu_reader) <cutu_reader>: Add per_objfile parameter. (load_full_type_unit): Add per_objfile parameter. (read_signatured_type): Likewise. (load_full_comp_unit): Likewise. (load_cu): Likewise. (dw2_do_instantiate_symtab): Likewise. (dw2_get_file_names): Likewise. (dw2_map_symtabs_matching_filename): Update. (dw_expand_symtabs_matching_file_matcher): Update. (dw2_map_symbol_filenames): Update. (process_psymtab_comp_unit): Add per_objfile parameter. (build_type_psymtabs_1): Update. (process_skeletonless_type_unit): Update. (dwarf2_build_psymtabs_hard): Update. (load_partial_comp_unit): Add per_objfile parameter. (scan_partial_symbols): Update. (load_full_comp_unit): Add per_objfile parameter. (process_imported_unit_die): Update. (create_cus_hash_table): Update. (find_partial_die): Update. (dwarf2_read_addr_index): Update. (follow_die_offset): Update. (dwarf2_fetch_die_loc_sect_off): Update. (dwarf2_fetch_constant_bytes): Update. (dwarf2_fetch_die_type_sect_off): Update. (follow_die_sig_1): Update. (load_full_type_unit): Add per_objfile parameter. (read_signatured_type): Likewise. Change-Id: Ibd7bbc443df8b9b8b6f96ff18e93a60ee721b85f
2020-05-27Use bfd_get_filename instead of objfile_name in lookup_dwo_unitSimon Marchi2-1/+6
There should be no functional difference, as objfile_name defers to bfd_get_filename if objfile::obfd is non-NULL, which should be the case here. This allows to remove a reference to dwarf2_per_cu_data::dwarf2_per_objfile. gdb/ChangeLog: * dwarf2/read.c (lookup_dwo_unit): Use bfd_get_filename instead of objfile_name. Change-Id: I1e1c1870820aec23701edc9c3994612da5781c23
2020-05-27Make dwarf2_get_dwz_file take a dwarf2_per_bfdSimon Marchi6-28/+51
This allows removing a per_bfd->dwarf2_per_objfile reference in get_abbrev_section_for_cu. This requires saving the bfd in dwarf2_per_bfd. The constructor of dwarf2_per_bfd already accepts the bfd, so it's just a matter of saving it in a field. I replaced uses of objfile_name with bfd_get_filename, which should be equivalent in this case. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_bfd) <obfd>: New member. (dwarf2_get_dwz_file): Replace parameter with dwarf2_per_bfd. * dwarf2/read.c (dwarf2_per_bfd::dwarf2_per_bfd): Assign obfd field. (dwarf2_get_dwz_file): Replace parameter with dwarf2_per_bfd. (create_cus_from_index): Update. (dwarf2_read_gdb_index): Update. (create_cus_from_debug_names): Update. (dwarf2_read_debug_names): Update. (get_abbrev_section_for_cu): Update. (create_all_comp_units): Update. (read_attribute_value): Update. (get_debug_line_section): Update. * dwarf2/index-cache.c (index_cache::store): Update. * dwarf2/index-write.c (save_gdb_index_command): Update. * dwarf2/macro.c (dwarf_decode_macro_bytes): Update. Change-Id: Ifb23f55dda93c499aae57b6a9aff9c6ff9d2f45f
2020-05-27Add dwarf2_per_bfd field to dwarf2_per_cu_dataSimon Marchi3-6/+32
Some code using dwarf2_per_cu_data objects accesses the corresponding dwarf2_per_bfd using the following pattern: per_cu->dwarf2_per_objfile->per_bfd Since dwarf2_per_cu_data objects are going to become objfile-independent, the dwarf2_per_objfile link must go. To replace it, add a dwarf2_per_cu_data->per_bfd link. It makes sense to have it there because the dwarf2_per_cu_data objects belong to the dwarf2_per_bfd, so this is essentially just a backlink to their owner. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_cu_data) <per_bfd>: New member. * dwarf2/read.c (dwarf2_per_bfd::allocate_per_cu): Initialize dwarf2_per_cu_data::per_bfd. (dwarf2_per_bfd::allocate_signatured_type): Likewise. (create_type_unit_group): Likewise. (queue_comp_unit): Remove reference to per_cu->dwarf2_per_objfile. (maybe_queue_comp_unit): Likewise. (fill_in_sig_entry_from_dwo_entry): Assign new field. (create_cus_hash_table): Assign new field. Change-Id: I4ba0a393e64a14489ef061261a3dede1509d055b
2020-05-27Remove dwarf2_cu->per_cu->dwarf2_per_objfile referencesSimon Marchi2-165/+133
Change spots that access the dwarf2_per_objfile object through this pattern: dwarf2_cu->per_cu->dwarf2_per_objfile to dwarf2_cu->per_objfile This allows removing many references to dwarf2_per_cu_data::dwarf2_per_objfile. Again, I hope the following ChangeLog entry will be fine. I'd rather not list all the affected functions, as it would be time-consuming and a bit pointless. gdb/ChangeLog: * dwarf2/read.c: Replace dwarf2_cu->per_cu->dwarf2_per_objfile references with dwarf2_cu->per_objfile throughout. Change-Id: I00f44e88295f70ae805a4b18e8144ca92154612e
2020-05-27Remove reference to dwarf2_per_cu_data::dwarf2_per_objfile in ↵Simon Marchi2-38/+66
dw2_do_instantiate_symtab This patch begins by removing the per_cu->dwarf2_per_objfile reference in dw2_do_instantiate_symtab, instead accepting a dwarf2_per_objfile object as a parameter. It then fixes the fallouts. In this context, the dwarf2_per_objfile is generally derived from an objfile passed to a quick_symbol_functions callback. gdb/ChangeLog: * dwarf2/read.c (dw2_do_instantiate_symtab): Add per_objfile parameter, don't use per_cu->dwarf2_per_objfile. (dw2_instantiate_symtab): Likewise. (dw2_find_last_source_symtab): Update. (dw2_map_expand_apply): Update. (dw2_lookup_symbol): Update. (dw2_expand_symtabs_for_function): Update. (dw2_expand_all_symtabs): Update. (dw2_expand_symtabs_with_fullname): Update. (dw2_expand_symtabs_matching_one): Add per_objfile parameter, don't use per_cu->dwarf2_per_objfile. (dw2_expand_marked_cus): Update. (dw2_find_pc_sect_compunit_symtab): Update. (dw2_debug_names_lookup_symbol): Update. (dw2_debug_names_expand_symtabs_for_function): Update. (dw2_debug_names_map_matching_symbols): Update. (dwarf2_psymtab::expand_psymtab): Update. Change-Id: I248300822a09bae8470b65a7122d04fb9cb2b5bc
2020-05-27Add dwarf2_per_objfile field to dwarf2_cuSimon Marchi2-10/+28
Subsequent patches will make dwarf2_per_cu_data objfile-independent. This means that the dwarf2_per_cu_data::dwarf2_per_objfile field must go. The code using a dwarf2_cu structure currently accesses the current dwarf2_per_objfile object through dwarf2_cu->per_cu->dwarf2_per_objfile. Since it's ok for the dwarf2_cu to know about the current objfile (a dwarf2_cu is always used in the context of a particular objfile), add a dwarf2_per_objfile field to dwarf2_cu. Upcoming patches will gradually remove uses of dwarf2_per_cu_data::dwarf2_per_objfile in favor of dwarf2_cu::dwarf2_per_objfile, until the former can be removed. gdb/ChangeLog: * dwarf2/read.c (struct dwarf2_cu) <dwarf2_cu>: Add parameter. <per_objfile>: New member. (class cutu_reader) <init_tu_and_read_dwo_dies>: Add parameter. (cutu_reader::init_tu_and_read_dwo_dies): Add parameter, update call to dwarf2_cu. (cutu_reader::cutu_reader): Update. (dwarf2_cu::dwarf2_cu): Add parameter, initialize per_objfile. Change-Id: I8fd0da7371f65baea1ea7787aad08e10453bc565
2020-05-27Move die_type_hash to dwarf2_per_objfileSimon Marchi3-10/+19
The die_type_hash field can't be shared between multiple obfiles, as it holds `struct type` objects, which are objfile-specific. Move it from dwarf2_per_bfd to dwarf2_per_objfile and update all references. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_bfd) <die_type_hash>: Move to struct dwarf2_per_objfile. (struct dwarf2_per_objfile) <die_type_hash>: Move from struct dwarf2_per_bfd. * dwarf2/read.c (set_die_type): Update. (get_die_type_at_offset): Update. Change-Id: I3589777ed3579bcabafd2ba859d27babe4502bfb
2020-05-27Remove symtab links from dwarf2_psymtab and dwarf2_per_cu_quick_dataSimon Marchi3-70/+160
The dwarf2_psymtab and dwarf2_per_cu_quick_data types contain a pointer to a compunit_symtab, which is a pointer to the corresponding full symtab. The dwarf2_psymtab and dwarf2_per_cu_quick_data objects are going to become objfile-independent, and possibly shared by multiple objfiles, whereas compunit_symtab will stay objfile-dependent. This backlink to the compunit_symtab must therefore be removed. This patch replaces them with a vector in the dwarf2_per_objfile type, that serves as a mapping from dwarf2_per_cu_data objects to compunit_symtab objects, for this particular objfile. The vector is indexed using the index assigned to the dwarf2_per_cu_data at its creation. I removed the get_compunit_symtab, as it appears to bring not much value over calling dwarf2_per_objfile::get_symtab directly. gdb/ChangeLog: YYYY-MM-DD Tom Tromey <tom@tromey.com> YYYY-MM-DD Simon Marchi <simon.marchi@efficios.com> * dwarf2/read.h (struct dwarf2_per_bfd) <num_psymtabs>: New method. (struct dwarf2_per_objfile) <resize_symtabs, symtab_set_p, get_symtab, set_symtab>: New methods. <m_symtabs>: New field. (struct dwarf2_psymtab): Derive from partial_symtab. <readin_p, get_compunit_symtab>: Declare methods. * dwarf2/read.c (dwarf2_per_objfile::symtab_set_p, dwarf2_per_objfile::get_symtab, dwarf2_per_objfile::set_symtab): New methods. (struct dwarf2_per_cu_quick_data) <compunit_symtab>: Remove. (dw2_do_instantiate_symtab, dw2_instantiate_symtab) (dw2_map_expand_apply, dw2_map_symtabs_matching_filename) (dw2_symtab_iter_next, dw2_print_stats) (dw2_expand_symtabs_with_fullname) (dw2_expand_symtabs_matching_one) (dw_expand_symtabs_matching_file_matcher) (dw2_find_pc_sect_compunit_symtab, dw2_map_symbol_filenames) (dw2_debug_names_iterator::next) (dw2_debug_names_map_matching_symbols) (fill_in_sig_entry_from_dwo_entry, dwarf2_psymtab::read_symtab) (process_queue, dwarf2_psymtab::expand_psymtab): Update. (dwarf2_psymtab::readin_p, dwarf2_psymtab::get_compunit_symtab): New methods. (get_compunit_symtab, process_full_comp_unit) (process_full_type_unit): Update. (dwarf2_build_psymtabs, dwarf2_initialize_objfile, add_type_unit): Call Change-Id: Iec53d96e0b70a57d8b68408febdac3c6c3d4854b
2020-05-27Split dwarf2_per_objfile into dwarf2_per_objfile and dwarf2_per_bfdSimon Marchi5-362/+412
This is the first step of splitting dwarf2_per_objfile in two, one structure for objfile-independent data (dwarf2_per_bfd) and one for objfile-dependent data (dwarf2_per_objfile). The existing dwarf2_per_objfile is renamed dwarf2_per_bfd, and a new dwarf2_per_objfile type is introduced, which sits "in between" the objfile and dwarf2_per_bfd. So where we had this before: objfile -> dwarf2_per_objfile (*) we now have this: objfile -> dwarf2_per_objfile -> dwarf2_per_bfd (*) (*) Note that the dwarf2_per_objfile in the former corresponds to the dwarf2_per_bfd in the latter. I've done the minimal amount of changes in this patch: following patches will incrementally move things that are not actually shareable between objfiles from dwarf2_per_bfd to dwarf2_per_objfile. Most references to dwarf2_per_objfile objects are changed to dwarf2_per_objfile->per_bfd. To avoid many of these replacements, which would have to be reverted later anyway, I've moved right away the objfile backlink to the new dwarf2_per_objfile structure in this patch. I've also moved the read_line_string method, since it references the objfile backlink, and it's actually not difficult to move. Once the moves are completed, multiple dwarf2_per_objfile sharing the same BFD will point to the same single instance of dwarf2_per_bfd (as long as they don't require relocation). dwarf2_has_info, where we create these objects, is updated to the new architecture. I've had to change the get_gdb_index_contents_ftype typedef and related functions. The parameter type was changed from dwarf2_per_objfile to dwarf2_per_bfd, otherwise the template wouldn't work. Please excuse the terse ChangeLog entry, I have not listed all the functions where dwarf2_per_objfile has been changed to dwarf2_per_objfile->per_bfd. It would take a considerable amount of time and would not really be useful in the end. gdb/ChangeLog: * dwarf2/read.h (dwarf2_per_objfile): Rename to dwarf2_per_bfd, then introduce a new dwarf2_per_objfile type. <read_line_string>: Move to the new dwarf2_per_objfile type. <objfile>: Likewise. (dwarf2_per_bfd): Rename dwarf2_per_objfile to this. * dwarf2/read.c: Replace references to dwarf2_per_objfile with dwarf2_per_objfile->per_bfd. (dwarf2_per_objfile::dwarf2_per_objfile): Rename to... (dwarf2_per_bfd::dwarf2_per_bfd): ... this. (dwarf2_per_objfile::free_cached_comp_units): Rename to... (dwarf2_per_bfd::free_cached_comp_units): ... this. (dwarf2_has_info): Allocate dwarf2_per_bfd. (dwarf2_per_objfile::locate_sections): Rename to... (dwarf2_per_bfd::locate_sections): ... this. (dwarf2_per_objfile::get_cutu): Rename to... (dwarf2_per_bfd::get_cutu): ... this. (dwarf2_per_objfile::get_cu): Rename to... (dwarf2_per_bfd::get_cu): ... this. (dwarf2_per_objfile::get_tu): Rename to... (dwarf2_per_bfd::get_tu): ... this. (dwarf2_per_objfile::allocate_per_cu): Rename to... (dwarf2_per_bfd::allocate_per_cu): ... this. (dwarf2_per_objfile::allocate_signatured_type): Rename to... (dwarf2_per_bfd::allocate_signatured_type): ... this. (get_gdb_index_contents_ftype): Change parameter from dwarf2_per_objfile to dwarf2_per_bfd. * dwarf2/macro.c, dwarf2/index-write.c: Replace references to dwarf2_per_objfile with dwarf2_per_objfile->per_bfd. Change-Id: I7de7b5d1ce7494aa73bfcf15f719d3c5c46e138c
2020-05-27Add dwarf2_per_objfile member to DWARF batonsTom Tromey4-12/+54
Various DWARF callbacks expect to be able to fetch the objfile and / or dwarf2_per_objfile from the DWARF CU object. However, this won't be possible once sharing is implemented. Because these objects are related to full symbols (e.g., they are used to implement location expressions), they can simply store the dwarf2_per_objfile they need. This patch adds a per_objfile member to the various "baton" structures and arranges to set this value when constructing the baton. gdb/ChangeLog: YYYY-MM-DD Tom Tromey <tom@tromey.com> YYYY-MM-DD Simon Marchi <simon.marchi@efficios.com> * dwarf2/loc.c (struct piece_closure) <per_objfile>: New member. (allocate_piece_closure): Set "per_objfile" member. (dwarf2_find_location_expression, dwarf2_locexpr_baton_eval) (locexpr_describe_location, loclist_describe_location): Use new member. * dwarf2/read.c (read_call_site_scope) (mark_common_block_symbol_computed, attr_to_dynamic_prop) (dwarf2_const_value_attr, dwarf2_fetch_die_loc_sect_off) (fill_in_loclist_baton, dwarf2_symbol_mark_computed, handle_data_member_location): Set per_objfile member. * dwarf2/loc.h (struct dwarf2_locexpr_baton) <per_objfile>: New member. (struct dwarf2_loclist_baton) <per_objfile>: New member. Change-Id: If3aaa6a0f544be86710157c3adb68fde24d80037
2020-05-27Add dwarf2_per_cu_data::indexTom Tromey3-19/+60
Currently, a dwarf2_per_cu_data can hold a link to the corresponding expanded compunit_symtab. However, the dwarf2_per_cu_data objects are shared across objfiles, a simple pointer won't work: each objfile sharing the dwarf2_per_cu_data instance will have a corresponding compunit_symtab. Instead, this link will be stored in the dwarf2_per_objfile object (which will contain the objfile-specific data). To enable this, we add an index to each dwarf2_per_cu_data and signatured_type. The data structure in the dwarf2_per_objfile will use this new index to map a dwarf2_per_cu_data to its corresponding compunit_symtab, for this objfile. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_objfile) <allocate_per_cu, allocate_signatured_type>: Declare new methods. <m_num_psymtabs>: New member. (struct dwarf2_per_cu_data) <index>: New member. * dwarf2/read.c (dwarf2_per_objfile::allocate_per_cu) (dwarf2_per_objfile::allocate_signatured_type): New methods. (create_cu_from_index_list): Use allocate_per_cu. (create_signatured_type_table_from_index) (create_signatured_type_table_from_debug_names) (create_debug_type_hash_table, add_type_unit) (read_comp_units_from_section): Use allocate_signatured_type. Change-Id: I7733479a38ce82a5015cb184c8acce5f8bbf2e69
2020-05-27Add "objfile" parameter to two partial_symtab methodsTom Tromey4-35/+55
This series will cause partial symtabs to be shared across objfiles. However, full symtabs and symbols will still be objfile-dependent, so will be expanded separately for each objfile. So, a debug info reader will need to know which objfile to consult when expanding a partial symtab. This patch adds an objfile parameter to the two relevant methods of partial_symtab. Current implementations simply ignore them. gdb/ChangeLog: * psymtab.c (partial_map_expand_apply) (psym_find_pc_sect_compunit_symtab, psym_lookup_symbol) (psym_lookup_global_symbol_language) (psymtab_to_symtab, psym_find_last_source_symtab, dump_psymtab) (psym_print_stats, psym_expand_symtabs_for_function) (psym_map_symbol_filenames, psym_map_matching_symbols) (psym_expand_symtabs_matching) (partial_symtab::read_dependencies, maintenance_info_psymtabs) (maintenance_check_psymtabs): Update. * psympriv.h (struct partial_symtab) <readin_p, get_compunit_symtab>: Add objfile parameter. (struct standard_psymtab) <readin_p, get_compunit_symtab>: Likewise. * dwarf2/read.c (struct dwarf2_include_psymtab) <readin_p, get_compunit_symtab>: Likewise. (dwarf2_psymtab::expand_psymtab): Pass objfile argument. Change-Id: I3f0b26787c3e78f7fb78b9fc011d91fb8690f3a0
2020-05-27Introduce dwarf2_per_objfile::obstackTom Tromey3-52/+66
Currently much of the DWARF-related data is stored on the objfile obstack. This prevents sharing this data across objfiles, so this patch adds a new obstack to dwarf2_per_objfile. Note that the dwarf2_per_objfile type is going to become "dwarf2_per_bfd" in a subsequent patch, which is indeed going to be shared between objfiles. One way to check whether this is correct is to look at the remaining uses of objfile_obstack in the DWARF code and note that they all appear in the "full CU" code paths. The converse -- storing per-objfile data on the shared obstack -- is not good, but it is just a memory leak, not a potential use-after-free. Double-checking this would also be useful, though. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_objfile) <obstack>: New member. * dwarf2/read.c (delete_file_name_entry): Fix comment. (create_cu_from_index_list) (create_signatured_type_table_from_index) (create_signatured_type_table_from_debug_names) (dw2_get_file_names_reader, dwarf2_initialize_objfile) (dwarf2_create_include_psymtab) (create_debug_type_hash_table, add_type_unit) (create_type_unit_group, read_comp_units_from_section) (dwarf2_compute_name, create_cus_hash_table) (create_dwp_hash_table, create_dwo_unit_in_dwp_v1) (create_dwo_unit_in_dwp_v2, open_and_init_dwp_file): Use new obstack. (dw2_get_real_path): Likewise. Change argument to dwarf2_per_objfile. Change-Id: Icdec7be7c4d9f33d1dce4f807284f3077f7d3f03
2020-05-27Fix PR 26000, logical bitwise error / prologue analyzerLuis Machado2-1/+7
This fixes an instruction mask typo. We should be matching only ldrd (immediate) and not any other of its variants. As is, it never matches anything. With the patch, the instruction mask also allows matching of ldrd (literal), but the check for SP discards this particular instruction pattern, as it has a hardcoded PC register. gdb/ChangeLog: 2020-05-27 Luis Machado <luis.machado@linaro.org> PR tdep/26000 * arm-tdep.c (thumb_analyze_prologue): Fix instruction matching for ldrd (immediate).
2020-05-27Fix some duplicate test namesLuis Machado23-306/+475
While doing a testsuite run on aarch64-linux, I noticed a bunch of duplicated test name results. It annoyed me a little, so I decided to go ahead and fix the worst offenders. The following patch brings the duplicate test names down from 461 to 137. The remaining ones are mostly scattered across the testsuite, with 1 to 3 duplicates per testcase. We can fix those as we go. gdb/testsuite/ChangeLog: 2020-05-27 Luis Machado <luis.machado@linaro.org> * gdb.arch/aarch64-sighandler-regs.exp: Fix duplicated test names. * gdb.arch/aarch64-tagged-pointer.exp: Likewise. * gdb.arch/arm-disassembler-options.exp: Likewise. * gdb.arch/arm-disp-step.exp: Likewise. * gdb.arch/thumb-prologue.exp: Likewise. * gdb.base/async.exp: Likewise. * gdb.base/auxv.exp: Likewise. * gdb.base/complex-parts.exp: Likewise. * gdb.base/ena-dis-br.exp: Likewise. * gdb.base/foll-exec.exp: Likewise. * gdb.base/permissions.exp: Likewise. * gdb.base/relocate.exp: Likewise. * gdb.base/return2.exp: Likewise. * gdb.base/sigbpt.exp: Likewise. * gdb.base/siginfo-obj.exp: Likewise. * gdb.cp/converts.exp: Likewise. * gdb.cp/exceptprint.exp: Likewise. * gdb.cp/inherit.exp: Likewise. * gdb.cp/nsnoimports.exp: Likewise. * gdb.cp/virtbase2.exp: Likewise. * gdb.mi/mi-var-cmd.exp: Likewise. * gdb.mi/var-cmd.c: Likewise.
2020-05-26Ensure class_tui is listed in the output of "help" giving the list of classes.Philippe Waroquiers3-1/+13
Before this change, "help" was not showing the TUI class. With this change: (gdb) help ... support -- Support facilities. text-user-interface -- TUI is the GDB text based interface. tracepoints -- Tracing of program execution without stopping the program. ... (gdb) help text-user-interface TUI is the GDB text based interface. In TUI mode, GDB can display several text windows showing the source file, the processor registers, the program disassembly, ... List of commands: + -- Scroll window forward. ... Note that we cannot use "tui" for the fake class command name, as "tui" is a command. gdb/ChangeLog 2020-05-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> * command.h: Add comment giving the name of class_tui. * cli/cli-cmds.c (_initialize_cli_cmds): If TUI defined, create the fake command for the help for class_tui.
2020-05-26Handle indexing Ada arrays with enum indicesTom Tromey9-85/+86
In Ada, like C, an enum can assign values to the constants. However, unlike C (or any other language supported by gdb), the enum type can also be used as the range of an array. In this case, the user's code references the enum constants, but the compiler translates these to the position of the constant in the enum. So for example one might write: type Enum_With_Gaps is ( LIT0, LIT1, LIT2, LIT3, LIT4 ); for Enum_With_Gaps use ( LIT0 => 3, LIT1 => 5, LIT2 => 8, LIT3 => 13, LIT4 => 21 ); Then index an array like "array(LIT3)" -- but this will be the 4th element in an array of 5 elements, not the 13th element in an array of 19 (assuming I did the math right) elements. gdb supports this to some degree, with the only missing piece being indexing into such an array. This patch implements this missing feature, and also fixes an existing bug, which is that in some situations I believe gdb would mis-compute the resulting array's length. The approach taken here is to try to integrate this feature into the core of gdb. My view is that much of the Ada support should be better integrated with gdb, rather than being "on the side". This, I think, would help avoid code duplication at least. So, I try to take steps toward this goal when possible. Because other languages generally don't allow the user to specify the index type of an array, I simply made the core of gdb unconditionally apply discrete_position when computing the range of such an array. This is a no-op for ordinary types, but applies the enum value-to-position transformation for TYPE_CODE_ENUM. gdb/ChangeLog 2020-05-26 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_print_array_index): Change type. Call val_atr. (ada_value_ptr_subscript): Don't call pos_atr on the lower bound. (val_atr): New function. (value_val_atr): Use it. * ada-valprint.c (print_optional_low_bound): Change low bound handling for enums. (val_print_packed_array_elements): Don't call discrete_position. * gdbtypes.c (get_discrete_bounds) <TYPE_CODE_RANGE>: Call discrete_position for enum types. * language.c (default_print_array_index): Change type. * language.h (struct language_defn) <la_print_array_index>: Add index_type parameter, change type of index_value. (LA_PRINT_ARRAY_INDEX): Add index_type parameter. (default_print_array_index): Update. * valprint.c (maybe_print_array_index): Don't call value_from_longest. Update. (value_print_array_elements): Don't call discrete_position. gdb/testsuite/ChangeLog 2020-05-26 Tom Tromey <tromey@adacore.com> * gdb.ada/arr_acc_idx_w_gap.exp: Add tests.
2020-05-26Fix bugs in 'val and 'pos with range typesTom Tromey7-2/+28
In Ada, the 'val and 'pos attributes can be used to map from an enumeration constant to its position in the enum and vice versa. These operators did not work properly when the type in question was a subrange of an enum type with "holes". gdb/ChangeLog 2020-05-26 Tom Tromey <tromey@adacore.com> * ada-lang.c (value_val_atr): Handle TYPE_CODE_RANGE. * gdbtypes.c (discrete_position): Handle TYPE_CODE_RANGE. gdb/testsuite/ChangeLog 2020-05-26 Tom Tromey <tromey@adacore.com> * gdb.ada/arr_acc_idx_w_gap.exp: Add enum subrange tests. * gdb.ada/arr_acc_idx_w_gap/enum_with_gap.ads (Enum_Subrange): New type. * gdb.ada/arr_acc_idx_w_gap/enum_with_gap_main.adb (V): New variable.
2020-05-26Use = instead of == for better portabilityChristian Biesinger via Gdb-patches2-2/+7
Reported by sobukus on IRC. gdb/testsuite/ChangeLog: 2020-05-26 Christian Biesinger <cbiesinger@google.com> * Makefile.in: Use = instead of == for the test command for portability. Change-Id: I431ccfa5e5ba15f9af082ffd6aa8cd7046456cd2
2020-05-26[gdb/testsuite] Add test-case gold-gdb-index.expTom de Vries5-0/+132
There's a PR binutils/15646 - "gold-generated .gdb_index has duplicated symbols that gdb-generated index doesn't", and gdb contains a workaround, added in commit 8943b87476 "Work around gold/15646". Add a test-case testing this workaround. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-05-26 Tom de Vries <tdevries@suse.de> * gdb.base/gold-gdb-index-2.c: New test. * gdb.base/gold-gdb-index.c: New test. * gdb.base/gold-gdb-index.exp: New file. * gdb.base/gold-gdb-index.h: New test.
2020-05-25[gdb/testsuite] Add target board gold-gdb-indexTom de Vries2-0/+49
Add new target board that uses gold to add a .gdb_index section, enabled by -ggnu-pubnames. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-05-25 Tom de Vries <tdevries@suse.de> * boards/gold-gdb-index.exp: New file.
2020-05-25gdb: make avr_integer_to_address generate code or data address based on typeCristiano De Alti2-1/+11
The AVR architecture is a Harvard one, meaning it has different memory spaces for code and data. In GDB, this is dealt with by having the data (SRAM) addresses start at 0x00800000. When interpreting an integer as an address (converting to a CORE_ADDR), we currently always generate a data address. This doesn't work for some cases described below, where the integer is meant to represent a code address. This patch changes avr_integer_to_address so that it generates the correct type of address (code or data) based on the passed type. Using the simavr.exp board, I didn't see any regressions when running the gdb.base/*.exp tests. A few tests go from fail to pass, but none from pass to fail. There are a few new fails and unresolved, but it's just because some tests manage to make more progress before failing in a different way. In practice, it fixes disassembling by address, as described in the PR: - (gdb) disassemble 0x12a,0x12b - Dump of assembler code from 0x12a to 0x12b: - 0x0000012a <main+0>: push r28 - End of assembler dump. + (gdb) disassemble 0x12a,0x12b + Dump of assembler code from 0x80012a to 0x80012b: + 0x0080012a: nop + End of assembler dump. And also, setting a breakpoint by address: - (gdb) p &main - $1 = (int (*)(void)) 0x12a <main> - (gdb) b *0x12a - Breakpoint 1 at 0x80012a + (gdb) p &main + $1 = (int (*)(void)) 0x12a <main> + (gdb) b *0x12a + Breakpoint 1 at 0x12a: file test-avr.c, line 3. + Note: automatically using hardware breakpoints for read-only addresses. gdb/ChangeLog: PR gdb/13519 * avr-tdep.c (avr_integer_to_address): Return data or code address accordingly to the second 'type' argument of the function. Change-Id: Iaea1587d053e86f4ab8aebdcabec8d31a6d262cd
2020-05-25gdb/testsuite: add simavr.exp boardSimon Marchi2-0/+99
This patch adds a board file for against a simavr target (so, for the AVR architecture). simavr, when started with option -g, runs a GDB stub on port 1234. In the current latest release (1.6), the port is hardcoded to 1234. But in master, there is the option to choose another port. So while the board file hardcodes the port today, in the future it should be possible to let the user choose a port, or automatically select a free port. It is easy enough to run, make sure you have avr-gcc/avr-g++ and simavr installed, and as usual just run: make check RUNTESTFLAGS="--target_board=simavr" The following environment variables influence the behavior of the board file: - SIMAVR_MCU: type of chip to simulate - SIMAVR_PATH: path to simavr binary (useful if you build your own simavr or for some reason it is not simply called `simavr`. As expected, there are a lot of failures. Many tests use some features not supported by such a target, and I suppose there are real GDB bugs too. But a lot also passes (including tests that actually run stuff), so this board file should still help to validate changes to the AVR architecture support. These are the results I got of running tests gdb.base/*.exp: # of expected passes 20926 # of unexpected failures 2257 # of expected failures 14 # of unknown successes 1 # of known failures 13 # of unresolved testcases 592 # of untested testcases 156 # of unsupported tests 30 # of paths in test names 3 # of duplicate test names 56 gdb/testsuite/ChangeLog: * boards/simavr.exp: New file. Change-Id: Ib7fa8c4e2e90b08b104bb9b552df37779de3bc21
2020-05-25gdb/testsuite: add inferior arguments testSimon Marchi4-8/+169
Add a test for verifying different methods of passing arguments to the inferior: the start, starti and run commands, as well as `set args`. All these methods work naturally when using the unix or native-extended-gdbserver target boards. Since those are non-stub boards, GDB runs new inferiors and therefore pass arguments to them. With target boards where GDB connects to a stub, for example with native-gdbserver, they don't really make sense. The inferior process is already started when GDB connects. However, the "run" method is still tested with stub targets, because the gdb_run_cmd procedure is adapted for stub targets. Instead of issuing the `run` command, it spawns whatever program is supposed to bring up the stub (gdbserver, for example) using gdb_reload and makes GDB connect to it. So this allows us to exercise argument passing through the gdbserver command line, when testing with the native-gdbserver board. Note that there is already a gdb.base/args.exp, but this tests specifically the --args switch of GDB. Perhaps it could be integrated in this new test, as a new "method". gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_run_cmd): Return success or failure. * gdb.base/inferior-args.exp: New file. * gdb.base/inferior-args.c: New file. Change-Id: Ib61ea6220a47f9f67aed2960dcacd240cb57af70
2020-05-25gdb/testsuite: support passing inferior arguments with native-gdbserver boardSimon Marchi8-24/+62
This patch makes it possible to run tests requiring passing arguments to the inferior with the native-gdbserver board. The end goal is to write a test that verifies passing arguments to the inferior works, and to have that test exercise inferior arguments passed on the gdbserver command line, when using the native-gdbserver target board (in addition to the other boards). This is done in the next patch. With the native-gdbserver target board, gdbserver is started in gdb_reload (implemented in config/gdbserver.exp), called in gdb_run_cmd. gdb_run_cmd already supposedly accepts inferior arguments (although that feature does not seem to be used anywhere), which it passes to the `run` command, for non-stub target boards. I've changed gdb_run_cmd so that it forwards these arguments to gdb_reload as well. gdb_reload passes them to gdbserver_run, and they eventually make their way to the gdbserver command line. gdb_run_cmd currently accepts `args` (the varargs of tcl), which means it receives inferior arguments as a list. This won't work with arguments with spaces, because they will end up being formatted with curly braces like this: % set args [list hello "with spaces" world] hello {with spaces} world % puts "run $args" run hello {with spaces} world I've changed it to accept a single string that is passed to `run` and gdb_reload. I've done the same change in gdb_start_cmd and gdb_starti_cmd, although these two are not used with native-gdbserver. I've changed all gdb_reload implementations in the tree to accept a new inferior_args argument, although most of them don't do anything with it (and don't need to). People maintaining target boards out of tree will need to do the same. I found two tests to adjust to avoid adding new failures or errors. These tests needed new [use_gdb_stub] checks, because they rely on having GDB run new processes. These are guarded by a [target_info exists noargs], which made them get skipped on native-gdbserver. But now that the native-gdbserver board supports args, this is no longer enough. Note that with this change, noargs and use_gdb_stub are orthogonal. It took me a moment to grasp this, so I thought I would spell out the different possible situations: - !noargs and !use_gdb_stub: inferior process started by gdb, can pass args - noargs and !use_gdb_stub: inferior process started by gdb (perhaps through extended-remote protocol, the simulator, some other target), but that target doesn't support inferior arguments - noargs and use_gdb_stub: inferior process started by some other program to which GDB connects using the remote protocol, that program does not support passing args to the inferior process - !noargs and use_gdb_stub: inferior process started by some other program to which GDB connects u sing the remote protocol, that program supports passing args to the inferior process gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_run_cmd): Change argument from args to inferior_args. Pass it to gdb_reload. (gdb_start_cmd, gdb_starti_cmd): Change argument from args to inferior_args. (gdb_reload): Add inferior_args argument. * config/gdbserver.exp (gdb_reload): Add inferior_args argument, pass it to gdbserver_run. * boards/native-gdbserver.exp: Do not set noargs. * boards/native-extended-gdbserver.exp (gdb_reload): Add inferior_args argument. * boards/stdio-gdbserver-base.exp (gdb_reload): Likewise. * gdb.base/a2-run.exp: Check for use_gdb_stub. * gdb.base/args.exp: Likewise. Change-Id: Ibda027c71867157852f34700342ab31edf39e4d8
2020-05-25gdbsupport: Let construct_inferior_arguments take gdb::array_view paramMichael Weghorn1-2/+3
Adapt the construct_inferior_arguments function to take a gdb::array_view<char * const> parameter instead of a char * array and an int indicating the length and adapt the only call site. This will allow calling it more simply in a follow-up patch introducing more uses of the function. gdbsupport/ChangeLog: * common-inferior.cc, common-inferior.h (construct_inferior_arguments): Adapt to take a gdb::array_view<char * const> parameter. Adapt call site. Change-Id: I1c6496c8c0b0eb3ef3fda96e9e3bd64c5e6cac3c
2020-05-25gdbsupport: Adapt construct_inferior_argumentsMichael Weghorn1-6/+3
Allow construct_inferior_arguments to handle zero args and have it return a std::string, similar to how stringify_argv in gdbsupport/common-utils does. Also, add a const qualifier for the second parameter, since it is only read, not written to. The intention is to replace existing uses of stringify_argv by construct_inferior_arguments in a subsequent step, since construct_inferior_arguments properly handles special characters, while stringify_argv doesn't. gdbsupport/ChangeLog: * common-inferior.cc, common-inferior.h (construct_inferior_arguments): Adapt to handle zero args and return a std::string. Adapt call site. Change-Id: I126c4390a1018c7527b0b8fd545252ab8a5a7adc
2020-05-25gdb: Move construct_inferior_arguments to gdbsupportMichael Weghorn3-126/+5
This moves the function construct_inferior_arguments from gdb/inferior.h and gdb/infcmd.c to gdbsupport/common-inferior.{h,cc}. While at it, also move the function's comment to the header file to align with current standards. The intention is to use it from gdbserver in a follow-up commit. gdb/ChangeLog: * infcmd.c, inferior.h: (construct_inferior_arguments): Moved function from here to gdbsupport/common-inferior.{h,cc} gdbsupport/ChangeLog: * common-inferior.h, common-inferior.cc: (construct_inferior_arguments): Move function here from gdb/infcmd.c, gdb/inferior.h Change-Id: Ib9290464ce8c0872f605d8829f88352d064c30d6
2020-05-25[gdb/testsuite] Add comment in exec_is_pieTom de Vries2-0/+7
Add comment to exec_is_pie explaining why readelf -d output is not used. gdb/testsuite/ChangeLog: 2020-05-25 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (exec_is_pie): Add comment.
2020-05-25[gdb/testsuite] Fix var use in compile_and_download_n_jit_soTom de Vries2-1/+6
In commit 1b59ca1cf1 "[gdb/testsuite] Fix tcl error in jit-elf-helpers.exp", I introduced a variable f in compile_and_download_n_jit_so, to be used in the untested message, but actually variable binfile was used instead: ... + set f [file tail $binfile] + untested "failed to compile shared library $binfile" ... Fix this by using $f in the untested message. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-05-25 Tom de Vries <tdevries@suse.de> * lib/jit-elf-helpers.exp (compile_and_download_n_jit_so): Use $f instead of $binfile in the untested message.
2020-05-25[gdb/testsuite] Fix exec_is_pie with gold linkerTom de Vries2-2/+8
When running test-case gdb.base/break-interp.exp with target board gold, we run into: ... gdb compile failed, pie failed to generate PIE executable ... The problem is that the proc exec_is_pie uses the PIE flag in the readelf -d output, which doesn't seem to be set by the gold linker. Instead, use the "Type" field in the readelf -h output. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-05-25 Tom de Vries <tdevries@suse.de> PR testsuite/26031 * lib/gdb.exp (exec_is_pie): Test readelf -h output.
2020-05-25[gdb/testsuite] Add target board goldTom de Vries2-0/+36
Add a target board that uses the gold linker. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-05-25 Tom de Vries <tdevries@suse.de> * boards/gold.exp: New file.
2020-05-24Revert "Add completion styling"Tom Tromey10-148/+32
This reverts commit eca1f90cf47a2edc1a1cd22e12c6c0f3b900654e. Several changes were requested, and it seemed simplest to revert it. gdb/ChangeLog 2020-05-23 Tom Tromey <tom@tromey.com> Revert commit eca1f90c: * NEWS: Remove entry for completion styling. * completer.c (_rl_completion_prefix_display_length): Move declaration later. (gdb_fnprint): Revert. (gdb_display_match_list_1): Likewise. * cli/cli-style.c (completion_prefix_style) (completion_difference_style, completion_suffix_style): Remove. (_initialize_cli_style): Revert. * cli/cli-style.h (completion_prefix_style) (completion_difference_style, completion_suffix_style): Don't declare. gdb/doc/ChangeLog 2020-05-23 Tom Tromey <tom@tromey.com> * gdb.texinfo (Output Styling): Don't mention completion styling. (Editing): Don't mention readline completion styling. gdb/testsuite/ChangeLog 2020-05-23 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Remove completion styling test. * lib/gdb-utils.exp (style): Remove completion styles.
2020-05-24gdb: make gdbarch.sh write gdbarch.{c,h} directlySimon Marchi3-55/+8
It was suggested in this thread [1] that gdbarch.sh should write to gdbarch.h and gdbarch.c directly. This patch implements that. When running gdbarch.sh, we currently need to move new-gdbarch.c over gdbarch.c and new-gdbarch.h over gdbarch.h. It might have been useful at some point to not have gdbarch.sh overwrite gdbarch.h and gdbarch.c, but with git it's really unnecessary. Any changes to gdbarch.sh can be inspected using `git diff`. A next step would be to have the Makefile automatically run gdbarch.sh if it sees that gdbarch.c and gdbarch.h are out of date. Or maybe even remove gdbarch.c and gdbarch.h from the tree and generate them in the build directory when building. But that requires more thinking and discussions, and I think that this change is already useful in itself. [1] https://sourceware.org/pipermail/gdb-patches/2020-May/168265.html gdb/ChangeLog; * gdbarch.sh: Write to gdbarch.c/gdbarch.h directly. Don't compare old and new versions. (compare_new): Remove. Change-Id: I7970a9e8af0afc0145cb5a28e73d94fbaa1e25b9
2020-05-24Don't remove C++ aliases from completions if symbol doesn't matchPedro Alves3-7/+19
completion_list_add_symbol currently tries to remove C++ function aliases from the completions match list even if the symbol passed down wasn't successfully added to the completion list because it didn't match. I.e., we call cp_canonicalize_string_no_typedefs for each and every C++ function in the program, which is useful work. This patch skips that useless work. gdb/ChangeLog: 2020-05-24 Pedro Alves <palves@redhat.com> * symtab.c (completion_list_add_name): Return boolean indication of whether the symbol matched. (completion_list_add_symbol): Don't try to remove C++ aliases if the symbol didn't match in the first place. * symtab.h (completion_list_add_name): Return bool.
2020-05-23gdb: remove TYPE_FIELD macroSimon Marchi31-81/+84
Replace all uses of it by type::field. Note that since type::field returns a reference to the field, some spots are used to assign the whole field structure. See ctfread.c, function attach_fields_to_type, for example. This is the same as was happening with the macro, so I don't think it's a problem, but if anybody sees a really nicer way to do this, now could be a good time to implement it. gdb/ChangeLog: * gdbtypes.h (TYPE_FIELD): Remove. Replace all uses with type::field.
2020-05-23Document the GDB 9.2 release in gdb/ChangeLogJoel Brobecker1-0/+4
gdb/ChangeLog: GDB 9.2 released.