Commit Graph

31093 Commits

Author SHA1 Message Date
Simon Marchi
f058c5210f gdb: remove unneeded argument in check_multi_target_resumption
If we reach the modified line, resume_target is necessarily nullptr,
because of the check at the beginning of the function.  So we'll
necessarily iterate on all non-exited inferiors (across all targets),
which is what we want.  So just remove the unnecessary argument.

gdb/ChangeLog:

	* infrun.c (check_multi_target_resumption): Remove argument to
	all_non_exited_inferiors.

Change-Id: If95704915dca19599d5f7f4732bbd6ccd20bf6b4
2021-03-17 13:05:55 +00:00
Christian Biesinger
383228bc3f Fix cygwin build error
With "gcc version 10.2.0 (GCC)" on cygwin, I get this build error:
  CXX    windows-nat.o
In file included from ../../gdb/../gdbsupport/common-defs.h:129,
                 from ../../gdb/defs.h:28,
                 from ../../gdb/windows-nat.c:24:
../../gdb/windows-nat.c: In function 'void windows_init_thread_list()':
../../gdb/windows-nat.c:513:17: error: zero-length gnu_printf format string [-Werror=format-zero-length]
  513 |   DEBUG_EVENTS ("");
      |                 ^~
../../gdb/../gdbsupport/common-debug.h:65:43: note: in definition of macro 'debug_prefixed_printf_cond'
   65 |  debug_prefixed_printf (module, __func__, fmt, ##__VA_ARGS__); \
      |                                           ^~~
../../gdb/windows-nat.c:513:3: note: in expansion of macro 'DEBUG_EVENTS'
  513 |   DEBUG_EVENTS ("");
      |   ^~~~~~~~~~~~
cc1plus: all warnings being treated as errors

This was introduced in 4ef367bffd, which removed
the function name from this debug message:
-  DEBUG_EVENTS (("gdb: windows_init_thread_list\n"));
+  DEBUG_EVENTS ("");

DEBUG_EVENTS now always includes the function name, so just add a "called"
message to fix the compile error.

gdb/ChangeLog:

2021-03-16  Christian Biesinger  <cbiesinger@google.com>

	* windows-nat.c (windows_init_thread_list): Add message to
	debug log.
2021-03-16 10:49:37 -05:00
Andrew Burgess
7807d76a1c gdb/python: fix FrameDecorator regression on Python 2
This commit:

  commit d1cab9876d
  Date:   Tue Sep 15 11:08:56 2020 -0600

      Don't use gdb_py_long_from_ulongest

Introduced a regression when GDB is compiled with Python 2.  The frame
filter API expects the gdb.FrameDecorator.function () method to return
either a string (the name of a function) or an address, which GDB then
uses to lookup a msymbol.

If the address returned from gdb.FrameDecorator.function () comes from
gdb.Frame.pc () then before the above commit we would always expect to
see a PyLong object.

After the above commit we might (on Python 2) get a PyInt object.

The GDB code does not expect to see a PyInt, and only checks for a
PyLong, we then see an error message like:

  RuntimeError: FrameDecorator.function: expecting a String, integer or None.

This commit just adds an additional call to PyInt_Check which handle
the missing case.

I had already written a test case to cover this issue before spotting
that the gdb.python/py-framefilter.exp test also triggers this
failure.  As the new test case is slightly different I have kept it
in.

The new test forces the behaviour of gdb.FrameDecorator.function
returning an address.  The reason the existing test case hits this is
due to the behaviour of the builtin gdb.FrameDecorator base class.  If
the base class behaviour ever changed then the return an address case
would only be tested by the new test case.

gdb/ChangeLog:

	* python/py-framefilter.c (py_print_frame): Use PyInt_Check as
	well as PyLong_Check for Python 2.

gdb/testsuite/ChangeLog:

	* gdb.python/py-framefilter-addr.c: New file.
	* gdb.python/py-framefilter-addr.exp: New file.
	* gdb.python/py-framefilter-addr.py: New file.
2021-03-16 09:31:56 +00:00
Tom Tromey
675da9a57e Fix GDB build with GCC 4.8.2
PR build/27579 points out that the expression rewrite series
introduced a build failure with GCC 4.8.2.  The bug is that there's no
std::hash specialization for enum exp_opcode.  This patch fixes the
problem by using gdb::hash_enum.

2021-03-15  Tom Tromey  <tromey@adacore.com>

	PR build/27579:
	* rust-exp.y (maker_map): Use gdb::hash_enum.
	* stap-probe.c (stap_maker_map): Use gdb::hash_enum.
2021-03-15 11:30:51 -06:00
Simon Marchi
4800761a71 gdb: remove spurious colon in create_debug_type_hash_table debug print
This printout in create_debug_type_hash_table has an unexpected colon at
the end, remove it:

    [dwarf-read] create_debug_type_hash_table: Reading .debug_info for /home/simark/build/binutils-gdb/gdb/a.out:

gdb/ChangeLog:

	* dwarf2/read.c (create_debug_type_hash_table): Remove colon at
	end of debug print.

Change-Id: I2d707248249daf4d8b6fa8e7064acdc56c90f2dd
2021-03-15 13:27:03 -04:00
Simon Marchi
eb5dd73748 gdb: remove dw2_get_file_names_reader's info_ptr parameter
I noticed that this parameter was unused, remove it.

gdb/ChangeLog:

	* dwarf2/read.c (dw2_get_file_names_reader): Remove info_ptr
	parameter, adjust caller.

Change-Id: I2a741766a0c658c22c512590aeffdd07391c869c
2021-03-15 13:22:27 -04:00
Tom Tromey
6813ceb03f Fix unary + in Ada
My previous Ada patches introduced a bug that I found after checkin.
I had incorrectly implemented unary +.  There was a test for the
overloaded case, but no test for the ordinary case.

This patch adds the tests and fixes the bug.
Tested on x86-64 Fedora 32.

gdb/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* ada-exp.y (simple_exp): Always push a result for unary '+'.

gdb/testsuite/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/fixed_points.exp: Add tests of unary + and -.
2021-03-15 08:20:24 -06:00
Tom Tromey
3b5c4de0cf Call ada_ensure_varsize_limit in indirection
Internal testing revealed yet another Ada regression from the
expression rewrite.  In this case, indirection did not use the Ada
varsize limit.  The old code relied on the expression resolution
process to evaluate this subexpression with EVAL_AVOID_SIDE_EFFECTS in
order to get this error.  However, this isn't always done in the new
approach; so this patch introduces another call to
ada_ensure_varsize_limit in the appropriate spot.

As with the earlier patches, this path was not tested in-tree, so this
patch also updates a test.

gdb/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* ada-lang.c (ada_unop_ind_operation::evaluate): Call
	ada_ensure_varsize_limit.

gdb/testsuite/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/varsize_limit.exp: Add new test.
	* gdb.ada/varsize_limit/vsizelim.adb: Update.
2021-03-15 06:23:13 -06:00
Tom Tromey
c04da66c26 Implement Ada operator overloading
In the expression rewrite, I neglected to carry over support for Ada
operator overloading.  It turns out that there were no tests for this
in-tree.

This patch adds support for operator overloading, and adds the missing
test.

gdb/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* ada-lang.c (numeric_type_p, integer_type_p): Return true for
	fixed-point.
	* ada-exp.y (maybe_overload): New function.
	(ada_wrap_overload): New function.
	(ada_un_wrap2, ada_wrap2, ada_wrap_op): Use maybe_overload.
	(exp1, simple_exp, relation, and_exp, and_then_exp, or_exp)
	(or_else_exp, xor_exp, primary): Update.

gdb/testsuite/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/operator_call/twovecs.ads: New file.
	* gdb.ada/operator_call/twovecs.adb: New file.
	* gdb.ada/operator_call/opcall.adb: New file.
	* gdb.ada/operator_call.exp: New file.
2021-03-15 06:23:13 -06:00
Tom Tromey
9863c3b5fc Fix regression in Ada ptype
This fixes PR ada/27545, which points out that a test in
gdb.ada/tagged.exp started failing due to the expression rewrite.  I
didn't notice this failure because my system gcc-gnat debuginfo was
out of date, and so the test was already failing in the baseline.

Previously, the OP_VAR_VALUE case in ada_evaluate_subexp ended up
doing a recursive call:

    arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL);

