aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-03-10x86: re-arrange order of decode for various VEX opcodesJan Beulich2-154/+104
The order of decodes influences the overall number of table entries. Reduce table size quite a bit by first decoding few-alternatives attributes common to all valid leaves.
2021-03-10x86: re-arrange order of decode for various legacy opcodesJan Beulich2-70/+43
The order of decodes influences the overall number of table entries. Reduce table size quite a bit by first decoding few-alternatives attributes common to all valid leaves.
2021-03-10x86: correct decoding of nop/reserved space (0f18 ... 0x1f)Jan Beulich10-64/+2433
All encodings not used in this range are (reserved) NOPs. Hence their decoding should be fully consistent. For this to work the PREFIX_IGNORED logic needs slightly extending, such that the attribute will also - have an effect when used inside prefix_table[], yet without always falling back to using slot 0, - cause prefixes marked as ignored while decoding through prefix_table[] to no longer be considered decoded, when encountered in a subsequent decoding step. In adjacent code also drop meaningless PREFIX_OPCODE.
2021-03-10bfd: strip symbols not representable in COFF/PE symbol tableJan Beulich6-4/+27
The offset-within-section field in the symbol table entry is only 32 bits wide, so rather than emitting bogus entries omit them, and issue a diagnostic identifying the issue. This requires adjusting the PR/22267 test to no longer produce symbols with out of range values on 64-bit BFD. This also depends on adjustments to testsuite/ld-scripts/map-address.* made by an earlier patch. The purpose of the test can very well be achieved nevertheless.
2021-03-10Automatic date update in version.inGDB Administrator1-1/+1
2021-03-10ELF DWARF in PE outputAlan Modra2-2/+21
* elf.c (bfd_elf_generic_reloc): Make references between debug sections use section relative values.
2021-03-09Fix function call regression in new evaluatorTom Tromey5-1/+94
The internal AdaCore test suite revealed a bug in the new evaluator. A hunk of evaluate_funcall was not correctly transcribed. This was not caught in my original testing because the feature in question was apparently not tested in gdb. This patch fixes the oversight. The idea here is that ordinary function calls should use the function's formal parameter types as the expected types of subexpressions. Regression tested on x86-64 Fedora 32. gdb/ChangeLog 2021-03-09 Tom Tromey <tromey@adacore.com> * eval.c (operation::evaluate_funcall): Use function formal parameter types when evaluating. gdb/testsuite/ChangeLog 2021-03-09 Tom Tromey <tromey@adacore.com> * gdb.base/cast-call.exp: New file. * gdb.base/cast-call.c: New file.
2021-03-09ld: adjust PE base relocations testcaseJan Beulich3-1/+15
mcore-pe and sh-pe pointed out that the testcase added by 6fa7408d72b3 ("ld: don't generate base relocations in PE output for absolute symbols") wasn't quite generic enough yet. Copy entry point stuff from another test and increase alignment to also cover targets with a page size lower than 4k. Despite all of this the test needs to be xfail-ed for mcore, as this target isn't included in the set getting DLL_SUPPORT enabled in emultempl/pe.em, and hence no base relocations get generated there (yet).
2021-03-09gdb: fix field names of GDB's type main_type structureAndrew Burgess4-3/+155
In commit: commit 5b7d941b90d1a232dc144dc14850dd2fb63c35da Date: Fri Jan 22 12:21:09 2021 -0500 gdb: add owner-related methods to struct type two fields of struct maint_type were renamed. 'flag_objfile_owned' became 'm_flag_objfile_owned' and 'owner' became 'm_owner'. Update our python helper script to take this into account. I've added a basic test that uses the self-test framework to load the pretty printers, and print a type. The test relies on stopping in GDB's `value_print` function. gdb/ChangeLog: * gdb-gdb.py.in (StructMainTypePrettyPrinter) <owner_to_string>: Updated fields names flag_objfile_owned to m_flag_objfile_owned, and owner to m_owner. gdb/testsuite/ChangeLog: * gdb.gdb/python-helper.exp: New file.
2021-03-09gdb/fortran: Add 'LOC' intrinsic support.Felix Willgerodt7-1/+51
LOC(X) returns the address of X as an integer: https://gcc.gnu.org/onlinedocs/gfortran/LOC.html Before: (gdb) p LOC(r) No symbol "LOC" in current context. After: (gdb) p LOC(r) $1 = 0xffffdf48 gdb/ChangeLog: 2021-03-09 Felix Willgerodt <felix.willgerodt@intel.com> * f-exp.h (eval_op_f_loc): Declare. (expr::fortran_loc_operation): New typedef. * f-exp.y (exp): Handle UNOP_FORTRAN_LOC after parsing an UNOP_INTRINSIC. (f77_keywords): Add LOC keyword. * f-lang.c (eval_op_f_loc): New function. * std-operator.def (UNOP_FORTRAN_LOC): New operator. gdb/testsuite/ChangeLog: 2020-03-09 Felix Willgerodt <felix.willgerodt@intel.com> * gdb.fortran/intrinsics.exp: Add LOC tests.
2021-03-09gdb/fotran: add support for the 'shape' keywordAndrew Burgess8-0/+277
Add support for the SHAPE keyword to GDB's Fortran expression parser. gdb/ChangeLog: * f-exp.h (eval_op_f_array_shape): Declare. (fortran_array_shape_operation): New type. * f-exp.y (exp): Handle UNOP_FORTRAN_SHAPE after parsing UNOP_INTRINSIC. (f77_keywords): Add "shape" keyword. * f-lang.c (fortran_array_shape): New function. (eval_op_f_array_shape): New function. * std-operator.def (UNOP_FORTRAN_SHAPE): New operator. gdb/testsuite/ChangeLog: * gdb.fortran/shape.exp: New file. * gdb.fortran/shape.f90: New file.
2021-03-09gdb/fortran: add support for 'SIZE' keywordAndrew Burgess8-0/+359
Add support for the 'SIZE' keyword to the Fortran expression parser. This returns the number of elements either in an entire array (passing a single argument to SIZE), or in a particular dimension of an array (passing two arguments to SIZE). At this point I have not added support for the optional third argument to SIZE, which controls the exact integer type of the result. gdb/ChangeLog: * f-exp.y (eval_op_f_array_size): Declare 1 and 2 argument forms of this function. (expr::fortran_array_size_1arg): New type. (expr::fortran_array_size_2arg): Likewise. * f-exp.y (exp): Handle FORTRAN_ARRAY_SIZE after parsing UNOP_OR_BINOP_INTRINSIC. (f77_keywords): Add "size" keyword. * f-lang.c (fortran_array_size): New function. (eval_op_f_array_size): New function, has a 1 arg and 2 arg form. * std-operator.def (FORTRAN_ARRAY_SIZE): New operator. gdb/testsuite/ChangeLog: * gdb.fortran/size.exp: New file. * gdb.fortran/size.f90: New file.
2021-03-09gdb/fortran: add support for RANK keywordAndrew Burgess8-0/+189
gfortran supports the RANK keyword, see: https://gcc.gnu.org/onlinedocs/gfortran/RANK.html#RANK this commit adds support for this keyword to GDB's Fortran expression parser. gdb/ChangeLog: * f-exp.h (eval_op_f_rank): Declare. (expr::fortran_rank_operation): New typedef. * f-exp.y (exp): Handle UNOP_FORTRAN_RANK after parsing an UNOP_INTRINSIC. (f77_keywords): Add "rank" keyword. * f-lang.c (eval_op_f_rank): New function. * std-operator.def (UNOP_FORTRAN_RANK): New operator. gdb/testsuite/ChangeLog: * gdb.fortran/rank.exp: New file. * gdb.fortran/rank.f90: New file.
2021-03-09x86: fold some prefix related attributes into a single oneJan Beulich7-7512/+7536
RepPrefixOk, HLEPrefixOk, and NoTrackPrefixOk can't be specified together, so can share an enum-like field. IsLockable can be inferred from HLE setting and hence only needs specifying when neither of them is present.
2021-03-09x86-64: make SYSEXIT handling similar to SYSRET'sJan Beulich16-10/+46
Despite SYSEXIT being an Intel-only insn in long mode, its behavior there is similar to SYSRET's: Depending on REX.W execution continues in either 64-bit or compatibility mode. Hence distinguishing by suffix is as necessary here as it is there.
2021-03-09bfd: don't silently wrap or truncate PE image section RVAsJan Beulich14-19/+69
In PE images section addresses get expressed as addresses relative to the image base. Therefore the VA of a section must be no less than the image base, and after subtraction of the image base the resulting value should fit in 32 bits. (The issue is particularly obvious to notice when sections, perhaps because of ELF assumptions, get placed at VA 0 by default. Debugging info sections as well as .comment, when input files are ELF, are a good example. All such sections need proper mentioning in the linker script to avoid this warning.) There are a number of test cases which previously produced bogus images, yet still declared the test a success. Like done for other tests already, force a zero image base for these. This then also allows (and requires) dropping again xfail-s which 39a7b38fac0e ("Fix linker tests to work with 16-bit targets") had added to ld-scripts/default-script*.d (originally as skip-s). This also depends on similar adjustments to testsuite/ld-scripts/map-address.* made by an earlier patch. For ld-scripts/print-memory-usage.* I suppose xcoff could be dropped from the exclusion list by suppressing garbage collection, just like already done in e.g. (as seen in the diff here) ld-scripts/data.*, but I didn't want to make unrelated adjustments.
2021-03-09Automatic date update in version.inGDB Administrator1-1/+1
2021-03-08Enable maintainer mode for simTom Tromey5-16/+80
The sim's recently switch to using Automake caused a build failure for me, because I didn't have the correct auto* tools in my path. However, the rule in the tree is that this is not needed in general. This patch adds a call to AM_MAINTAINER_MODE, to align the sim with the way the rest of the tree works here. sim/ChangeLog 2021-03-08 Tom Tromey <tromey@adacore.com> * aclocal.m4, configure, Makefile.in: Rebuild. * configure.ac: Use AM_MAINTAINER_MODE.
2021-03-08Remove some null checksTom Tromey3-16/+20
When not parsing for completion, parse_expression ensures that the resulting expression has operations. This patch removes a couple of unnecessary checks for this situation. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * printcmd.c (set_command): Remove null check. * value.c (init_if_undefined_command): Remove null check.
2021-03-08Use bound_minimal_symbol in var_msym_value_operationTom Tromey12-61/+61
This changes var_msym_value_operation to use a bound_minimal_symbol rather than separate minsym and objfile parameters. The main benefit of this is removing the possibly-confusing check_objfile overload for a plain minimal symbol. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parse.c (parser_state::push_symbol, parser_state::push_dollar): Update. * p-exp.y (variable): Update. * go-exp.y (variable): Update. * expprint.c (dump_for_expression): Use bound_minimal_symbol. Remove overload for objfile. * expop.h (eval_op_var_msym_value): Use bound_minimal_symbol parameter. (check_objfile): Likewise. (dump_for_expression): Likewise. Remove overload for objfile. (class var_msym_value_operation): Use bound_minimal_symbol. * eval.c (eval_op_var_msym_value): Use bound_minimal_symbol parameter. (var_msym_value_operation::evaluate_for_address) (var_msym_value_operation::evaluate_for_sizeof) (var_msym_value_operation::evaluate_for_cast): Update. * d-exp.y (PrimaryExpression): Update. * c-exp.y (variable): Update. * ax-gdb.c (var_msym_value_operation::do_generate_ax): Update. * ada-lang.c (ada_var_msym_value_operation::evaluate_for_cast): Update. * ada-exp.y (write_var_or_type): Update.
2021-03-08Change exp_uses_objfile to return boolTom Tromey3-5/+10
This change exp_uses_objfile to return bool. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parser-defs.h (exp_uses_objfile): Return bool. * parse.c (exp_uses_objfile): Return bool.
2021-03-08Remove EVAL_SKIPTom Tromey11-164/+56
EVAL_SKIP was needed in the old expression implementation due to its linearized tree structure. This is not needed in the new implementation, because it is trivial to not evaluate a subexpression. This patch removes the last vestiges of EVAL_SKIP. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * value.h (eval_skip_value): Don't declare. * opencl-lang.c (eval_opencl_assign): Update. * m2-lang.c (eval_op_m2_high, eval_op_m2_subscript): Update. * f-lang.c (eval_op_f_abs, eval_op_f_mod, eval_op_f_ceil) (eval_op_f_floor, eval_op_f_modulo, eval_op_f_cmplx): Remove. * expression.h (enum noside) <EVAL_SKIP>: Remove. * expop.h (typeof_operation::evaluate) (decltype_operation::evaluate, unop_addr_operation::evaluate) (unop_sizeof_operation::evaluate, assign_operation::evaluate) (cxx_cast_operation::evaluate): Update. * eval.c (eval_skip_value): Remove. (eval_op_scope, eval_op_var_entry_value) (eval_op_func_static_var, eval_op_string, eval_op_objc_selector) (eval_op_concat, eval_op_ternop, eval_op_structop_struct) (eval_op_structop_ptr, eval_op_member, eval_op_add, eval_op_sub) (eval_op_binary, eval_op_subscript, eval_op_equal) (eval_op_notequal, eval_op_less, eval_op_gtr, eval_op_geq) (eval_op_leq, eval_op_repeat, eval_op_plus, eval_op_neg) (eval_op_complement, eval_op_lognot, eval_op_ind) (eval_op_memval, eval_op_preinc, eval_op_predec) (eval_op_postinc, eval_op_postdec, eval_op_type) (eval_binop_assign_modify, eval_op_objc_msgcall) (eval_multi_subscript, logical_and_operation::evaluate) (logical_or_operation::evaluate, array_operation::evaluate) (operation::evaluate_for_cast) (var_msym_value_operation::evaluate_for_cast) (var_value_operation::evaluate_for_cast): Update. * c-lang.c (c_string_operation::evaluate): Update. * c-exp.h (objc_nsstring_operation::evaluate) (objc_selector_operation::evaluate): Update. * ada-lang.c (ada_assign_operation::evaluate) (eval_ternop_in_range, ada_unop_neg, ada_unop_in_range) (ada_atr_size): Update.
2021-03-08Merge namespace scopes in eval.cTom Tromey2-10/+4
The big deletion patch left some identical namespace scopes sitting next to one another. This patch removes the redundant "namespace expr"s. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c: Merge "namespace" scopes.
2021-03-08Inline expr_builder methodsTom Tromey3-16/+15
This inlines the expr_builder constructor and release method. These are straightforward, so this seemed simpler. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parser-defs.h (struct expr_builder) <expr_builder>: Inline. <release>: Inline. * parse.c (expr_builder::expr_builder, expr_builder::release): Remove.
2021-03-08Inline expression constructorTom Tromey3-12/+13
The struct expression constructor no longer does any real work, so this inlines it. The default destructor can also be used now as well. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parse.c (expression::expression, expression::~expression): Remove. * expression.h (struct expression): Inline constructor. Remove destructor.
2021-03-08Remove BINOP_ENDTom Tromey7-100/+107
BINOP_END is used only as a "meaningless" value in various tables. This patch changes these to use OP_NULL instead, and removes BINOP_END. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (BINOP_END): Remove. * p-exp.y (tokentab3, tokentab2): Use OP_NULL, not BINOP_END. * go-exp.y (tokentab2): Use OP_NULL, not BINOP_END. * f-exp.y (dot_ops, f77_keywords): Use OP_NULL, not BINOP_END. * d-exp.y (tokentab2, ident_tokens): Use OP_NULL, not BINOP_END. * c-exp.y (tokentab3, tokentab2, ident_tokens): Use OP_NULL, not BINOP_END.
2021-03-08Remove OP_UNUSED_LASTTom Tromey2-3/+4
OP_UNUSED_LAST is no longer needed with C++ -- the trailing comma is fine. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * expression.h (enum exp_opcode) <OP_UNUSED_LAST>: Remove.
2021-03-08Remove OP_EXTENDED0Tom Tromey2-4/+4
OP_EXTENDED0 was only used for an assertion in the code to rewrite an expression into prefix form. That code is gone, so this patch removes the constant. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_EXTENDED0): Remove.
2021-03-08Remove unused Ada opcodesTom Tromey2-43/+6
Several Ada expression opcodes are now unused, and can be removed. Most of these are handled in a different way by the code. OP_ATR_IMAGE, however, was never implemented. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_NAME, OP_ATR_IMAGE, OP_ATR_MODULUS) (OP_OTHERS, OP_CHOICES, OP_POSITIONAL, OP_DISCRETE_RANGE): Remove.
2021-03-08Remove unused Modula-2 opcodesTom Tromey2-9/+5
As noted in an earlier patch, Modula-2 defined some opcodes but then never implemented them. This patch removes the unnecessary constants. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (UNOP_CAP, UNOP_CHR, UNOP_ORD, UNOP_FLOAT) (UNOP_MAX, UNOP_MIN, UNOP_ODD, UNOP_TRUNC, OP_M2_STRING): Remove.
2021-03-08Remove two Ada opcodesTom Tromey4-6/+10
The OP_ATR_MIN and OP_ATR_MAX constants aren't truly needed. Internally, they are converted to BINOP_MIN and BINOP_MAX. This patch removes them in favor of simple reuse. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_ATR_MIN, OP_ATR_MAX): Remove. * ada-lang.c (ada_binop_minmax): Update. * ada-exp.h (ada_binop_min_operation, ada_binop_max_operation): Use BINOP_MIN and BINOP_MAX.
2021-03-08Remove union exp_elementTom Tromey33-5316/+147
This removes union exp_element functions that either create such elements or walk them. struct expression no longer holds exp_elements. A couple of language_defn methods are also removed, as they are obsolete. Note that this patch also removes the print_expression code. The only in-tree caller of this was from dump_prefix_expression, which is only called when expression debugging is enabled. Implementing this would involve a fair amount of code, and it seems to me that prefix dumping is preferable anyway, as it is unambiguous. So, I have not reimplemented this feature. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * value.h (evaluate_subexp_with_coercion): Don't declare. * parse.c (exp_descriptor_standard): Remove. (expr_builder::expr_builder, expr_builder::release): Update. (expression::expression): Remove size_t parameter. (expression::~expression): Simplify. (expression::resize): Remove. (write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym) (write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile) (write_exp_elt_longcst, write_exp_elt_floatcst) (write_exp_elt_type, write_exp_elt_intern, write_exp_string) (write_exp_string_vector, write_exp_bitstring): Remove. * p-lang.h (class pascal_language) <opcode_print_table, op_print_tab>: Remove. * p-lang.c (pascal_language::op_print_tab): Remove. * opencl-lang.c (class opencl_language) <opcode_print_table>: Remove. * objc-lang.c (objc_op_print_tab): Remove. (class objc_language) <opcode_print_table>: Remove. * m2-lang.h (class m2_language) <opcode_print_table, op_print_tab>: Remove. * m2-lang.c (m2_language::op_print_tab): Remove. * language.h (struct language_defn) <post_parser, expression_ops, opcode_print_table>: Remove. * language.c (language_defn::expression_ops) (auto_or_unknown_language::opcode_print_table): Remove. * go-lang.h (class go_language) <opcode_print_table, op_print_tab>: Remove. * go-lang.c (go_language::op_print_tab): Remove. * f-lang.h (class f_language) <opcode_print_table>: Remove <op_print_tab>: Remove. * f-lang.c (f_language::op_print_tab): Remove. * expression.h (union exp_element): Remove. (struct expression): Remove size_t parameter from constructor. <resize>: Remove. <first_opcode>: Update. <nelts, elts>: Remove. (EXP_ELEM_TO_BYTES, BYTES_TO_EXP_ELEM): Remove. (evaluate_subexp_standard, print_expression, op_string) (dump_raw_expression): Don't declare. * expprint.c (print_expression, print_subexp) (print_subexp_funcall, print_subexp_standard, op_string) (dump_raw_expression, dump_subexp, dump_subexp_body) (dump_subexp_body_funcall, dump_subexp_body_standard): Remove. (dump_prefix_expression): Update. * eval.c (evaluate_subexp): Remove. (evaluate_expression, evaluate_type): Update. (evaluate_subexpression_type): Remove. (fetch_subexp_value): Remove "pc" parameter. Update. (extract_field_op, evaluate_struct_tuple, evaluate_funcall) (evaluate_subexp_standard, evaluate_subexp_for_address) (evaluate_subexp_with_coercion, evaluate_subexp_for_sizeof) (evaluate_subexp_for_cast): Remove. (parse_and_eval_type): Update. * dtrace-probe.c (dtrace_probe::compile_to_ax): Update. * d-lang.c (d_op_print_tab): Remove. (class d_language) <opcode_print_table>: Remove. * c-lang.h (c_op_print_tab): Don't declare. * c-lang.c (c_op_print_tab): Remove. (class c_language, class cplus_language, class asm_language, class minimal_language) <opcode_print_table>: Remove. * breakpoint.c (update_watchpoint, watchpoint_check) (watchpoint_exp_is_const, watch_command_1): Update. * ax-gdb.h (union exp_element): Don't declare. * ax-gdb.c (const_var_ref, const_expr, maybe_const_expr) (gen_repeat, gen_sizeof, gen_expr_for_cast, gen_expr) (gen_expr_binop_rest): Remove. (gen_trace_for_expr, gen_eval_for_expr, gen_printf): Update. * ada-lang.c (ada_op_print_tab): Remove. (class ada_language) <post_parser, opcode_print_table>: Remove.
2021-03-08Remove now-unused C evaluator codeTom Tromey7-483/+14
Now that the C parser has switched to the new style, there is no need for the old C evaluation code. This affects some other languages that were relying on the C code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * go-lang.c (go_language::expression_ops): Don't declare. * go-lang.h (class go_language) <expression_ops>: Remove. * opencl-lang.c (evaluate_subexp_opencl, exp_descriptor_opencl): Remove. (class opencl_language) <expression_ops>: Remove. * d-lang.c (class d_language) <expression_ops>: Remove. * c-lang.h (evaluate_subexp_c, exp_descriptor_c): Don't declare. * c-lang.c (evaluate_subexp_c, exp_descriptor_c): Remove. (class c_language, class cplus_language, class asm_language) (class minimal_language) <expression_ops>: Remove.
2021-03-08Remove now-unused Ada evaluator codeTom Tromey2-1760/+19
Now that the Ada parser has switched to the new style, there is no need for the old Ada evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (resolve_subexp, replace_operator_with_call) (evaluate_subexp_type, assign_aggregate) (aggregate_assign_positional, aggregate_assign_from_choices) (aggregate_assign_others, ada_evaluate_subexp_for_cast) (ada_evaluate_subexp, ADA_OPERATORS, ada_operator_length) (ada_operator_check, ada_forward_operator_length) (ada_dump_subexp_body, ada_print_subexp, ada_exp_descriptor): Remove. (post_parser): Update. (class ada_language) <expresssion_ops>: Remove.
2021-03-08Remove now-unused Modula-2 evaluator codeTom Tromey3-43/+7
Now that the Modula-2 parser has switched to the new style, there is no need for the old Modula-2 evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * m2-lang.h (class m2_language) <expresssion_ops, exp_descriptor_modula2>: Remove. * m2-lang.c (evaluate_subexp_modula2) (m2_language::exp_descriptor_modula2): Remove.
2021-03-08Remove now-unused Fortran evaluator codeTom Tromey3-910/+10
Now that the Fortran parser has switched to the new style, there is no need for the old Fortran evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-lang.h (class f_language) <expresssion_ops>: Remove. <exp_descriptor_tab>: Remove. * f-lang.c (fortran_value_subarray, evaluate_subexp_f) (operator_length_f, print_unop_subexp_f, print_binop_subexp_f) (print_subexp_f, dump_subexp_body_f, operator_check_f) (f_language::exp_descriptor_tab, fortran_prepare_argument): Remove.
2021-03-08Remove now-unused Rust evaluator codeTom Tromey3-516/+13
Now that the Rust parser has switched to the new style, there is no need for the old Rust evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-lang.h (class rust_language) <expression_ops, exp_descriptor_tab>: Remove. * rust-lang.c (rust_evaluate_funcall): Remove. (rust_range, rust_subscript, eval_op_rust_complement): Don't use EVAL_SKIP. (rust_evaluate_subexp): Remove. (rust_aggregate_operation::evaluate): Don't use EVAL_SKIP. (rust_operator_length, rust_dump_subexp_body, rust_print_subexp) (rust_operator_check, rust_language::exp_descriptor_tab): Remove.
2021-03-08Convert ada-exp.y to use operationsTom Tromey4-209/+483
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-08Convert f-exp.y to use operationsTom Tromey4-136/+238
This converts the Fortran parser to generate operations rather than exp_elements. A couple of tests of expression debug dumping are updated to follow the new output. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * f-exp.y: Create operations. (f_language::parser): Update. gdb/testsuite/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * gdb.fortran/debug-expr.exp: Update tests.
2021-03-08Convert m2-exp.y to use operationsTom Tromey2-122/+117
This converts the Modula-2 parser to generate operations rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * m2-exp.y: Create operations. (m2_language::parser): Update.
2021-03-08Convert p-exp.y to use operationsTom Tromey2-142/+130
This converts the Pascal parser to generate operations rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * p-exp.y: Create operations. (pascal_language::parser): Update.
2021-03-08Convert d-exp.y to use operationsTom Tromey2-120/+134
This converts the D parser to generate operations rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * d-exp.y: Create operations. (d_parse): Update.
2021-03-08Convert go-exp.y to use operationsTom Tromey2-101/+117
This converts the Go parser to generate operations rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * go-exp.y: Create operations. (go_language::parser): Update.
2021-03-08Convert c-exp.y to use operationsTom Tromey5-310/+371
This converts the C parser to generate operations rather than exp_elements. One test needed a tweak in order to handle the different debugging output. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * objc-lang.c (end_msglist): Create operations. * c-exp.y: Change parser to create operations. (write_destructor_name): Remove. (c_parse): Update. gdb/testsuite/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * gdb.base/debug-expr.exp: Update expected dump output.
2021-03-08Convert rust-exp.y to use operationsTom Tromey2-144/+190
This converts the Rust parser to generate operations rather than exp_elements. The Rust parser already made its own AST, that it then lowered to GDB expressions. Ironically, this made conversion trickier, rather than simpler, than the other parsers, primarily due to the way that binary operations were lowered. Perhaps in the future, converting the Rust parser to directly create operations while parsing would be worthwhile. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * rust-exp.y: Create operations. (rust_parser::convert_params_to_expression): Change return type. (binop_maker_ftype): New typedef. (maker_map): New global. (rust_parser::convert_ast_to_expression): Change return type. (rust_language::parser): Update. (_initialize_rust_exp): Initialize maker_map.
2021-03-08Convert stap probes to create operationsTom Tromey10-291/+276
This changes the stap probe code to create operations, rather than exp_elements. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * stap-probe.c (binop_maker_ftype): New typedef. (stap_maker_map): New global. (stap_make_binop): New function. (stap_parse_register_operand): Return operation_up. (stap_parse_single_operand, stap_parse_argument_conditionally) (stap_parse_argument_1): Likewise. (stap_parse_argument): Create operations. (stap_probe::parse_arguments): Update. (_initialize_stap_probe): Initialize stap_maker_map. * ppc-linux-tdep.c (ppc_stap_parse_special_token): Change return type. * i386-tdep.h (i386_stap_parse_special_token): Change return type. * i386-tdep.c (i386_stap_parse_special_token_triplet) (i386_stap_parse_special_token_three_arg_disp) (i386_stap_parse_special_token): Change return type. * gdbarch.sh (stap_parse_special_token): Change return type. * gdbarch.c: Rebuild. * gdbarch.h: Rebuild. * arm-linux-tdep.c (arm_stap_parse_special_token): Change return type. * aarch64-linux-tdep.c (aarch64_stap_parse_special_token): Change return type.
2021-03-08Convert dtrace probes to use operationsTom Tromey6-38/+36
This changes dtrace to use the new operation type. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * gdbarch.sh (dtrace_parse_probe_argument): Change return type. * gdbarch.h: Rebuild. * gdbarch.c: Rebuild. * dtrace-probe.c (dtrace_probe::build_arg_exprs): Update. * amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Change return type. (amd64_dtrace_parse_probe_argument): Update.
2021-03-08Add operation-related methods to parser_stateTom Tromey3-0/+200
This adds several operation-related methods to parser_state. These methods make it more convenient to change the parsers to be operation-based. Because byacc has poor support for C++, a stack of operations is added to parser_state. A parser can push operations, then later pop them for combination into new operations. This approach avoids the memory leaks that would result if raw pointers were used in the parsers, at the cost of parser productions not being type-safe (they can't indicate that they return an operation). This also introduces analogs of some write_exp functions, like write_exp_string_vector, write_dollar_variable, and write_exp_symbol_reference. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parser-defs.h (struct parser_state) <push, push_new, push_c_string, push_symbol, push_dollar, pop, pop_vector, wrap, wrap2>: New methods. <m_operations>: New member. * parse.c (parser_state::push_c_string) (parser_state::push_symbol, parser_state::push_dollar): New methods.
2021-03-08Add completion for operationsTom Tromey3-2/+45
This patch adds the necessary support for field name completion for expressions using class operation. This patch takes an approach similar to what is done today. It might be good, in the future, to change completion to be a method on the base class, to enable context-sensitive completion in more areas. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parser-defs.h (struct expr_completion_state) <expout_last_op>: New member. (struct parser_state) <mark_struct_expression>: New method. * parse.c (parser_state::mark_struct_expression): Update assert. (parser_state::mark_struct_expression): New method. (parser_state::mark_completion_tag): Update assert. (parse_expression_for_completion): Handle expout_last_op.
2021-03-08Add an expr::operation_up to struct expressionTom Tromey17-57/+298
This adds an expr::operation_up to struct expression, and then modifies various parts of GDB to use this member when it is non-null. The list of such spots was a bit surprising to me, and found only after writing most of the code and then noticing what no longer compiled. In a few spots, new accessor methods are added to operation subclasses, so that code that dissects an expression will work with the new scheme. After this change, code that constructs an expression can be switched to the new form without breaking. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-exp.h (class ada_var_value_operation) <get_symbol>: Remove; now in superclass. * value.h (fetch_subexp_value): Add "op" parameter. * value.c (init_if_undefined_command): Update. * tracepoint.c (validate_actionline, encode_actions_1): Update. * stap-probe.c (stap_probe::compile_to_ax): Update. * printcmd.c (set_command): Update. * ppc-linux-nat.c (ppc_linux_nat_target::check_condition): Update. * parser-defs.h (struct expr_builder) <set_operation>: New method. * parse.c (parse_exp_in_context, exp_uses_objfile): Update. * expression.h (struct expression) <first_opcode>: Update. <op>: New member. * expprint.c (dump_raw_expression, dump_prefix_expression): Update. * expop.h (class var_value_operation) <get_symbol>: New method. (class register_operation) <get_name>: New method. (class equal_operation): No longer a typedef, now a subclass. (class unop_memval_operation) <get_type>: New method. (class assign_operation) <get_lhs>: New method. (class unop_cast_operation) <get_type>: New method. * eval.c (evaluate_expression, evaluate_type) (evaluate_subexpression_type): Update. (fetch_subexp_value): Add "op" parameter. (parse_and_eval_type): Update. * dtrace-probe.c (dtrace_probe::compile_to_ax): Update. * breakpoint.c (update_watchpoint, watchpoint_check) (watchpoint_exp_is_const, watch_command_1): Update. * ax-gdb.c (gen_trace_for_expr, gen_eval_for_expr, gen_printf): Update.