aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2021-03-16Fix cygwin build errorChristian Biesinger2-1/+6
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 4ef367bffd73d50002339deba40983530ccb9d15, 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-16gdb/python: fix FrameDecorator regression on Python 2Andrew Burgess6-1/+169
This commit: commit d1cab9876d72d867b2de82688f5f5a2a4b655edb 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-16gdb/testsuite: squash duplicate test names in gdb.threads/*.expAndrew Burgess7-48/+77
Resolve all of the duplicate test names in the gdb.threads/*.exp set of tests (that I see). Nothing very exciting here, mostly either giving tests explicit testnames, or adding with_test_prefix. The only interesting one is gdb.threads/execl.exp, I believe the duplicate test name was caused by an actual duplicate test. I've remove the simpler form of the test. I don't believe we've lost any test coverage with this change. gdb/testsuite/ChangeLog: * gdb.threads/execl.exp: Remove duplicate 'info threads' test. Make use of $gdb_test_name instead of creating a separate $test variable. * gdb.threads/print-threads.exp: Add a with_test_prefix instead of adding a '($name)' at the end of each test. This also catches the one place where '($name)' was missing, and so caused a duplicate test name. * gdb.threads/queue-signal.exp: Give tests unique names to avoid duplicate test names based on the command being tested. * gdb.threads/signal-command-multiple-signals-pending.exp: Likewise. * lib/gdb.exp (gdb_compile_shlib_pthreads): Tweak test name to avoid duplicate testnames when a test script uses this proc and also gdb_compile_pthreads. * lib/prelink-support.exp (build_executable_own_libs): Use with_test_prefix to avoid duplicate test names when we call build_executable twice.
2021-03-15Fix GDB build with GCC 4.8.2Tom Tromey3-2/+12
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-15gdb: remove spurious colon in create_debug_type_hash_table debug printSimon Marchi2-1/+6
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-15gdb: add logging to dwarf2_initialize_objfileSimon Marchi1-1/+14
I added these printouts while working on 27541. I won't have a fix for that right now, but I thought that it would be useful to merge them upstream, as they help understand what happens in that function. gdb/ChangeLog: * dwarf2/read.c (dwarf2_initialize_objfile): Add debug prints. Change-Id: I790c0d53383327038cb5dd705f74c8c978e0a7ec
2021-03-15gdb: remove dw2_get_file_names_reader's info_ptr parameterSimon Marchi2-2/+6
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-15Fix unary + in AdaTom Tromey4-3/+18
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-15Call ada_ensure_varsize_limit in indirectionTom Tromey5-1/+30
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-15Implement Ada operator overloadingTom Tromey8-35/+467
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-15Fix regression in Ada ptypeTom Tromey2-2/+7
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-15Fix Ada assignment resolutionTom Tromey7-1/+142
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-15Fix bug in Ada aggregate assignmentTom Tromey8-11/+72
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-15gdb/fortran: Fix quad floating-point type for Intel compilers.Felix Willgerodt2-1/+8
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-15gdb: use make_scoped_restore to restore gdbpy_current_objfileAndrew Burgess9-6/+264
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-14Use cu_header consistently in read_attribute_valueTom Tromey2-11/+16
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-14Minor tweak to use die_reader_specs::abfdTom Tromey2-2/+7
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-14Set dwarf2_per_cu_data::m_header_read_inTom Tromey2-0/+7
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-13Constify abbrev_table::lookup_abbrevTom Tromey3-10/+20
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-13Remove Irix 6 workaround from DWARF abbrev readerTom Tromey2-19/+13
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-12Use RAII to set the per-thread SIGSEGV handlerChristian Biesinger4-12/+51
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-12gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.expAndrew Burgess7-8/+25
This commit resolves the remaining duplicate test names in the gdb.python/ directory, there's 1 duplicate per test script. In each case I have just extended some test names to make them more descriptive. gdb/testsuite/ChangeLog: * gdb.python/py-bad-printers.exp: Extend test names to make them unique. * gdb.python/py-events.exp: Likewise. * gdb.python/py-finish-breakpoint2.exp: Likewise. * gdb.python/py-frame-inline.exp: Likewise. * gdb.python/py-frame.exp: Likewise. * gdb.python/py-infthread.exp: Likewise.
2021-03-12gdb/testsuite: remove duplicate test from gdb.python/py-value-cc.expAndrew Burgess2-2/+4
While squashing duplicate test names I spotted an actual duplicate test, I suspect a copy & paste error in an earlier patch. I can see no reason why we should need to duplicate this test, so I'm removing one copy of it. gdb/testsuite/ChangeLog: * gdb.python/py-value-cc.exp: Remove a duplicate test.
2021-03-12gdb/testsuite: check the correct Python variable in testAndrew Burgess2-1/+6
While squashing duplicate test names I spotted what looked like a copy & paste error. During this test a Python variable is created, and then we call the type method on that variable. In one case we create a variable and then call the type method on a variable created for a previous test. I can see no reason why this should be what we want, it doesn't line up with the comments in the test script, so I've updated the test. Note, the expected result doesn't change, just the command issued (the test relates to stripping typedefs). gdb/testsuite/ChangeLog: * gdb.python/lib-types.exp: Update the test to check the correct python variable.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-explore-cc.expAndrew Burgess2-4/+9
Add additional text to some test names to make them unique. In one case, correct the test name (copy & paste error) to make it correctly reflect what the test is doing. gdb/testsuite/ChangeLog: * gdb.python/py-explore-cc.exp: Extend test names to make them unique.
2021-03-12gdb/testsuite: remove a duplicate testAndrew Burgess2-2/+4
I spotted a duplicate test name in this test script. Turns out it's an actual duplicate test. Delete one copy of this test. gdb/testsuite/ChangeLog: * gdb.python/py-lookup-type.exp: Remove duplicate test.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-symtab.expAndrew Burgess2-2/+9
Extend the names of some tests to make them unique. gdb/testsuite/ChangeLog: * gdb.python/py-symtab.exp: Extend test names to make them unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-prompt.expAndrew Burgess2-39/+51
Use with_test_prefix to make test names unique. gdb/testsuite/ChangeLog: * gdb.python/py-prompt.exp: Add with_test_prefix to make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-block.expAndrew Burgess2-7/+15
Extend some test names to make them unique. gdb/testsuite/ChangeLog: * gdb.python/py-block.exp: Give tests unique names.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-pp-maint.expAndrew Burgess2-5/+15
Extend the test names with additional text to make them unique. gdb/testsuite/ChangeLog: * gdb.python/py-pp-maint.exp: Extend test names to make them unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-explore.expAndrew Burgess2-28/+35
Add a with_test_prefix to make test names unique. gdb/testsuite/ChangeLog: * gdb.python/py-explore.exp: Add with_test_prefix to make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-finish-breakpoint.expAndrew Burgess2-13/+19
Make test names unique by just adding additional text to the test names. As this is a Python test that repeatedly imports the Python script I've just numbered the test names in this case rather than trying to come up with anything better, hence we have: import python scripts, 1 import python scripts, 2 ... import python scripts, 6 Not great, but hopefully good enough. Everything else has a slightly more descriptive test name. gdb/testsuite/ChangeLog: * gdb.python/py-finish-breakpoint.exp: Make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-strfns.expAndrew Burgess2-1/+8
Wrap some code in `with_test_prefix` to make test names unique. gdb/testsuite/ChangeLog: * gdb.python/py-strfns.exp: Use with_test_prefix to make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-format-string.expAndrew Burgess2-18/+23
Make use of `proc_with_prefix` for every test_* proc in order to make the test names unique within this test file. gdb/testsuite/ChangeLog: * gdb.python/py-format-string.exp: Use proc_with_prefix to make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-mi.expAndrew Burgess2-156/+171
Use with_test_prefix to make the test names unique. gdb/testsuite/ChangeLog: * gdb.python/py-mi.exp: Use with_test_prefix to make test names unique.
2021-03-10Use bool for "parse_completion"Tom Tromey4-13/+24
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-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-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-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.