However, during the rewrite I missed this fact and had the new code
call the superclass implementation.

This patch fixes the bug by changing this code to use a recursive call
instead.

gdb/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	PR ada/27545:
	* ada-lang.c (ada_var_value_operation::evaluate): Use recursive
	call for tagged type.
2021-03-15 06:23:13 -06:00
Tom Tromey
1ac7452264 Fix Ada assignment resolution
The expression rewrite missed an Ada resolution case.  GDB previously
knew how to disambiguate the right hand side of an assignment, but now
it does not.

This patch fixes the problem and adds the missing test case.

gdb/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* ada-exp.y (exp1): Handle resolution of the right hand side of an
	assignment.

gdb/testsuite/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/enums_overload/enums_overload_main.adb: New file.
	* gdb.ada/enums_overload/enums_overload.ads: New file.
	* gdb.ada/enums_overload/enums_overload.adb: New file.
	* gdb.ada/enums_overload.exp: New file.
2021-03-15 06:23:12 -06:00
Tom Tromey
207582c075 Fix bug in Ada aggregate assignment
The expression rewrite caused a regression in the internal AdaCore
test suite.  The bug was that I had dropped a bit of code from
aggregate assignment -- assign_aggregate used to return the container,
which I thought was redundant, but which can actually change during
the call.  There was no test for this case in the tree, so I've added
one.

