aboutsummaryrefslogtreecommitdiff
path: root/gdb/ada-lang.c
AgeCommit message (Collapse)AuthorFilesLines
2021-03-08Convert ada-exp.y to use operationsTom Tromey1-6/+2
This converts the Ada parser to generate operations rather than exp_elements. This was the most difficult of the parser conversions, partly due to the decision to integrate Ada expression resolution into the parse, and partly due to Ada aggregregate assignment. A couple of new per-parse globals are introduced, along with a number of helper functions. Resolution is done in 'ada_pop', yielding the unfortunate rule that ada-exp.y should generally not use parser_state::pop (exceptions are marked). gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-exp.y: Create operations. (empty_stoken): Remove. (ada_pop, ada_wrap, ada_addrof, ada_un_wrap2, ada_wrap2) (ada_wrap_op, ada_wrap3, ada_funcall): New functions. (components): New global. (push_component, choice_component, pop_component, pop_components): New functions. (associations): New global (push_association, pop_association, pop_associations): New functions. (ada_parse): Update. (write_var_from_sym, write_int): Create operations. (write_exp_op_with_string): Remove. (write_object_renaming, write_selectors, write_ambiguous_var) (write_var_or_type, write_name_assoc): Create operations. * ada-lang.h (ada_index_type): Declare. * ada-lang.c (ada_index_type): No longer static.
2021-03-08Remove use of op_stringTom Tromey1-1/+14
After switching to the new expression implementation, there will no need for op_string. Before deleting it, the one call outside of the expression-printing code must be removed. That is what this patch does. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_value_binop): Do not use op_string.
2021-03-08Implement Ada assignmentTom Tromey1-0/+340
Assignment is the most complicated Ada expression, because implementing aggregate assignment involves several specialized opcodes. This patch does this implementation by introducing new abstract classes that are used to represent the various parts of aggregate assignment. This makes the code somewhat cleaner, and, by avoiding the over-use of 'operation' subclasses, avoids the need for dissection using dynamic_cast (though a few are still needed here). I believe this patch fixes a latent bug in the handling of aggregate_assign_from_choices. That code does: if (op == OP_DISCRETE_RANGE) { choice_pos += 1; lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos, EVAL_NORMAL)); upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos, EVAL_NORMAL)); } However, I think 'choice_pos' should be used in the calls, rather than 'pos'. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * expprint.c (dump_for_expression): New overload. * expop.h (check_objfile, dump_for_expression): Declare new overloads. * ada-lang.c (check_objfile): New overload. (assign_component, ada_aggregate_component::uses_objfile) (ada_aggregate_component::dump, ada_aggregate_component::assign) (ada_aggregate_component::assign_aggregate) (ada_positional_component::uses_objfile) (ada_positional_component::dump, ada_positional_component::assign) (ada_discrete_range_association::uses_objfile) (ada_discrete_range_association::dump) (ada_discrete_range_association::assign) (ada_name_association::uses_objfile, ada_name_association::dump) (ada_name_association::assign) (ada_choices_component::uses_objfile, ada_choices_component::dump) (ada_choices_component::assign) (ada_others_component::uses_objfile, ada_others_component::dump) (ada_others_component::assign, ada_assign_operation::evaluate): New methods. * ada-exp.h (ada_string_operation) <get_name>: New method. (class ada_assign_operation): New. (class ada_component): New. (ada_component_up): New typedef. (class ada_aggregate_operation, class ada_aggregate_component) (class ada_positional_component, class ada_others_component) (class ada_association): New. (ada_association_up): New typedef. (class ada_choices_component) (class ada_discrete_range_association) (class ada_name_association): New.
2021-03-08Implement Ada resolutionTom Tromey1-0/+79
Ada has a parser post-pass that implements "resolution". This process replaces some opcodes with function calls. For example, a "+" operation might be replaced with a call to the appropriate overloaded function. This differs from the approach taken for the same problem in C++. However, in this series I chose not to try to make changes outside of rewrite the expression data structure. So, resolution remains. The new approach to resolution is to introduce an interface class, that some concrete operations implement. Then, the Ada code will use this to resolve the expression tree. Because new-style expressions are built as ordinary objects, and don't require rewriting the data structure in place, in the new code this processing will be done in the parser. By the end of the series, some special cases in this area that exist only for Ada will be removed. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_var_value_operation::resolve) (ada_funcall_operation::resolve) (ada_ternop_slice_operation::resolve): New methods. * ada-exp.h (struct ada_resolvable): New. (class ada_var_value_operation): Derive from ada_resolvable. <get_block, resolve>: New methods. (class ada_funcall_operation): Derive from ada_resolvable. <resolve>: New method. (class ada_ternop_slice_operation): Derive from ada_resolvable. <resolve>: New method.
2021-03-08Implement function calls for AdaTom Tromey1-0/+142
This implements function calls for Ada. This takes a different approach than that used for other languages, primarily because Ada requires special treatment generally. The "ordinary" special case for just the callee didn't really apply neatly here; there's only one case in Ada needing special callee treatment. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_funcall_operation::evaluate): New method. * ada-exp.h (class ada_var_msym_value_operation) <get_symbol>: New method. (class ada_funcall_operation): New.
2021-03-08Introduce ada_structop_operationTom Tromey1-0/+42
This adds class ada_structop_operation, which implements STRUCTOP_STRUCT for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_structop_operation::evaluate): New method. * ada-exp.h (class ada_structop_operation): New.
2021-03-08Introduce ada_unop_ind_operationTom Tromey1-0/+85
This adds class ada_unop_ind_operation, which implements UNOP_IND for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_ind_operation::evaluate): New method. * ada-exp.h (class ada_unop_ind_operation): New.
2021-03-08Introduce ada_binop_exp_operationTom Tromey1-1/+1
This adds class ada_binop_exp_operation, which implements BINOP_EXP for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_exp): No longer static. * ada-exp.h (ada_binop_exp_operation): New typedef.
2021-03-08Introduce ada_atr_val_operationTom Tromey1-1/+10
This adds class ada_atr_val_operation, which implements OP_ATR_VAL. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_val_atr): No longer static. (ada_atr_val_operation::evaluate): New method. * ada-exp.h (class ada_atr_val_operation): New.
2021-03-08Introduce ada_pos_operationTom Tromey1-1/+1
This adds class ada_pos_operation, a new typedef that implements OP_ATR_POS. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_pos_atr): No longer static. * ada-exp.h (ada_pos_operation): New typedef.
2021-03-08Refactor value_pos_atrTom Tromey1-8/+8
This refactors value_pos_atr to be directly usable by a new operation implementation. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_pos_atr): Rename from value_pos_atr. Change parameters. (ada_evaluate_subexp): Use it.
2021-03-08Implement Ada min and max operationsTom Tromey1-1/+1
This implement the Ada min and max operations using an existing template class. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_minmax): No longer static. * ada-exp.h (ada_binop_min_operation, ada_binop_max_operation): New typedefs.
2021-03-08Introduce ada_var_msym_value_operationTom Tromey1-0/+25
This adds class ada_var_msym_value_operation, which implements OP_VAR_MSYM_VALUE for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_var_msym_value_operation::evaluate_for_cast): New method. * ada-exp.h (class ada_var_msym_value_operation): New.
2021-03-08Introduce ada_var_value_operationTom Tromey1-0/+112
This adds class ada_var_value_operation, which implements OP_VAR_VALUE for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_var_value_operation::evaluate_for_cast) (ada_var_value_operation::evaluate): New methods. * ada-exp.h (class ada_var_value_operation): New.
2021-03-08Implement some Ada OP_ATR_ operationsTom Tromey1-0/+21
This implements a few Ada OP_ATR_ operations. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_atr_operation::evaluate): New method. * ada-exp.h (class ada_unop_atr_operation): New.
2021-03-08Introduce ada_binop_in_boundsTom Tromey1-1/+1
This adds class ada_binop_in_bounds, which implements BINOP_IN_BOUNDS. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_in_bounds): No longer static. * ada-exp.h (class ada_binop_in_bounds_operation): New.
2021-03-08Introduce ada_ternop_sliceTom Tromey1-1/+1
This adds class ada_ternop_slice, which implements TERNOP_SLICE for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_ternop_slice): No longer static. * ada-exp.h (class ada_ternop_slice_operation): New.
2021-03-08Implement Ada equality operatorsTom Tromey1-1/+1
This implements the Ada equal and not-equal operators. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_equal_binop): No longer static. * ada-exp.h (class ada_binop_equal_operation): New.
2021-03-08Implement Ada multiplicative operatorsTom Tromey1-1/+1
This implements the Ada multiplicative operators, using an existing template class. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_mult_binop): No longer static. * ada-exp.h (ada_binop_mul_operation ada_binop_div_operation) (ada_binop_rem_operation, ada_binop_mod_operation): New typedefs.
2021-03-08Introduce ada_binop_addsub_operationTom Tromey1-0/+40
This adds class ada_binop_addsub_operation, which implements the Ada + and - operators. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_addsub_operation::evaluate): New method. * ada-exp.h (class ada_binop_addsub_operation): New.
2021-03-08Split out some Ada type resolution codeTom Tromey1-99/+144
This splits some Ada type resolution code out of resolve_subexp into new functions that can be reused. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall) (ada_resolve_variable): Declare. * ada-lang.c (ada_find_operator_symbol, ada_resolve_funcall) (ada_resolve_variable): New functions. (resolve_subexp): Update.
2021-03-08Introduce ada_unop_range_operationTom Tromey1-1/+1
This adds class ada_unop_range_operation, which implements UNOP_IN_RANGE. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_in_range): No longer static. * ada-exp.h (class ada_unop_range_operation): New.
2021-03-08Implement some Ada unary operationsTom Tromey1-4/+4
This implements a few Ada unary operations, using the existing unop_operation template class. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_neg, ada_atr_tag, ada_atr_size, ada_abs): No longer static. * ada-exp.h (ada_neg_operation, ada_atr_tag_operation) (ada_atr_size_operation, ada_abs_operation): New typedefs.
2021-03-08Introduce ada_ternop_range_operationTom Tromey1-0/+11
This adds class ada_ternop_range_operation, which implements TERNOP_IN_RANGE. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_ternop_range_operation::evaluate): New method. * ada-exp.h (class ada_ternop_range_operation): New.
2021-03-08Introduce ada_qual_operationTom Tromey1-0/+9
This adds class ada_qual_operation, which implements UNOP_QUAL. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_qual_operation::evaluate): New method. * ada-exp.h (class ada_qual_operation): New.
2021-03-08Introduce ada_string_operationTom Tromey1-0/+13
This adds class ada_string_operation, which implements string constants for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_string_operation::evaluate): New method. * ada-exp.h (class ada_string_operation): New.
2021-03-08Introduce ada_wrapped_operationTom Tromey1-0/+29
This adds class ada_wrapped_operation, which is used to wrap some generic operations with a bit of Ada-specific handling. This corresponds to the old "default" case in ada_evaluate_subexp. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_wrapped_operation::evaluate): New method. * ada-exp.h: New file.
2021-03-08Split out ada_binop_expTom Tromey1-13/+24
This splits BINOP_EXP into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_exp): New function. (ada_evaluate_subexp): Use it.
2021-03-08Change value_val_atr to ada_val_atrTom Tromey1-7/+5
This renames value_val_atr to ada_val_atr, changing its parameters to more closely mirror other expression helpers. The EVAL_AVOID_SIDE_EFFECTS case is moved into this function as well. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_val_atr): Rename from value_val_atr. Change parameters. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_binop_minmaxTom Tromey1-8/+19
This splits OP_ATR_MIN and OP_ATR_MAX into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_minmax): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_atrTom Tromey1-116/+128
This splits some Ada attribute operations into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_atr): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_binop_in_boundsTom Tromey1-22/+31
This splits BINOP_IN_BOUNDS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_in_bounds): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_ternop_sliceTom Tromey1-70/+83
This splits TERNOP_SLICE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_ternop_slice): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_equal_binopTom Tromey1-11/+23
This splits BINOP_EQUAL and BINOP_NOTEQUAL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_equal_binop): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_mult_binopTom Tromey1-11/+22
This splits BINOP_MUL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_mult_binop): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_absTom Tromey1-5/+16
This splits UNOP_ABS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_abs): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_atr_sizeTom Tromey1-15/+26
This splits OP_ATR_SIZE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_atr_size): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_atr_tagTom Tromey1-5/+15
This splits OP_ATR_TAG into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_atr_tag): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_in_rangeTom Tromey1-27/+38
This splits UNOP_IN_RANGE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_in_range): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_negTom Tromey1-7/+15
This splits UNOP_NEG into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_neg): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out eval_ternop_in_rangeTom Tromey1-12/+22
This splits TERNOP_IN_RANGE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (eval_ternop_in_range): New function. (ada_evaluate_subexp): Use it.
2021-03-06Fix build bug in ada-lang.cTom Tromey1-2/+2
An earlier patch of mine introduced a build failure in ada-lang.c. A couple of "to_string" calls were not namespace-qualified. In the failing setup, the std string_view is being used, and so (apparently) ADL doesn't find gdb::to_string. This patch, from the bug, fixes the problem. gdb/ChangeLog 2021-03-06 Chernov Sergey <klen_s@mail.ru> PR gdb/27528: * ada-lang.c (ada_fold_name): Use gdb::to_string.
2021-03-04Use "bool" in ada-lang.cTom Tromey1-10/+10
Christian suggested switching an "int" in ada-lang.c to "bool" instead. This patch makes this change. Tested on x86-64 Fedora 32. gdb/ChangeLog 2021-03-04 Tom Tromey <tromey@adacore.com> * ada-lang.c (struct match_data) <found_sym>: Now bool. (aux_add_nonlocal_symbols): Update. (ada_add_block_symbols): Change "found_sym" to bool.
2021-03-03Minor Ada-related cleanupsTom Tromey1-16/+18
This patch addresses some review comments that I forgot to deal with in an earlier patch. See the comments here: https://sourceware.org/pipermail/gdb-patches/2021-February/176278.html For the most part this is fixing up comments, but it also includes adding a constructor and initializers to "match_data". Regression tested on x86-64 Fedora 32. gdb/ChangeLog 2021-03-03 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_resolve_function): Update comment. (is_nonfunction, add_symbols_from_enclosing_procs) (remove_extra_symbols): Likewise. (struct match_data): Add constructor, initializers. (add_nonlocal_symbols): Remove memset. (aux_add_nonlocal_symbols): Update comment. (ada_add_block_renamings, add_nonlocal_symbols) (ada_add_all_symbols): Likewise. * ada-exp.y (write_var_or_type): Clean up trailing whitespace.
2021-03-02Rewrite GNAT-encoded fixed point types in DWARF readerTom Tromey1-150/+2
gdb currently supports two different styles of fixed-point. The original style, where fixed point types are "GNAT encoded", is handled primarily in the Ada code. The newer style, encoded using DWARF, is handled by the core of gdb. This patch changes gdb to read the GNAT encodings in the DWARF reader as well. This removes some code and unifies the two paths. As a result, GNAT-encoded fixed-point now works a bit better. One possible drawback of this change is that, if someone uses stabs, then fixed-point might now stop working. I consider stabs to be fully obsolete, though, so I don't intend to address this. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (cast_from_gnat_encoded_fixed_point_type) (cast_to_gnat_encoded_fixed_point_type): Remove. (ada_value_cast, ada_evaluate_subexp): Update. (gnat_encoded_fixed_point_type_info) (ada_is_gnat_encoded_fixed_point_type) (gnat_encoded_fixed_point_delta) (gnat_encoded_fixed_point_scaling_factor): Remove. * ada-lang.h (ada_is_gnat_encoded_fixed_point_type) (gnat_encoded_fixed_point_delta) (gnat_encoded_fixed_point_scaling_factor): Don't declare. * ada-typeprint.c (print_gnat_encoded_fixed_point_type): Remove. (ada_print_type): Update. * ada-valprint.c (ada_value_print_num): Update. * dwarf2/read.c (ada_get_gnat_encoded_number) (ada_get_gnat_encoded_ratio): New functions. (finish_fixed_point_type): Use them. Add parameters. (GNAT_FIXED_POINT_SUFFIX): New define. (gnat_encoded_fixed_point_type_info): New function. (read_base_type): Handle gnat encodings. gdb/testsuite/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * gdb.ada/fixed_points.exp: Remove most special cases for minimal encodings.
2021-03-02Use std::string rather than grow_vectTom Tromey1-76/+26
This removes the "GROW_VECT" macro and helper function in favor of simply using std::string in a few spots. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_fold_name, ada_variant_discrim_name) (ada_enum_name, scan_discrim_bound, to_fixed_range_type): Use std::string. (GROW_VECT): Remove. (grow_vect): Remove.
2021-03-02Return a vector from ada_lookup_symbol_listTom Tromey1-183/+116
This changes ada_lookup_symbol_list to return a std::vector, and changes various other helper functions to follow. This simplifies the code, and makes it more type-safe (by using a vector where an obstack had been used). gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.h (ada_lookup_symbol_list): Return a vector. * ada-lang.c (resolve_subexp): Update. (ada_resolve_function): Accept a vector. (is_nonfunction, add_defn_to_vec) (add_symbols_from_enclosing_procs): Likewise. (num_defns_collected, defns_collected): Remove. (remove_extra_symbols): Return a vector. (remove_irrelevant_renamings): Return void. (ada_add_local_symbols): Accept a vector. (struct match_data) <obstackp>: Remove. <resultp>: New member. (aux_add_nonlocal_symbols): Update. (ada_add_block_renamings, add_nonlocal_symbols) (ada_add_all_symbols): Accept a vector. (ada_lookup_symbol_list_worker, ada_lookup_symbol_list): Return a vector. (ada_lookup_symbol): Update. (ada_add_block_symbols): Accept a vector. (get_var_value, iterate_over_symbols): Update. * ada-exp.y (block_lookup, write_var_or_type, write_name_assoc): Update.
2021-03-02Simplify resolve_subexp by using C++ algorithmsTom Tromey1-29/+28
This changes resolve_subexp to use any_of and the erase-remove idiom to simplify the code somewhat. This simplifies the next patch a bit. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (resolve_subexp): Use any_of and erase-remove idiom.
2021-03-02Use new for ada_symbol_cacheTom Tromey1-40/+11
This changes the ada_symbol_cache to be allocated with 'new' and managed via unique_ptr. This simplifies the code somewhat. Also, ada_clear_symbol_cache is changed so that it does not allocate a symbol cache just to clear it. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (struct ada_symbol_cache) <cache_space>: Now an auto_obstack. <root>: Initialize. (ada_pspace_data): Remove destructor. <sym_cache>: Now a unique_ptr. (ada_init_symbol_cache, ada_free_symbol_cache): Remove. (ada_get_symbol_cache): Use 'new'. (ada_clear_symbol_cache): Rewrite.
2021-03-02Check objfile->sf in ada-lang.cTom Tromey1-7/+9
Most places in gdb that reference objfile->sf also check that it is not null. It is valid for it to be null, because find_sym_fns can return null for some kinds of object file. However, it's rare to encounter this scenario with Ada code. I only encountered it when looking at a fork of gdb that, I believe, makes its own objfiles without setting 'sf'. This patch changes ada-lang.c to check this field before using it. This avoids any potential crash here. There's no test case because I'm not even sure this is possible to trip over with an unmodified gdb. There are some other unchecked uses in gdb, but at a quick glance they all seem to be involved with symbol reading, which of course won't happen when sf==null. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (add_nonlocal_symbols): Handle case where objfile->sf is null.