]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
3 years agosim: introduce {COMPILE,LINK}_FOR_BUILD
Mike Frysinger [Mon, 8 Mar 2021 06:41:35 +0000 (01:41 -0500)] 
sim: introduce {COMPILE,LINK}_FOR_BUILD

These use the same pattern as seen in the opcodes/ dir and in automake
in general (ish).  This helps simplify the boilerplate for building and
linking build-time code, and fixes some inconsistency in flag usage.

For rules that were compiling+linking in a single step, split them into
separate steps so we can apply the correct set of options.  This matches
automake behavior too.

3 years agosim: drop dep on configure-gdb
Mike Frysinger [Sun, 28 Feb 2021 06:43:21 +0000 (01:43 -0500)] 
sim: drop dep on configure-gdb

I'm not entirely sure why this is here since the sim doesn't use
anything from the gdb/ dir directly, and the commit that added it
included a bunch more changes and doesn't seem to call out this
dep specifically.

3 years agoAutomatic date update in version.in
GDB Administrator [Sat, 13 Mar 2021 00:00:06 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoUse RAII to set the per-thread SIGSEGV handler
Christian Biesinger [Tue, 9 Mar 2021 14:16:23 +0000 (08:16 -0600)] 
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.

3 years agoAdd values for NetBSD .note.netbsd.ident notes (PaX).
Frederic Cambus [Fri, 12 Mar 2021 14:37:51 +0000 (14:37 +0000)] 
Add values for NetBSD .note.netbsd.ident notes (PaX).

 * elf/common.h (NT_NETBSD_PAX, NT_NETBSD_PAX_MPROTECT)
 (NT_NETBSD_PAX_NOMPROTECT, NT_NETBSD_PAX_GUARD, NT_NETBSD_PAX_NOGUARD)
 (NT_NETBSD_PAX_ASLR, NT_NETBSD_PAX_NOASLR): Define.

3 years agoaarch64: Add few missing system registers
Przemyslaw Wirkus [Fri, 12 Mar 2021 14:18:59 +0000 (14:18 +0000)] 
aarch64: Add few missing system registers

This patch adds few missing system registers to GAS: LORC_EL1,
LOREA_EL1, LORN_EL1, LORSA_EL1, ICC_CTLR_EL3, ICC_SRE_ELX, ICH_VTR_EL2.

gas/ChangeLog:

2021-03-02  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* testsuite/gas/aarch64/illegal-sysreg-7.d: New test.
* testsuite/gas/aarch64/illegal-sysreg-7.l: New test.
* testsuite/gas/aarch64/illegal-sysreg-7.s: New test.
* testsuite/gas/aarch64/sysreg-7.d: New test.
* testsuite/gas/aarch64/sysreg-7.s: New test.

opcodes/ChangeLog:

2021-03-02  Przemyslaw Wirkus  <przemyslaw.wirkus@arm.com>

* aarch64-opc.c: Add lorc_el1, lorea_el1, lorn_el1, lorsa_el1,
icc_ctlr_el3, icc_sre_elx, ich_vtr_el2 system registers.

3 years agoriscv --enable-targets=all on 32-bit host
Alan Modra [Fri, 12 Mar 2021 11:47:39 +0000 (22:17 +1030)] 
riscv --enable-targets=all on 32-bit host

Attempting to build --enable-targets=all on a 32-bit host results in a
number of errors like the following.

eelf32lriscv.o: in function `gldelf32lriscv_after_allocation':
eelf32lriscv.c:98: undefined reference to `bfd_elf32_riscv_restart_relax_sections'

That's due to needing --enable-64-bit-bfd to get the riscv BFD support
built.

* Makefile.am (ALL_EMULATION_SOURCES): Move riscv files to..
(ALL_64_EMULATION_SOURCES): ..here.
* Makefile.in: Regenerate.

3 years agogdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp
Andrew Burgess [Mon, 8 Mar 2021 18:34:08 +0000 (18:34 +0000)] 
gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.exp

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.

3 years agogdb/testsuite: remove duplicate test from gdb.python/py-value-cc.exp
Andrew Burgess [Mon, 8 Mar 2021 18:31:06 +0000 (18:31 +0000)] 
gdb/testsuite: remove duplicate test from gdb.python/py-value-cc.exp

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.

3 years agogdb/testsuite: check the correct Python variable in test
Andrew Burgess [Mon, 8 Mar 2021 18:11:10 +0000 (18:11 +0000)] 
gdb/testsuite: check the correct Python variable in test

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-explore-cc.exp
Andrew Burgess [Mon, 8 Mar 2021 18:08:36 +0000 (18:08 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-explore-cc.exp

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.

3 years agogdb/testsuite: remove a duplicate test
Andrew Burgess [Mon, 8 Mar 2021 18:04:41 +0000 (18:04 +0000)] 
gdb/testsuite: remove a duplicate test

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-symtab.exp
Andrew Burgess [Mon, 8 Mar 2021 18:03:13 +0000 (18:03 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-symtab.exp

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-prompt.exp
Andrew Burgess [Mon, 8 Mar 2021 18:01:21 +0000 (18:01 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-prompt.exp

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-block.exp
Andrew Burgess [Mon, 8 Mar 2021 17:53:41 +0000 (17:53 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-block.exp

Extend some test names to make them unique.

gdb/testsuite/ChangeLog:

* gdb.python/py-block.exp: Give tests unique names.

3 years agogdb/testsuite: make test names unique in gdb.python/py-pp-maint.exp
Andrew Burgess [Mon, 8 Mar 2021 17:51:42 +0000 (17:51 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-pp-maint.exp

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-explore.exp
Andrew Burgess [Mon, 8 Mar 2021 17:14:36 +0000 (17:14 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-explore.exp

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-finish-breakpoint.exp
Andrew Burgess [Mon, 8 Mar 2021 17:02:16 +0000 (17:02 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-finish-breakpoint.exp

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-strfns.exp
Andrew Burgess [Mon, 8 Mar 2021 16:55:28 +0000 (16:55 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-strfns.exp

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-format-string.exp
Andrew Burgess [Mon, 8 Mar 2021 16:50:45 +0000 (16:50 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-format-string.exp

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.

3 years agogdb/testsuite: make test names unique in gdb.python/py-mi.exp
Andrew Burgess [Wed, 3 Mar 2021 13:43:39 +0000 (13:43 +0000)] 
gdb/testsuite: make test names unique in gdb.python/py-mi.exp

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.

3 years agoaix: implement TLS relocation for gas and ld
Clément Chigot [Thu, 11 Mar 2021 10:08:19 +0000 (11:08 +0100)] 
aix: implement TLS relocation for gas and ld

Add support for TLS in XCOFF. Amongst the things done by this commit:
 - Update XCOFF auxialiary header to match new version and allow TLS
   sections.
 - Add TLS sections (.tdata and .tbss) support in gas and ld.
 - Add support for the TLS relocations in gas and ld.
   Two different types BFD_RELOC are created for PPC and PPC64 as
   the size is a pointer, thus distinct in 32 or 64bit.

The addresses given by ld to .tdata and .tbss is a bit special. In
XCOFF, these addresses are actually offsets from the TLS pointer
computed at runtime. AIX assembly and linker does the same. In
top of that, the .tdata must be before .data (this is mandatory for AIX
loader). Thus, the aix ld script is recomputing "." before .data to restore
its original value. There might be a simpler way, but this one is working.

Optimisation linked to TLS relocations aren't yet implemented.

bfd/
* reloc.c (BFD_RELOC_PPC_TLS_LE, BFD_RELOC_PPC_TLS_IE,
BFD_RELOC_PPC_TLS_M, BFD_RELOC_PPC_TLS_ML, BFD_RELOC_PPC64_TLS_GD,
BFD_RELOC_PPC64_TLS_LD, BFD_RELOC_PPC64_TLS_LE,
BFD_RELOC_PPC64_TLS_IE, BFD_RELOC_PPC64_TLS_M,
BFD_RELOC_PPC64_TLS_ML): New relocations.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* coff-rs6000.c (xcoff_calculate_relocation): Call
xcoff_reloc_type_tls for TLS relocations.
(xcoff_howto_table): Implement TLS relocations.
(_bfd_xcoff_reloc_type_lookup): Add cases TLS relocations.
(xcoff_reloc_type_tls): New function.
* coff64-rs6000.c (xcoff_calculate_relocation): Likewise.
(xcoff_howto_table): Likewise.
(_bfd_xcoff_reloc_type_lookup): Likewise.
* coffcode.h (sec_to_styp_flags): Handle TLS sections.
(styp_to_sec_flags): Likewise.
(coff_compute_section_file_positions): Avoid file offset
optimisation for .data when the previous section is .tdata.
(coff_write_object_contents): Handle TLS sections.
* coffswap.h (coff_swap_aouthdr_out): Add support for
new fields in aouthdr.
* libxcoff.h (xcoff_reloc_type_tls): Add prototype.
* xcofflink.c (xcoff_link_add_symbols): Handle XMC_UL.
(xcoff_need_ldrel_p): Add cases for TLS relocations.
(xcoff_create_ldrel): Add l_symndx for TLS sections.
gas/
* config/tc-ppc.c (ppc_xcoff_text_section, ppc_xcoff_data_section,
(ppc_xcoff_bss_section, ppc_xcoff_tdata_section,
(ppc_xcoff_tbss_section): New variables.
(ppc_text_subsegment, ppc_text_csects, ppc_data_subgments,
(ppc_data_csects): Removed.
(ppc_xcoff_section_is_initialized, ppc_init_xcoff_section,
ppc_xcoff_parse_cons): New functions.
(md_being): Initialize XCOFF sections.
(ppc_xcoff_suffix): Add support for TLS relocations
(fixup_size, md_apply_fix): Add support for new BFD_RELOC.
(ppc_change_csect): Handle XMC_TL, XMC_UL.  Correctly, add XMC_BS
to .bss section.  Handle new XCOFF section variables.
(ppc_comm): Likewise.
(ppc_toc): Likewise.
(ppc_symbol_new_hook): Likewise.
(ppc_frob_symbol): Likewise.
(ppc_fix_adjustable): Add tbss support.
* config/tc-ppc.h (TC_PARSE_CONS_EXPRESSION): New define.
(ppc_xcoff_parse_cons): Add prototype.
(struct ppc_xcoff_section): New structure.
ld/
* emultempl/aix.em: Ensure .tdata section is removed
if empty, even with -r flag.
* scripttempl/aix.sc: Handle TLS sections.
* testsuite/ld-powerpc/aix52.exp: Add new tests.
* testsuite/ld-powerpc/aix-tls-reloc-32.d: New test.
* testsuite/ld-powerpc/aix-tls-reloc-64.d: New test.
* testsuite/ld-powerpc/aix-tls-reloc.ex: New test.
* testsuite/ld-powerpc/aix-tls-reloc.s: New test.
* testsuite/ld-powerpc/aix-tls-section-32.d: New test.
* testsuite/ld-powerpc/aix-tls-section-64.d: New test.
* testsuite/ld-powerpc/aix-tls-section.ex: New test.
* testsuite/ld-powerpc/aix-tls-section.s: New test.
include/
* coff/internal.h (struct internal_aouthdr): Add new fields.
* coff/rs6000.h (AOUTHDRÃ): Add new fields.
* coff/rs6k64.h (struct external_filehdr): Likewise.
* coff/xcoff.h (_TDATA), _TBSS): New defines
(RS6K_AOUTHDR_TLS_LE, RS6K_AOUTHDR_RAS, RS6K_AOUTHDR_ALGNTDATA,
RS6K_AOUTHDR_SHR_SYMTAB, RS6K_AOUTHDR_FORK_POLICY,
RS6K_AOUTHDR_FORK_COR): New defines.
(XMC_TU): Removed.
(XMC_UL): New define.

3 years agoaix: implement R_TOCU and R_TOCL relocations
Clément Chigot [Thu, 11 Mar 2021 10:08:19 +0000 (11:08 +0100)] 
aix: implement R_TOCU and R_TOCL relocations

Implement support for largetoc on XCOFF.
R_TOCU and R_TOCL are referenced by the new BFD defines:
BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO.
A new toc storage class is added XMC_TE.

In order to correctly handle R_TOCU, the logic behind
xcoff_reloc_type_toc is changed to compute the whole TOC offset
instead of just the difference between the "link" offset and the
"assembly" offset.

In gas, add a function to transform addis format used by AIX
"addis RT, D(RA)" into the ELF format "addis RT, RA, SI".

bfd/
* reloc.c (BFD_RELOC_PPC_TOC16_HI, BFD_RELOC_PPC_TOC16_LO):
New relocations.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* coff-rs6000.c (xcoff_calculate_relocation): Call
xcoff_reloc_type_toc for R_TOCU and R_TOCL.
(xcoff_howto_table): Remove src_mask for TOC relocations.
Add R_TOCU and R_TOCL howtos.
(_bfd_xcoff_reloc_type_lookup): Add cases for
BFD_RELOC_PPC_TOC16_HI and BFD_RELOC_PPC_TOC16_LO.
(xcoff_reloc_type_toc): Compute the whole offset.
Implement R_TOCU and R_TOCL.
* coff64-rs6000.c (xcoff64_calculate_relocation):
Likewise.
(xcoff64_howto_table): Likewise.
(xcoff64_reloc_type_lookup): Likewise.
gas/
* config/tc-ppc.c (ppc_xcoff_suffix): New function.
(MAP, MAP32, MAP64): New macros for XCOFF.
(ppc_xcoff_fixup_addis): New function.
(ppc_is_toc_sym): Handle XMC_TE.
(fixup_size): Add cases for BFD_RELOC_PPC_TOC16_HI and
BFD_RELOC_PPC_TOC16_LO.
(md_assemble): Call ppc_xcoff_fixup_addis for XCOFF.
(ppc_change_csect): Handle XMC_TE.
(ppc_tc): Enable .tc symbols to have only a XMC_TC or XMC_TE
storage class.
(ppc_symbol_new_hook): Handle XMC_TE.
(ppc_frob_symbol): Likewise.
(ppc_fix_adjustable): Likewise.
(md_apply_fix): Handle BFD_RELOC_PPC_TOC16_HI and
BFD_RELOC_PPC_TOC16_LO.
ld/
* scripttempl/aix.sc: Add .te to .data section.
* testsuite/ld-powerpc/aix52.exp: Add test structure for AIX7+.
Add aix-largetoc-1 test.
* testsuite/ld-powerpc/aix-largetoc-1-32.d: New test.
* testsuite/ld-powerpc/aix-largetoc-1-64.d: New test.
* testsuite/ld-powerpc/aix-largetoc-1.ex: New test.
* testsuite/ld-powerpc/aix-largetoc-1.s: New test.

3 years agoaix: correct HOWTO table and add missing relocations
Clément Chigot [Thu, 11 Mar 2021 10:08:18 +0000 (11:08 +0100)] 
aix: correct HOWTO table and add missing relocations

Since the last time AIX HOWTO table was modified, IBM has now
released an official documentation about XCOFF relocations.
This commit corrects the wrong ones and add some missing.
For now, the "custom" relocations made for xcoff_rtype2howto have
been kept.
The new relocations are still set as EMPTY_HOWTO because they will
be implemented in later commits.

In xcoff[64]_ppc_relocate_section, instead of recreating howto
from scratch, it's better to use the existing howto from the
table and fixing it according to r_size field.

bfd/
* coff-rs6000.c (xcoff_calculate_relocation): Correct and
add new relocations.
(xcoff_howto_table): Likewise.
(xcoff_rtype2howto): Increase r_type maximum value.
(xcoff_ppc_relocate_section): Reuse predefined HOWTOs instead
of create a new one from scratch.  Enable only some relocations
to have a changing r_size.
* coff64-rs6000.c (xcoff64_calculate_relocation): Likewise.
(xcoff64_howto_table): Likewise.
(xcoff64_rtype2howto): Likewise.
(xcoff64_ppc_relocate_section): Likewise.
* libxcoff.h (XCOFF_MAX_CALCULATE_RELOCATION): Fix value.
binutils/
* od-xcoff.c: Replace RTB by TRL entry.
include/
* coff/xcoff.h (R_RTB): Remove.
(R_TRL): Fix value.

3 years agobfd: move xcoff64_ppc_relocate_section after the HOWTO table
Clément Chigot [Thu, 11 Mar 2021 10:08:18 +0000 (11:08 +0100)] 
bfd: move xcoff64_ppc_relocate_section after the HOWTO table

This will be needed for later commits, as xcoff64_ppc_relocate_section
will use the HOWTO table unlike now.

* coff64-rs6000.c (xcoff64_ppc_relocate_section): Move.

3 years agobfd: use default coff_write_object_contents for XCOFF64
Clément Chigot [Thu, 11 Mar 2021 10:08:18 +0000 (11:08 +0100)] 
bfd: use default coff_write_object_contents for XCOFF64

There is no need for XCOFF64 to have is own write_object_contents.

* coff64-rs6000.c (xcoff64_write_object_contents): Remove.
* coffcode.h (coff_write_object_contents): Add bfd_mach_ppc_620
support for o_cputype field.  Avoid creating an empty a.out header
for XCOFF64.

3 years agobfd: add missing smclass when creating csect for xcoff64
Clément Chigot [Thu, 11 Mar 2021 10:08:18 +0000 (11:08 +0100)] 
bfd: add missing smclass when creating csect for xcoff64

* coff64-rs6000.c (xcoff64_create_csect_from_smclas): Add
missing smclass.

3 years agoRe: x86: correct decoding of nop/reserved space (0f18 ... 0x1f)
Alan Modra [Fri, 12 Mar 2021 00:06:49 +0000 (10:36 +1030)] 
Re: x86: correct decoding of nop/reserved space (0f18 ... 0x1f)

* i386-dis.c (print_insn <PREFIX_IGNORED>): Correct typo.

3 years agoPE image base fallout
Alan Modra [Thu, 11 Mar 2021 11:10:02 +0000 (21:40 +1030)] 
PE image base fallout

Fixes x86_64-w64-mingw32 tests that failed with the recent diagnosis
for out of range RVA, and a couple of other gc-sections tests that failed
for other reasons.

* testsuite/ld-gc/gc.exp: Pass "-image-base 0" to ld for PE, and
arrange to define __main for some run_dump_test tests.
* testsuite/ld-gc/pr13683.d: Accept more symbols.
* testsuite/ld-gc/pr14265.d: Likewise, and ordering.
* testsuite/ld-scripts/crossref.exp: Pass "-image-base 0" to ld for PE.
* testsuite/ld-srec/srec.exp: Likewise.
* testsuite/lib/ld-lib.exp (ld_link_defsyms): Use is_pecoff_format.

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 12 Mar 2021 00:00:19 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agox86: re-order logic in OP_XMM()
Jan Beulich [Thu, 11 Mar 2021 15:21:48 +0000 (16:21 +0100)] 
x86: re-order logic in OP_XMM()

Instead of excluding an increasing number of modes in the initial if(),
check the special modes first.

3 years agox86: drop a few redundant EVEX-related checks
Jan Beulich [Thu, 11 Mar 2021 15:21:19 +0000 (16:21 +0100)] 
x86: drop a few redundant EVEX-related checks

vex.b can only be set when vex.evex is also set. Similarly vex.evex can
only be set when need_vex is also set.

3 years agox86: remove stray uses of xmmq_mode
Jan Beulich [Thu, 11 Mar 2021 15:20:37 +0000 (16:20 +0100)] 
x86: remove stray uses of xmmq_mode

xmmq_mode is documented to not allow for broadcast - don't include it in
respective checks in OP_E_memory().

3 years agoRISC-V: Improve multiple relax passes problem.
Nelson Chu [Fri, 18 Dec 2020 02:59:41 +0000 (10:59 +0800)] 
RISC-V: Improve multiple relax passes problem.

According to the commit abd20cb637008da9d32018b4b03973e119388a0a, an
intersting thing is that - the more relax passes, the more chances of
relaxations are reduced [1].  Originally, we set the boolean `again`
to TRUE once the code is actually deleted, and then we run the relaxations
repeatedly if `again` is still TRUE.  But `again` only works for the
relax pass itself, and won't affect others.  That is - we can not use
`again` to re-run the relax pass when we already enter into the following
passes (can not run the relax passes backwards).  Besides, we must seperate
the PCREL relaxations into two relax passes for some reasons [2], it make
us lose some relax opportunities.

This patch try to fix the problem, and the basic idea was come from Jim
Wilson - we use a new boolean, restart_relax, to determine if we need to
run the whole relax passes again from 0 to 2.  Once we have deleted the
code between relax pass 0 to 2, the restart_relax will be set to TRUE,
we should run the whole relaxations again to give them more chances to
shorten the code.  We will only enter into the relax pass 3 when the
restart_relax is FALSE, since we can't relax anything else once we start
to handle the alignments.

I have passed the gcc/binutils regressions by riscv-gnu-toolchain, and
looks fine for now.

[1] https://sourceware.org/pipermail/binutils/2020-November/114223.html
[2] https://sourceware.org/pipermail/binutils/2020-November/114235.html

bfd/
    * elfnn-riscv.c (riscv_elf_link_hash_table): New boolean restart_relax,
    used to check if we need to run the whole relaxations from relax pass 0
    to 2 again.
    (riscv_elf_link_hash_table_create): Init restart_relax to FALSE.
    (_bfd_riscv_relax_align): Remove obsolete sec_flg0 set.
    (_bfd_riscv_relax_delete): Set again to TRUE if we do delete the code.
    (bfd_elfNN_riscv_restart_relax_sections): New function.  Called by
    after_allocation to check if we need to run the whole relaxations again.
    (_bfd_riscv_relax_section): We will only enter into the relax pass 3 when
    the restart_relax is FALSE; At last set restart_relax to TRUE if again is
    TRUE, too.
    * elfxx-riscv.h (bfd_elf32_riscv_restart_relax_sections): Declaration.
    (bfd_elf64_riscv_restart_relax_sections): Likewise.
ld/
    * emultempl/riscvelf.em (after_allocation): Run ldelf_map_segments many
    times if riscv_restart_relax_sections returns TRUE.
    * testsuite/ld-riscv-elf/restart-relax.d: New testcase.  Before applying
    this patch, the call won't be relaxed to jal; But now we have more chances
    to do relaxations.
    * testsuite/ld-riscv-elf/restart-relax.s: Likewise.
    * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.

3 years agoAutomatic date update in version.in
GDB Administrator [Thu, 11 Mar 2021 00:00:17 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoUse bool for "parse_completion"
Tom Tromey [Wed, 10 Mar 2021 18:50:09 +0000 (11:50 -0700)] 
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.

3 years agox86/Intel: correct AVX512 S/G disassembly
Jan Beulich [Wed, 10 Mar 2021 07:20:29 +0000 (08:20 +0100)] 
x86/Intel: correct AVX512 S/G disassembly

Commit 6ff00b5e12e7 ("x86/Intel: correct permitted operand sizes for
AVX512 scatter/gather") brought the assembler side of AVX512 S/G insn
handling in line with AVX2's, but the disassembler side was forgotten.
This has the benefit of
- allowing to fold a number of table entries,
- rendering a few #define-s and enumerators unused.

3 years agox86: re-arrange enumerator and table entry order
Jan Beulich [Wed, 10 Mar 2021 07:19:43 +0000 (08:19 +0100)] 
x86: re-arrange enumerator and table entry order

Some of the enumerators have ended up misplaced under the general
current ordering scheme. Move them (and their table entries) around
accordingly. Add a couple of blank lines as separators when close to
code being touched anyway. Also drop the odd 0F from 0FXOP (there's no
"0f" involved there anywhere) infixes where the respective enum gets
played with anyway.

3 years agox86: reuse further VEX entries for EVEX
Jan Beulich [Wed, 10 Mar 2021 07:19:11 +0000 (08:19 +0100)] 
x86: reuse further VEX entries for EVEX

When the VEX.L=1 decode matches that of both EVEX.L'L=1 and EVEX.L'L=2
(typically when all three are invalid) the (smaller) VEX table entry can
be reused by EVEX, instead of duplicating data. (Note that XM and XMM as
well as EXxmm_md and EXd are equivalent at least for the purposes here.)

3 years agox86: reuse VEX entries for EVEX vperm{q,pd}
Jan Beulich [Wed, 10 Mar 2021 07:18:24 +0000 (08:18 +0100)] 
x86: reuse VEX entries for EVEX vperm{q,pd}

By matching VEX decode order (L before W), some EVEX entries can refer
back to VEX ones instead of carrying duplicates.

3 years agox86: re-arrange order of decode for various EVEX opcodes
Jan Beulich [Wed, 10 Mar 2021 07:16:54 +0000 (08:16 +0100)] 
x86: re-arrange order of decode for various EVEX opcodes

The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.

This also adds a PREFIX_DATA 7531c61332db ("x86: simplify decode of
opcodes valid with (embedded) 66 prefix only") missed to apply to
vbroadcastf64x4.

3 years agox86: re-arrange order of decode for various mask reg opcodes
Jan Beulich [Wed, 10 Mar 2021 07:16:24 +0000 (08:16 +0100)] 
x86: re-arrange order of decode for various mask reg opcodes

The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.

3 years agox86: re-arrange order of decode for various VEX opcodes
Jan Beulich [Wed, 10 Mar 2021 07:15:46 +0000 (08:15 +0100)] 
x86: re-arrange order of decode for various VEX opcodes

The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.

3 years agox86: re-arrange order of decode for various legacy opcodes
Jan Beulich [Wed, 10 Mar 2021 07:15:10 +0000 (08:15 +0100)] 
x86: re-arrange order of decode for various legacy opcodes

The order of decodes influences the overall number of table entries.
Reduce table size quite a bit by first decoding few-alternatives
attributes common to all valid leaves.

3 years agox86: correct decoding of nop/reserved space (0f18 ... 0x1f)
Jan Beulich [Wed, 10 Mar 2021 07:14:11 +0000 (08:14 +0100)] 
x86: correct decoding of nop/reserved space (0f18 ... 0x1f)

All encodings not used in this range are (reserved) NOPs. Hence their
decoding should be fully consistent. For this to work the PREFIX_IGNORED
logic needs slightly extending, such that the attribute will also
- have an effect when used inside prefix_table[], yet without always
  falling back to using slot 0,
- cause prefixes marked as ignored while decoding through prefix_table[]
  to no longer be considered decoded, when encountered in a subsequent
  decoding step.

In adjacent code also drop meaningless PREFIX_OPCODE.

3 years agobfd: strip symbols not representable in COFF/PE symbol table
Jan Beulich [Wed, 10 Mar 2021 07:12:37 +0000 (08:12 +0100)] 
bfd: strip symbols not representable in COFF/PE symbol table

The offset-within-section field in the symbol table entry is only 32
bits wide, so rather than emitting bogus entries omit them, and issue
a diagnostic identifying the issue.

This requires adjusting the PR/22267 test to no longer produce symbols
with out of range values on 64-bit BFD. This also depends on
adjustments to testsuite/ld-scripts/map-address.* made by an earlier
patch. The purpose of the test can very well be achieved nevertheless.

3 years agoAutomatic date update in version.in
GDB Administrator [Wed, 10 Mar 2021 00:00:22 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoELF DWARF in PE output
Alan Modra [Sat, 6 Mar 2021 11:26:15 +0000 (21:56 +1030)] 
ELF DWARF in PE output

* elf.c (bfd_elf_generic_reloc): Make references between debug
sections use section relative values.

3 years agoFix function call regression in new evaluator
Tom Tromey [Tue, 9 Mar 2021 14:36:26 +0000 (07:36 -0700)] 
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.

3 years agold: adjust PE base relocations testcase
Jan Beulich [Tue, 9 Mar 2021 11:40:13 +0000 (12:40 +0100)] 
ld: adjust PE base relocations testcase

mcore-pe and sh-pe pointed out that the testcase added by 6fa7408d72b3
("ld: don't generate base relocations in PE output for absolute
symbols") wasn't quite generic enough yet. Copy entry point stuff from
another test and increase alignment to also cover targets with a page
size lower than 4k.

Despite all of this the test needs to be xfail-ed for mcore, as this
target isn't included in the set getting DLL_SUPPORT enabled in
emultempl/pe.em, and hence no base relocations get generated there
(yet).

3 years agogdb: fix field names of GDB's type main_type structure
Andrew Burgess [Mon, 8 Feb 2021 21:24:52 +0000 (21:24 +0000)] 
gdb: fix field names of GDB's type main_type structure

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.

3 years agogdb/fortran: Add 'LOC' intrinsic support.
Felix Willgerodt [Tue, 9 Mar 2021 10:34:55 +0000 (11:34 +0100)] 
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.

3 years agogdb/fotran: add support for the 'shape' keyword
Andrew Burgess [Fri, 26 Feb 2021 11:14:24 +0000 (11:14 +0000)] 
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.

3 years agogdb/fortran: add support for 'SIZE' keyword
Andrew Burgess [Thu, 25 Feb 2021 16:15:52 +0000 (16:15 +0000)] 
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.

3 years agogdb/fortran: add support for RANK keyword
Andrew Burgess [Thu, 25 Feb 2021 11:41:57 +0000 (11:41 +0000)] 
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.

3 years agox86: fold some prefix related attributes into a single one
Jan Beulich [Tue, 9 Mar 2021 07:54:32 +0000 (08:54 +0100)] 
x86: fold some prefix related attributes into a single one

RepPrefixOk, HLEPrefixOk, and NoTrackPrefixOk can't be specified
together, so can share an enum-like field. IsLockable can be inferred
from HLE setting and hence only needs specifying when neither of them
is present.

3 years agox86-64: make SYSEXIT handling similar to SYSRET's
Jan Beulich [Tue, 9 Mar 2021 07:53:38 +0000 (08:53 +0100)] 
x86-64: make SYSEXIT handling similar to SYSRET's

Despite SYSEXIT being an Intel-only insn in long mode, its behavior
there is similar to SYSRET's: Depending on REX.W execution continues in
either 64-bit or compatibility mode. Hence distinguishing by suffix is
as necessary here as it is there.

3 years agobfd: don't silently wrap or truncate PE image section RVAs
Jan Beulich [Tue, 9 Mar 2021 07:52:32 +0000 (08:52 +0100)] 
bfd: don't silently wrap or truncate PE image section RVAs

In PE images section addresses get expressed as addresses relative to
the image base. Therefore the VA of a section must be no less than the
image base, and after subtraction of the image base the resulting value
should fit in 32 bits. (The issue is particularly obvious to notice when
sections, perhaps because of ELF assumptions, get placed at VA 0 by
default. Debugging info sections as well as .comment, when input files
are ELF, are a good example. All such sections need proper mentioning in
the linker script to avoid this warning.)

There are a number of test cases which previously produced bogus images,
yet still declared the test a success. Like done for other tests
already, force a zero image base for these. This then also allows (and
requires) dropping again xfail-s which 39a7b38fac0e ("Fix linker tests
to work with 16-bit targets") had added to ld-scripts/default-script*.d
(originally as skip-s). This also depends on similar adjustments to
testsuite/ld-scripts/map-address.* made by an earlier patch.

For ld-scripts/print-memory-usage.* I suppose xcoff could be dropped
from the exclusion list by suppressing garbage collection, just like
already done in e.g. (as seen in the diff here) ld-scripts/data.*, but I
didn't want to make unrelated adjustments.

3 years agoAutomatic date update in version.in
GDB Administrator [Tue, 9 Mar 2021 00:00:25 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoEnable maintainer mode for sim
Tom Tromey [Mon, 8 Mar 2021 14:48:20 +0000 (07:48 -0700)] 
Enable maintainer mode for sim

The sim's recently switch to using Automake caused a build failure for
me, because I didn't have the correct auto* tools in my path.
However, the rule in the tree is that this is not needed in general.
This patch adds a call to AM_MAINTAINER_MODE, to align the sim with
the way the rest of the tree works here.

sim/ChangeLog
2021-03-08  Tom Tromey  <tromey@adacore.com>

* aclocal.m4, configure, Makefile.in: Rebuild.
* configure.ac: Use AM_MAINTAINER_MODE.

3 years agoRemove some null checks
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoUse bound_minimal_symbol in var_msym_value_operation
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoChange exp_uses_objfile to return bool
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove EVAL_SKIP
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoMerge namespace scopes in eval.c
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoInline expr_builder methods
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoInline expression constructor
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove BINOP_END
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove OP_UNUSED_LAST
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove OP_EXTENDED0
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove unused Ada opcodes
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove unused Modula-2 opcodes
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove two Ada opcodes
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove union exp_element
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove now-unused C evaluator code
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove now-unused Ada evaluator code
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove now-unused Modula-2 evaluator code
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove now-unused Fortran evaluator code
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoRemove now-unused Rust evaluator code
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoConvert ada-exp.y to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoConvert f-exp.y to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoConvert m2-exp.y to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoConvert p-exp.y to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
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.

3 years agoConvert d-exp.y to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Convert d-exp.y to use operations

This converts the D parser to generate operations rather than
exp_elements.

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

* d-exp.y: Create operations.
(d_parse): Update.

3 years agoConvert go-exp.y to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Convert go-exp.y to use operations

This converts the Go parser to generate operations rather than
exp_elements.

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

* go-exp.y: Create operations.
(go_language::parser): Update.

3 years agoConvert c-exp.y to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Convert c-exp.y to use operations

This converts the C parser to generate operations rather than
exp_elements.

One test needed a tweak in order to handle the different debugging
output.

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

* objc-lang.c (end_msglist): Create operations.
* c-exp.y: Change parser to create operations.
(write_destructor_name): Remove.
(c_parse): Update.

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

* gdb.base/debug-expr.exp: Update expected dump output.

3 years agoConvert rust-exp.y to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Convert rust-exp.y to use operations

This converts the Rust parser to generate operations rather than
exp_elements.

The Rust parser already made its own AST, that it then lowered to GDB
expressions.  Ironically, this made conversion trickier, rather than
simpler, than the other parsers, primarily due to the way that binary
operations were lowered.  Perhaps in the future, converting the Rust
parser to directly create operations while parsing would be
worthwhile.

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

* rust-exp.y: Create operations.
(rust_parser::convert_params_to_expression): Change return type.
(binop_maker_ftype): New typedef.
(maker_map): New global.
(rust_parser::convert_ast_to_expression): Change return type.
(rust_language::parser): Update.
(_initialize_rust_exp): Initialize maker_map.

3 years agoConvert stap probes to create operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Convert stap probes to create operations

This changes the stap probe code to create operations, rather than
exp_elements.

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

* stap-probe.c (binop_maker_ftype): New typedef.
(stap_maker_map): New global.
(stap_make_binop): New function.
(stap_parse_register_operand): Return operation_up.
(stap_parse_single_operand, stap_parse_argument_conditionally)
(stap_parse_argument_1): Likewise.
(stap_parse_argument): Create operations.
(stap_probe::parse_arguments): Update.
(_initialize_stap_probe): Initialize stap_maker_map.
* ppc-linux-tdep.c (ppc_stap_parse_special_token): Change return
type.
* i386-tdep.h (i386_stap_parse_special_token): Change return
type.
* i386-tdep.c (i386_stap_parse_special_token_triplet)
(i386_stap_parse_special_token_three_arg_disp)
(i386_stap_parse_special_token): Change return type.
* gdbarch.sh (stap_parse_special_token): Change return type.
* gdbarch.c: Rebuild.
* gdbarch.h: Rebuild.
* arm-linux-tdep.c (arm_stap_parse_special_token): Change return
type.
* aarch64-linux-tdep.c (aarch64_stap_parse_special_token): Change
return type.

3 years agoConvert dtrace probes to use operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Convert dtrace probes to use operations

This changes dtrace to use the new operation type.

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

* gdbarch.sh (dtrace_parse_probe_argument): Change return type.
* gdbarch.h: Rebuild.
* gdbarch.c: Rebuild.
* dtrace-probe.c (dtrace_probe::build_arg_exprs): Update.
* amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Change
return type.
(amd64_dtrace_parse_probe_argument): Update.

3 years agoAdd operation-related methods to parser_state
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Add operation-related methods to parser_state

This adds several operation-related methods to parser_state.  These
methods make it more convenient to change the parsers to be
operation-based.

Because byacc has poor support for C++, a stack of operations is added
to parser_state.  A parser can push operations, then later pop them
for combination into new operations.  This approach avoids the memory
leaks that would result if raw pointers were used in the parsers, at
the cost of parser productions not being type-safe (they can't
indicate that they return an operation).

This also introduces analogs of some write_exp functions, like
write_exp_string_vector, write_dollar_variable, and
write_exp_symbol_reference.

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

* parser-defs.h (struct parser_state) <push, push_new,
push_c_string, push_symbol, push_dollar, pop, pop_vector, wrap,
wrap2>: New methods.
<m_operations>: New member.
* parse.c (parser_state::push_c_string)
(parser_state::push_symbol, parser_state::push_dollar): New
methods.

3 years agoAdd completion for operations
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Add completion for operations

This patch adds the necessary support for field name completion for
expressions using class operation.

This patch takes an approach similar to what is done today.  It might
be good, in the future, to change completion to be a method on the
base class, to enable context-sensitive completion in more areas.

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

* parser-defs.h (struct expr_completion_state) <expout_last_op>:
New member.
(struct parser_state) <mark_struct_expression>: New method.
* parse.c (parser_state::mark_struct_expression): Update assert.
(parser_state::mark_struct_expression): New method.
(parser_state::mark_completion_tag): Update assert.
(parse_expression_for_completion): Handle expout_last_op.

3 years agoAdd an expr::operation_up to struct expression
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Add an expr::operation_up to struct expression

This adds an expr::operation_up to struct expression, and then
modifies various parts of GDB to use this member when it is non-null.
The list of such spots was a bit surprising to me, and found only
after writing most of the code and then noticing what no longer
compiled.

In a few spots, new accessor methods are added to operation
subclasses, so that code that dissects an expression will work with
the new scheme.

After this change, code that constructs an expression can be switched
to the new form without breaking.

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

* ada-exp.h (class ada_var_value_operation) <get_symbol>: Remove;
now in superclass.
* value.h (fetch_subexp_value): Add "op" parameter.
* value.c (init_if_undefined_command): Update.
* tracepoint.c (validate_actionline, encode_actions_1): Update.
* stap-probe.c (stap_probe::compile_to_ax): Update.
* printcmd.c (set_command): Update.
* ppc-linux-nat.c (ppc_linux_nat_target::check_condition):
Update.
* parser-defs.h (struct expr_builder) <set_operation>: New
method.
* parse.c (parse_exp_in_context, exp_uses_objfile): Update.
* expression.h (struct expression) <first_opcode>: Update.
<op>: New member.
* expprint.c (dump_raw_expression, dump_prefix_expression):
Update.
* expop.h (class var_value_operation) <get_symbol>: New method.
(class register_operation) <get_name>: New method.
(class equal_operation): No longer a typedef, now a subclass.
(class unop_memval_operation) <get_type>: New method.
(class assign_operation) <get_lhs>: New method.
(class unop_cast_operation) <get_type>: New method.
* eval.c (evaluate_expression, evaluate_type)
(evaluate_subexpression_type): Update.
(fetch_subexp_value): Add "op" parameter.
(parse_and_eval_type): Update.
* dtrace-probe.c (dtrace_probe::compile_to_ax): Update.
* breakpoint.c (update_watchpoint, watchpoint_check)
(watchpoint_exp_is_const, watch_command_1): Update.
* ax-gdb.c (gen_trace_for_expr, gen_eval_for_expr, gen_printf):
Update.

3 years agoRemove use of op_string
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Remove use of op_string

After switching to the new expression implementation, there will no
need for op_string.  Before deleting it, the one call outside of the
expression-printing code must be removed.  That is what this patch
does.

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

* ada-lang.c (ada_value_binop): Do not use op_string.

3 years agoImplement Ada assignment
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Implement Ada assignment

Assignment is the most complicated Ada expression, because
implementing aggregate assignment involves several specialized
opcodes.

This patch does this implementation by introducing new abstract
classes that are used to represent the various parts of aggregate
assignment.  This makes the code somewhat cleaner, and, by avoiding
the over-use of 'operation' subclasses, avoids the need for dissection
using dynamic_cast (though a few are still needed here).

I believe this patch fixes a latent bug in the handling of
aggregate_assign_from_choices.  That code does:

      if (op == OP_DISCRETE_RANGE)
{
  choice_pos += 1;
  lower = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
      EVAL_NORMAL));
  upper = value_as_long (ada_evaluate_subexp (NULL, exp, pos,
      EVAL_NORMAL));
}

However, I think 'choice_pos' should be used in the calls, rather than
'pos'.

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

* expprint.c (dump_for_expression): New overload.
* expop.h (check_objfile, dump_for_expression): Declare new
overloads.
* ada-lang.c (check_objfile): New overload.
(assign_component, ada_aggregate_component::uses_objfile)
(ada_aggregate_component::dump, ada_aggregate_component::assign)
(ada_aggregate_component::assign_aggregate)
(ada_positional_component::uses_objfile)
(ada_positional_component::dump, ada_positional_component::assign)
(ada_discrete_range_association::uses_objfile)
(ada_discrete_range_association::dump)
(ada_discrete_range_association::assign)
(ada_name_association::uses_objfile, ada_name_association::dump)
(ada_name_association::assign)
(ada_choices_component::uses_objfile, ada_choices_component::dump)
(ada_choices_component::assign)
(ada_others_component::uses_objfile, ada_others_component::dump)
(ada_others_component::assign, ada_assign_operation::evaluate):
New methods.
* ada-exp.h (ada_string_operation) <get_name>: New method.
(class ada_assign_operation): New.
(class ada_component): New.
(ada_component_up): New typedef.
(class ada_aggregate_operation, class ada_aggregate_component)
(class ada_positional_component, class ada_others_component)
(class ada_association): New.
(ada_association_up): New typedef.
(class ada_choices_component)
(class ada_discrete_range_association)
(class ada_name_association): New.

3 years agoImplement Ada resolution
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Implement Ada resolution

Ada has a parser post-pass that implements "resolution".  This process
replaces some opcodes with function calls.  For example, a "+"
operation might be replaced with a call to the appropriate overloaded
function.

This differs from the approach taken for the same problem in C++.
However, in this series I chose not to try to make changes outside of
rewrite the expression data structure.  So, resolution remains.

The new approach to resolution is to introduce an interface class,
that some concrete operations implement.  Then, the Ada code will use
this to resolve the expression tree.  Because new-style expressions
are built as ordinary objects, and don't require rewriting the data
structure in place, in the new code this processing will be done in
the parser.  By the end of the series, some special cases in this area
that exist only for Ada will be removed.

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

* ada-lang.c (ada_var_value_operation::resolve)
(ada_funcall_operation::resolve)
(ada_ternop_slice_operation::resolve): New methods.
* ada-exp.h (struct ada_resolvable): New.
(class ada_var_value_operation): Derive from ada_resolvable.
<get_block, resolve>: New methods.
(class ada_funcall_operation): Derive from ada_resolvable.
<resolve>: New method.
(class ada_ternop_slice_operation): Derive from ada_resolvable.
<resolve>: New method.

3 years agoImplement function calls for Ada
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Implement function calls for Ada

This implements function calls for Ada.  This takes a different
approach than that used for other languages, primarily because Ada
requires special treatment generally.  The "ordinary" special case for
just the callee didn't really apply neatly here; there's only one case
in Ada needing special callee treatment.

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

* ada-lang.c (ada_funcall_operation::evaluate): New method.
* ada-exp.h (class ada_var_msym_value_operation) <get_symbol>: New
method.
(class ada_funcall_operation): New.

3 years agoIntroduce ada_structop_operation
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Introduce ada_structop_operation

This adds class ada_structop_operation, which implements
STRUCTOP_STRUCT for Ada.

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

* ada-lang.c (ada_structop_operation::evaluate): New method.
* ada-exp.h (class ada_structop_operation): New.

3 years agoIntroduce ada_unop_ind_operation
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Introduce ada_unop_ind_operation

This adds class ada_unop_ind_operation, which implements UNOP_IND for
Ada.

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

* ada-lang.c (ada_unop_ind_operation::evaluate): New method.
* ada-exp.h (class ada_unop_ind_operation): New.

3 years agoIntroduce ada_binop_exp_operation
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Introduce ada_binop_exp_operation

This adds class ada_binop_exp_operation, which implements BINOP_EXP
for Ada.

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

* ada-lang.c (ada_binop_exp): No longer static.
* ada-exp.h (ada_binop_exp_operation): New typedef.

3 years agoIntroduce ada_atr_val_operation
Tom Tromey [Mon, 8 Mar 2021 14:27:57 +0000 (07:27 -0700)] 
Introduce ada_atr_val_operation

This adds class ada_atr_val_operation, which implements OP_ATR_VAL.

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

* ada-lang.c (ada_val_atr): No longer static.
(ada_atr_val_operation::evaluate): New method.
* ada-exp.h (class ada_atr_val_operation): New.