gdb/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* ada-lang.c (ada_aggregate_operation::assign_aggregate): Return
	container.
	(ada_assign_operation::evaluate): Update.
	* ada-exp.h (class ada_aggregate_operation) <assign_aggregate>:
	Change return type.

gdb/testsuite/ChangeLog
2021-03-15  Tom Tromey  <tromey@adacore.com>

	* gdb.ada/assign_arr/target_wrapper.ads (IArray, Put, Do_Nothing):
	Declare.
	* gdb.ada/assign_arr/target_wrapper.adb: New file.
	* gdb.ada/assign_arr/main_p324_051.adb (IValue): New variable.
	Call Put.
	* gdb.ada/assign_arr.exp: Update.
2021-03-15 06:23:12 -06:00
Felix Willgerodt
8d624a9d80 gdb/fortran: Fix quad floating-point type for Intel compilers.
Intel Fortran compilers emit the following DWARF for gdb.fortran/complex.f90:

0x00000071:   DW_TAG_base_type
                DW_AT_name	("COMPLEX*32")
                DW_AT_encoding	(DW_ATE_complex_float)
                DW_AT_byte_size	(0x20)

0x00000078:   DW_TAG_base_type
                DW_AT_name	("REAL*16")
                DW_AT_encoding	(DW_ATE_float)
                DW_AT_byte_size	(0x10)

This results in GDB not reading the right values, as it wrongly assumes the
default floatformat "floatformat_i387_ext" instead of
"floatformat_ia64_quad_little".

gdb/ChangeLog:
2021-03-15  Felix Willgerodt  <felix.willgerodt@intel.com>

	* i386-tdep.c (i386_floatformat_for_type): Add COMPLEX*32 and REAL*16.
2021-03-15 11:02:31 +01:00
Andrew Burgess
ba6a0ef349 gdb: use make_scoped_restore to restore gdbpy_current_objfile
The current mechanism by which the Python gdb.current_objfile is
maintained does not allow for nested auto-load events.  It is assumed
that once an auto-load script has finished loading then the current
objfile should be set back to NULL.  In a nested situation, we should
be restoring the previous value.

We already have an RAII class to handle save/restore type behaviour,
so lets just switch to use that.

The test is a little contrived, but is simple enough, and triggers the
bug.  The real use case might involve the auto-load script calling
functions (either in the just-loaded object file, or in the main
executable), which in turn trigger further auto-loads to occur.

gdb/ChangeLog:

	* python/python.c (gdbpy_source_objfile_script): Use
	make_scoped_restore to restore gdbpy_current_objfile.
	(gdbpy_execute_objfile_script): Likewise.

