Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce func_static_var_operation
This adds class func_static_var_operation, which implements
OP_FUNC_STATIC_VAR.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class func_static_var_operation): New.
* eval.c (eval_op_func_static_var): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce var_entry_value_operation
This adds class var_entry_value_operation, which implements
OP_VAR_ENTRY_VALUE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class var_entry_value_operation): New.
* eval.c (eval_op_var_entry_value): No longer static.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce var_msym_value_operation
This adds class var_msym_value_operation, which implements
OP_VAR_MSYM_VALUE. A new method is added to class operation in order
to support a special case in minsym evaluation.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expression.h (class operation) <set_outermost>: New method.
* expop.h (class var_msym_value_operation): New.
* eval.c (eval_op_var_msym_value): No longer static.
(var_msym_value_operation::evaluate_for_address)
(var_msym_value_operation::evaluate_for_sizeof)
(var_msym_value_operation::evaluate_for_cast): New methods.
* ax-gdb.c (var_msym_value_operation::do_generate_ax): New
method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce long_const_operation
This adds class long_const_operation, which holds a scalar constant.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class long_const_operation): New.
* ax-gdb.c (long_const_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce scope_operation
This adds class scope_operation, an implementation of OP_SCOPE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class scope_operation): New.
* eval.c (eval_op_scope): No longer static.
(scope_operation::evaluate_for_address): New method.
* ax-gdb.c (scope_operation::do_generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce float_const_operation
This adds class float_const_operation, an operation holding a
floating-point constant. Unlike most other new operations, this one
requires a custom 'dump' method.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expprint.c (float_const_operation::dump): New method.
* expop.h (float_data): New typedef.
(class float_const_operation): New.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Add two agent expression helper functions
This adds a couple of agent expression helper functions that will be
useful when implementing various operations.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (gen_expr_binop, gen_expr_structop): Declare.
* ax-gdb.c (gen_expr_binop): New function.
(gen_expr_structop): Likewise.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Implement dumping
This patch implements the dumping methods for tuple_holding_operation.
A number of overloads are used. Note that no default case is given.
This approach makes it simple to detect when a new overload is needed
-- compilation will fail. (There is an example of this in a later
patch in the series.)
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expprint.c (expr::dump_for_expression): New functions.
* expop.h (dump_for_expression): New overloads.
(tuple_holding_operation::dump, tuple_holding_operation::do_dump):
Update.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Introduce class operation
This patch introduces class operation, the new base class for all
expression operations.
In the new approach, an operation is simply a class that presents a
certain interface. Operations own their operands, and management is
done via unique_ptr.
The operation interface is largely ad hoc, based on the evolution of
expression handling in GDB. Parts (for example,
evaluate_with_coercion) are probably redundant; however I took this
approach to try to avoid mixing different kinds of refactorings.
In some specific situations, rather than add a generic method across
the entire operation class hierarchy, I chose instead to use
dynamic_cast and specialized methods on certain concrete subclasses.
This will appear in some subsequent patches.
One goal of this work is to avoid the kinds of easy-to-make errors
that affected the old implementation. To this end, some helper
subclasses are also added here. These helpers automate the
implementation of the 'dump', 'uses_objfile', and 'constant_p'
methods. Nearly every concrete operation that is subsequently added
will use these facilities. (Note that the 'dump' implementation is
only outlined here, the body appears in the next patch.)
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* expression.h (expr::operation): New class.
(expr::make_operation): New function.
(expr::operation_up): New typedef.
* expop.h: New file.
* eval.c (operation::evaluate_for_cast)
(operation::evaluate_for_address, operation::evaluate_for_sizeof):
New methods.
* ax-gdb.c (operation::generate_ax): New method.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split gen_expr_binop_rest
This splits gen_expr_binop_rest into two overloads. One overload
retains the "pc" parameter, while the other does not, and furthermore
does not call gen_expr on the left-hand-side. This split is useful
for subsequent patches in the new expression evaluation approach.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* ax-gdb.c (gen_expr_binop_rest): Remove "pc" parameter.
(gen_expr_binop_rest): New overload.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_multi_subscript
This splits MULTI_SUBSCRIPT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_multi_subscript): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_binop_exp
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Change value_val_atr to ada_val_atr
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_binop_minmax
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_unop_atr
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_binop_in_bounds
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_ternop_slice
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_equal_binop
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_mult_binop
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_abs
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_atr_size
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_atr_tag
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_unop_in_range
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out ada_unop_neg
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_ternop_in_range
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.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_opencl_assign
This splits BINOP_ASSIGN into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* opencl-lang.c (eval_opencl_assign): New function.
(evaluate_subexp_opencl): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_objc_msgcall
This splits OP_OBJC_MSGCALL into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_objc_msgcall): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_binop_assign_modify
This splits BINOP_ASSIGN_MODIFY into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_binop_assign_modify): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_m2_subscript
This splits BINOP_SUBSCRIPT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* m2-lang.c (eval_op_m2_subscript): New function.
(evaluate_subexp_modula2): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_m2_high
This splits UNOP_HIGH into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* m2-lang.c (eval_op_m2_high): New function.
(evaluate_subexp_modula2): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split helper functions
This splits a couple of address-of and sizeof functions, so that the
body can be reused by the (coming) new expression code.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (evaluate_subexp_for_address_base): New function.
(evaluate_subexp_for_address): Use it.
(evaluate_subexp_for_sizeof_base): New function.
(evaluate_subexp_for_sizeof): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_rust_structop
This splits STRUCTOP_STRUCT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (eval_op_rust_structop): New function.
(rust_evaluate_subexp): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_rust_struct_anon
This splits STRUCTOP_ANONYMOUS into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (eval_op_rust_struct_anon): New function.
(rust_evaluate_subexp): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_rust_array
This splits OP_ARRAY into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (eval_op_rust_array): New function.
(rust_evaluate_subexp): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_rust_complement
This splits UNOP_COMPLEMENT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (eval_op_rust_complement): New function.
(rust_evaluate_subexp): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_rust_ind
This splits UNOP_IND into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (eval_op_rust_ind): New function.
(rust_evaluate_subexp): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Change parameters to rust_subscript
This changes the parameters to rust_subscript, making it more suitable
for reuse by the (coming) new expression code. In particular,
rust_subscript no longer evaluates its subexpressions. Instead, they
are passed in.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (rust_subscript): Change parameters.
(rust_evaluate_subexp): Update.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Change parameters to rust_range
This changes the parameters to rust_range, making it more suitable for
reuse by the (coming) new expression code. In particular, rust_range
no longer evaluates its subexpressions. Instead, they are passed in.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* rust-lang.c (rust_range): Change parameters.
(rust_evaluate_subexp): Update.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_f_allocated
This splits out a helper function, eval_op_f_allocated, that will be
used in a later patch.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_allocated): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out fortran_require_array
This splits out a helper function, fortran_require_array, that will be
used in a later patch.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (fortran_require_array): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_f_kind
This splits UNOP_FORTRAN_KIND into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_kind): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_f_cmplx
This splits BINOP_FORTRAN_CMPLX into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_cmplx): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_f_modulo
This splits BINOP_FORTRAN_MODULO into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_modulo): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_f_floor
This splits UNOP_FORTRAN_FLOOR into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_floor): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_f_ceil
This splits UNOP_FORTRAN_CEILING into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_ceil): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_f_mod
This splits BINOP_MOD into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_mod): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_f_abs
This splits UNOP_ABS into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* f-lang.c (eval_op_f_abs): New function.
(evaluate_subexp_f): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_type
This splits OP_TYPE into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_type): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_postdec
This splits UNOP_POSTDECREMENT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_postdec): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_postinc
This splits UNOP_POSTINCREMENT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_postinc): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_predec
This splits UNOP_PREDECREMENT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_predec): New file.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_preinc
This splits UNOP_PREINCREMENT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_preinc): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_memval
This splits UNOP_MEMVAL into a new function for future use. This new
function is also used to hande UNOP_MEMVAL_TYPE.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_memval): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_alignof
This splits UNOP_ALIGNOF into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_alignof): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_ind
This splits UNOP_IND into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_ind): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_lognot
This splits UNOP_LOGICAL_NOT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_lognot): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_complement
This splits UNOP_COMPLEMENT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_complement): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_neg
This splits UNOP NEG into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_neg): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_plus
This splits UNOP_PLUS into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_plus): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_repeat
This splits BINOP_REPEAT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_repeat): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_leq
This splits BINOP_LEQ into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_leq): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_geq
This splits BINOP_GEQ into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_geq): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_gtr
This splits BINOP_GTR into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_gtr): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_less
This splits BINOP_LESS into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_less): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_notequal
This splits BINOP_NOTEQUAL into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_notequal): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_equal
This splits BINOP_EQUAL into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_equal): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_subscript
This splits BINOP_SUBSCRIPT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_subscript): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_binary
This splits out a new eval_op_binary helper function. This function
can handle several different binary operations:
case BINOP_EXP:
case BINOP_MUL:
case BINOP_DIV:
case BINOP_INTDIV:
case BINOP_REM:
case BINOP_MOD:
case BINOP_LSH:
case BINOP_RSH:
case BINOP_BITWISE_AND:
case BINOP_BITWISE_IOR:
case BINOP_BITWISE_XOR:
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_binary): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_sub
This splits BINOP_SUB into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_sub): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_add
This splits BINOP_ADD into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_add): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_member
This splits STRUCTOP_MEMBER into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_member): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_structop_ptr
This splits STRUCTOP_PTR into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_structop_ptr): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_structop_struct
This splits STRUCTOP_STRUCT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_structop_struct): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_ternop
This splits TERNOP_SLICE into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_ternop): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_concat
This splits BINOP_CONCAT into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_concat): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_objc_selector
This splits OP_OBJC_SELECTOR into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_objc_selector): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_string
This splits OP_STRING into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_string): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_register
This splits OP_REGISTER into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_register): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_func_static_var
This splits OP_FUNC_STATIC_VAR into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_func_static_var): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_var_msym_value
This splits OP_VAR_MSYM_VALUE into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_var_msym_value): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_var_entry_value
This splits OP_VAR_ENTRY_VALUE into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_var_entry_value): New function.
(evaluate_subexp_standard): Use it.
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)]
Split out eval_op_scope
This splits OP_SCOPE into a new function for future use.
gdb/ChangeLog
2021-03-08 Tom Tromey <tom@tromey.com>
* eval.c (eval_op_scope): New function.
(evaluate_subexp_standard): Use it.
Mike Frysinger [Mon, 8 Mar 2021 05:30:31 +0000 (00:30 -0500)]
sim: delete unused BUILD_LIBS setting
This hasn't been initialized anywhere for years. It used to be for
passing in the path to libiberty, but that stopped happening long ago.
Delete it to simplify the build logic.
Mike Frysinger [Mon, 8 Mar 2021 03:01:47 +0000 (22:01 -0500)]
sim: igen: update options API
This local macro doesn't take any args, so adjust the API to match.
No one really noticed as this is behind code that is not normally
built, only when a dev specifically tries to compile it.
GDB Administrator [Mon, 8 Mar 2021 00:00:26 +0000 (00:00 +0000)]
Automatic date update in version.in
Jeff Law [Sun, 7 Mar 2021 23:03:49 +0000 (16:03 -0700)]
Regenerated
Mike Frysinger [Sun, 17 Jan 2021 16:13:37 +0000 (11:13 -0500)]
sim: testsuite: merge into toplevel automake
This allows us to delete most of our custom test logic,
and avoids a recursive make for minor speed up.
Mike Frysinger [Sun, 17 Jan 2021 11:17:36 +0000 (06:17 -0500)]
sim: switch top level to automake
This doesn't gain us much by itself, but it sets us up for using more
features as we try to unify ports and avoid recursive make.
GDB Administrator [Sun, 7 Mar 2021 00:00:23 +0000 (00:00 +0000)]
Automatic date update in version.in
Tom Tromey [Sat, 6 Mar 2021 16:38:26 +0000 (09:38 -0700)]
Fix build bug in ada-lang.c
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.
Tom Tromey [Sat, 6 Mar 2021 16:26:39 +0000 (09:26 -0700)]
Move dwarf2_get_dwz_file to dwarf2/dwz.h
This moves dwarf2_get_dwz_file and some helper code to dwarf2/dwz.h.
The main benefit of this is just shrinking dwarf2/read.c a little bit.
gdb/ChangeLog
2021-03-06 Tom Tromey <tom@tromey.com>
* dwarf2/sect-names.h (dwarf2_elf_names): Declare.
* dwarf2/read.h (dwarf2_get_dwz_file): Move to dwz.h.
* dwarf2/read.c (dwarf2_elf_names): No longer static.
(locate_dwz_sections, dwz_search_other_debugdirs)
(dwarf2_get_dwz_file): Move to dwz.c.
* dwarf2/dwz.h (dwarf2_get_dwz_file): Move declaration from
read.h.
* dwarf2/dwz.c (locate_dwz_sections, dwz_search_other_debugdirs)
(dwarf2_get_dwz_file): Move from read.c.
Tom Tromey [Sat, 6 Mar 2021 16:26:39 +0000 (09:26 -0700)]
Include scoped_fd.h in debuginfod-support.h
debuginfod-support.h requires scoped_fd, so include the header here.
gdb/ChangeLog
2021-03-06 Tom Tromey <tom@tromey.com>
* debuginfod-support.h: Include scoped_fd.h.
Tom Tromey [Sat, 6 Mar 2021 16:26:39 +0000 (09:26 -0700)]
Avoid crash on missing dwz file
If DWARF contains a reference to a "dwz" file, but there is no
.gnu_debugaltlink section, then gdb will crash. This happens because
dwarf2_get_dwz_file will return NULL, but some callers do not expect
this.
This patch changes dwarf2_get_dwz_file so that callers can require a
dwz file. Then, it updates the callers that are attempting to process
references to the dwz file to require one.
This includes a new testcase. The dwarf.exp changes don't handle the
new forms exactly correctly -- they are only handled well enough to
let this test case complete.
gdb/ChangeLog
2021-03-06 Tom Tromey <tom@tromey.com>
* dwarf2/read.h (dwarf2_get_dwz_file): Add 'require' parameter.
* dwarf2/read.c (dwarf2_get_dwz_file): Add 'require' parameter.
(get_abbrev_section_for_cu, read_attribute_value)
(get_debug_line_section): Update.
* dwarf2/macro.c (dwarf_decode_macro_bytes): Update.
gdb/testsuite/ChangeLog
2021-03-06 Tom Tromey <tom@tromey.com>
* lib/dwarf.exp (_handle_DW_FORM): Treat DW_FORM_GNU_ref_alt and
DW_FORM_GNU_strp_alt like DW_FORM_sec_offset.
* gdb.dwarf2/dwznolink.exp: New file.
Tom Tromey [Sat, 6 Mar 2021 16:26:39 +0000 (09:26 -0700)]
Change section_is_p to a method on dwarf2_section_names
This replaces section_is_p with a method on dwarf2_section_names.
gdb/ChangeLog
2021-03-06 Tom Tromey <tom@tromey.com>
* dwarf2/sect-names.h (struct dwarf2_section_names) <matches>: New
method.
* dwarf2/read.c (section_is_p): Remove.
(dwarf2_per_bfd::locate_sections)
(dwarf2_per_bfd::locate_sections, locate_dwz_sections)
(locate_v1_virtual_dwo_sections, dwarf2_locate_dwo_sections)
(dwarf2_locate_common_dwp_sections)
(dwarf2_locate_v2_dwp_sections, dwarf2_locate_v5_dwp_sections):
Update.
Tom Tromey [Sat, 6 Mar 2021 16:26:39 +0000 (09:26 -0700)]
Create new file dwarf2/sect-names.h
This creates a new file, dwarf2/sect-names.h, and moves some
DWARF-specific type definitions from symfile.h into it.
gdb/ChangeLog
2021-03-06 Tom Tromey <tom@tromey.com>
* xcoffread.c: Include sect-names.h.
* symfile.h (struct dwarf2_section_names, struct
dwarf2_debug_sections): Move to dwarf2/sect-names.h.
* dwarf2/sect-names.h: New file, from symfile.h.
* dwarf2/read.c: Include sect-names.h.
Tom Tromey [Sat, 6 Mar 2021 16:16:59 +0000 (09:16 -0700)]
Micro-optimize abbrev reading and storage
Currently, and abbrev_info points to a separately allocated array of
attr_abbrev objects. This array is constructed in a temporary vector,
then copied to the abbrev table's obstack.
This patch changes abbrev_info to use the struct hack to store the
objects directly, and changes abbrev_table::read to avoid an extra
copy when allocating, using the "growing objects" capability of
obstacks.
This saves a bit of space, and also perhaps a little time.
2021-03-06 Tom Tromey <tom@tromey.com>
* dwarf2/read.c (read_attribute): Make 'abbrev' const.
* dwarf2/abbrev.c (abbrev_table::alloc_abbrev): Remove.
(abbrev_table::read): Update.
* dwarf2/abbrev.h (struct attr_abbrev): Move earlier.
(struct abbrev_info): Reformat.
<attrs>: Now an array.
(struct abbrev_table) <alloc_abbrev>: Remove.
H.J. Lu [Sat, 6 Mar 2021 02:24:56 +0000 (18:24 -0800)]
elf/x86-64: Subtract __ImageBase for R_AMD64_IMAGEBASE
When linking Windows x86-64 relocatable object files to generate x86-64
ELF executable, we need to subtract __ImageBase, aka __executable_start,
for R_AMD64_IMAGEBASE relocation:
1. Add link_info to struct output_elf_obj_tdata to store linker info and
_bfd_get_link_info() to retrieve it.
2. Add ldelf_set_output_arch to set up link_info.
3. Add pex64_link_add_symbols to create an indirect reference to
__executable_start for __ImageBase to support R_AMD64_IMAGEBASE relocation
when adding symbols from Windows x86-64 relocatable object files to
generate x86-64 ELF executable.
4. Also subtract __ImageBase for R_AMD64_IMAGEBASE when generating x86-64
ELF executable.
bfd/
PR ld/27425
PR ld/27432
* bfd.c (_bfd_get_link_info): New function.
* elf-bfd.h (output_elf_obj_tdata): Add link_info.
(elf_link_info): New.
* libbfd-in.h (_bfd_get_link_info): New prototype.
* coff-x86_64.c (coff_amd64_reloc): Also subtract __ImageBase for
R_AMD64_IMAGEBASE when generating x86-64 ELF executable.
* pe-x86_64.c: Include "coff/internal.h" and "libcoff.h".
(pex64_link_add_symbols): New function.
(coff_bfd_link_add_symbols): New macro.
* libbfd.h: Regenerated.
ld/
PR ld/27425
PR ld/27432
* ldelf.c (ldelf_set_output_arch): New function.
* ldelf.h (ldelf_set_output_arch): New prototype.
* emultempl/elf.em (LDEMUL_SET_OUTPUT_ARCH): Default to
ldelf_set_output_arch.
* ld-x86-64/pe-x86-64-1.od: Expect __executable_start.
* testsuite/ld-x86-64/pe-x86-64-2.od: Likewise.
* testsuite/ld-x86-64/pe-x86-64-3.od: Likewise.
* testsuite/ld-x86-64/pe-x86-64-4.od: Likewise.
* testsuite/ld-x86-64/pe-x86-64-5.od: Likewise.
* testsuite/ld-x86-64/pe-x86-64-5.rd: Likewise.
* testsuite/ld-x86-64/pe-x86-64-6.obj.bz2: New file.
* testsuite/ld-x86-64/pe-x86-64-6.od: Likewise.
* testsuite/ld-x86-64/pe-x86-64.exp: Run ld/27425 test.
Mark Wielaard [Sat, 6 Mar 2021 00:49:27 +0000 (01:49 +0100)]
Make valgrind tests more robust by adding --wait=1 to vgdb invocation
On my setup some valgrind tests failed somewhat reliably because
the target remote | vgdb command couldn't find the vgdb-pipe files
because valgrind startup hadn't finished yet.
I tried to fix this by replacing the "Memcheck, a memory error detector"
match to "TO DEBUG THIS PROCESS USING GDB: start GDB like this" which is
right before valgrind creates the vgdb-pipe files. But even that didn't
guarantee that the vgdb-pipe files were there (maybe valgrind should
print that text after it has created them?). But also not all tests
use --vgdb-error=0, so the text isn't always printed.
To make the tests reliable I added --wait=1 to the vgdb invocation.
That tells vgdb to try to find the vgdb-pipe files, and if they aren't
there yet, to wait 1 second and try again.
gdb/testsuite/ChangeLog:
* lib/valgrind.exp (vgdb_start): Add --wait=1 to vgdbcmd.
Weimin Pan [Sat, 6 Mar 2021 00:17:00 +0000 (19:17 -0500)]
CTF: add all members of an enum type to psymtab
With the following change which was made last April:
[gdb] Use partial symbol table to find language for main
commit
d3214198119c1a2f9a6a2b8fcc56d8c324e1a245
The ctf reader was modified to enter all members of an enum type,
similar to what the dwarf2 reader did, into the psymtab or gdb
won't be able to find them. In addition, the empty name checking
needed to be moved down so members of a unnamed enum were not left
out.
gdb/ChangeLog:
* ctfread.c (ctf_psymtab_add_enums): New function.
(ctf_psymtab_type_cb): call ctf_psymtab_add_enums.
Weimin Pan [Fri, 5 Mar 2021 23:31:26 +0000 (18:31 -0500)]
CTF: set up debug info for function arguments
Added this support in read_func_kind_type after gcc started generating
CTF for function arguments.
Replaced XNEW with std::vector and NULL with nullptr.
Expanded gdb.base/ctf-ptype.exp to test function arguments. Also fixed
some typos.
gdb/ChangeLog:
* ctfread.c (read_func_kind_type): Set up function arguments.
gdb/testsuite/ChangeLog:
* gdb.base/ctf-ptype.exp: Add function tests and fix typos.