gdb/testsuite/ChangeLog:

	* gdb.python/py-auto-load-chaining-f1.c: New file.
	* gdb.python/py-auto-load-chaining-f1.o-gdb.py: New file.
	* gdb.python/py-auto-load-chaining-f2.c: New file.
	* gdb.python/py-auto-load-chaining-f2.o-gdb.py: New file.
	* gdb.python/py-auto-load-chaining.c: New file.
	* gdb.python/py-auto-load-chaining.exp: New file.
2021-03-15 09:21:37 +00:00
Tom Tromey
7c290a04a2 Use cu_header consistently in read_attribute_value
read_attribute_value has a local cu_header variable, but then some
spots in the function use cu->header instead.  It seems better to me
to prefer the local everywhere, so this patch makes this change.

gdb/ChangeLog
2021-03-14  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (read_attribute_value): Use cu_header
	consistently.
2021-03-14 11:59:37 -06:00
Tom Tromey
0280fdcc08 Minor tweak to use die_reader_specs::abfd
For an experiment I'm working on, it would be convenient if
die_reader_specs::cu could be NULL.  This is fairly involved to
implement, but I did notice one spot that could conveniently be
updated.  While making this trivial change, I also noticed a small,
related formatting error.

2021-03-14  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (struct die_reader_specs) <abfd>: Fix formatting.
	(peek_die_abbrev): Use reader.abfd.
2021-03-14 11:50:06 -06:00
Tom Tromey
a9f172c6b7 Set dwarf2_per_cu_data::m_header_read_in
I noticed that nothing in dwarf2/read.c sets
dwarf2_per_cu_data::m_header_read_in.  This patch adds the appropriate
assignment.

gdb/ChangeLog
2021-03-14  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (dwarf2_per_cu_data::get_header): Set
	m_header_read_in.
2021-03-14 11:50:01 -06:00
Tom Tromey
7c32eebb87 Constify abbrev_table::lookup_abbrev
This changes abbrev_table::lookup_abbrev to return a pointer to const,
then fixes up the affected code.

gdb/ChangeLog
2021-03-13  Tom Tromey  <tom@tromey.com>

	* dwarf2/read.c (struct partial_die_info): Update.
	(peek_die_abbrev, skip_children, skip_one_die, read_full_die_1)
	(load_partial_dies, partial_die_info::partial_die_info): Update.
	* dwarf2/abbrev.h (lookup_abbrev): Constify.
2021-03-13 09:41:05 -07:00
Tom Tromey
27012aba8a Remove Irix 6 workaround from DWARF abbrev reader
abbrev_table::read has a workaround for Irix 6.  The last release of
Irix was in 2006, and (according to Wikipedia) hardware produced after
2007 cannot run Irix.  I think this workaround can safely be retired.

gdb/ChangeLog
2021-03-13  Tom Tromey  <tom@tromey.com>

	* dwarf2/abbrev.c (abbrev_table::read): Remove Irix 6 workaround.
2021-03-13 09:41:05 -07:00
Christian Biesinger
fece451c2a Use RAII to set the per-thread SIGSEGV handler
This avoids using a thread-local extern variable, which causes link errors
on some platforms, notably Cygwin.  But I think this is a better pattern
even outside of working around linker bugs because it encapsulates direct
access to the variable inside the class, instead of having a global extern
variable.

The cygwin link error is:
cp-support.o: in function `gdb_demangle(char const*, int)':
/home/Christian/binutils-gdb/obj/gdb/../../gdb/cp-support.c:1619:(.text+0x6472): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `TLS init function for thread_local_segv_handler'
/home/Christian/binutils-gdb/obj/gdb/../../gdb/cp-support.c:1619:(.text+0x648b): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `TLS init function for thread_local_segv_handler'
collect2: error: ld returned 1 exit status

2021-03-12  Christian Biesinger  <cbiesinger@google.com>

	PR threads/27239
	* cp-support.c: Use scoped_segv_handler_restore.
	* event-top.c (thread_local_segv_handler): Made static.
	(scoped_segv_handler_restore::scoped_segv_handler_restore):
	New function.
	(scoped_segv_handler_restore::~scoped_segv_handler_restore): New
	function.
	* event-top.h (class scoped_segv_handler_restore): New class.
	(thread_local_segv_handler): Removed.
2021-03-12 11:21:42 -06:00
Tom Tromey
7056f312d0 Use bool for "parse_completion"
Some spots in GDB already use bool for "parse_completion", but a few
were still using int.  This patch updates these to bool.

I'm checking this in.

gdb/ChangeLog
2021-03-10  Tom Tromey  <tromey@adacore.com>

	* parser-defs.h (parser_state): Change completion to bool.
	<parse_completion>: Likewise.
	* ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall)
	(ada_resolve_variable, ada_resolve_function): Update.
	* ada-lang.c (ada_find_operator_symbol): Change
	parse_completion to bool.
	(ada_resolve_funcall, ada_resolve_variable)
	(ada_resolve_function): Likewise.
2021-03-10 11:50:09 -07:00
Tom Tromey
ccdc02ed07 Fix function call regression in new evaluator
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-09 07:36:26 -07:00
Andrew Burgess
fbb1aaceba gdb: fix field names of GDB's type main_type structure
In commit:

  commit 5b7d941b90
  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-09 11:03:26 +00:00
Felix Willgerodt
611aa09d99 gdb/fortran: Add 'LOC' intrinsic support.
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-09 11:34:55 +01:00
Andrew Burgess
eef32f5998 gdb/fotran: add support for the 'shape' keyword
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-09 09:51:23 +00:00
Andrew Burgess
7ba155b370 gdb/fortran: add support for 'SIZE' keyword
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-09 09:51:23 +00:00
Andrew Burgess
e14816a8ba gdb/fortran: add support for RANK keyword
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-09 09:45:18 +00:00
Tom Tromey
3dd93bf837 Remove some null checks
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-08 07:28:44 -07:00
Tom Tromey
9c79936b3d Use bound_minimal_symbol in var_msym_value_operation
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-08 07:28:44 -07:00
Tom Tromey
40d07d07d0 Change exp_uses_objfile to return bool
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-08 07:28:44 -07:00
Tom Tromey
0b2b0b8220 Remove EVAL_SKIP
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-08 07:28:43 -07:00
Tom Tromey
96db551d06 Merge namespace scopes in eval.c
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-08 07:28:43 -07:00
Tom Tromey
ce284361a2 Inline expr_builder methods
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-08 07:28:43 -07:00
Tom Tromey
b9d06571f9 Inline expression constructor
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-08 07:28:43 -07:00
Tom Tromey
79ab486e97 Remove BINOP_END
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-08 07:28:42 -07:00
Tom Tromey
48fa6f23ec Remove OP_UNUSED_LAST
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-08 07:28:42 -07:00
Tom Tromey
43f542e321 Remove OP_EXTENDED0
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-08 07:28:42 -07:00
Tom Tromey
5d9ba98236 Remove unused Ada opcodes
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-08 07:28:42 -07:00
Tom Tromey
d357570da8 Remove unused Modula-2 opcodes
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-08 07:28:42 -07:00
Tom Tromey
0922dc847e Remove two Ada opcodes
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-08 07:28:41 -07:00
Tom Tromey
1eaebe02cf Remove union exp_element
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-08 07:28:41 -07:00
Tom Tromey
f2a98603a8 Remove now-unused C evaluator code
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-08 07:28:41 -07:00
Tom Tromey
d3c54a1ce8 Remove now-unused Ada evaluator code
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-08 07:28:40 -07:00
Tom Tromey
5871f0a38d Remove now-unused Modula-2 evaluator code
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-08 07:28:40 -07:00
Tom Tromey
a99be8c199 Remove now-unused Fortran evaluator code
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-08 07:28:40 -07:00
Tom Tromey
aa1da9ed50 Remove now-unused Rust evaluator code
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-08 07:28:40 -07:00
Tom Tromey
08a057e64b Convert ada-exp.y to use operations
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-08 07:28:40 -07:00
Tom Tromey
d308ba78cf Convert f-exp.y to use operations
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-08 07:28:39 -07:00
Tom Tromey
f1b8ceef1b Convert m2-exp.y to use operations
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-08 07:28:39 -07:00
Tom Tromey
3163898ec8 Convert p-exp.y to use operations
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-08 07:28:39 -07:00