diff options
author | Gaius Mulley <gaiusmod2@gmail.com> | 2024-10-06 20:40:59 +0100 |
---|---|---|
committer | Gaius Mulley <gaiusmod2@gmail.com> | 2024-10-06 20:40:59 +0100 |
commit | 8e756a12bd7aea1f374ef130ce6b33e8110f176f (patch) | |
tree | 67a4c69d201ce4d338d0d703d712c7b2d81d0966 | |
parent | 8503550c4565cafca7e76721bc4462dd201375a6 (diff) | |
download | gdb-8e756a12bd7aea1f374ef130ce6b33e8110f176f.zip gdb-8e756a12bd7aea1f374ef130ce6b33e8110f176f.tar.gz gdb-8e756a12bd7aea1f374ef130ce6b33e8110f176f.tar.bz2 |
gdb/m2: add builtin procedure function ADR
This patch introduces ADR to the Modula-2 language interface.
It return the address of the parameter supplied.
The patch also contains a dejagnu test for ADR.
Tested on x86_64-linux.
Approved-By: Tom Tromey <tom@tromey.com>
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
-rw-r--r-- | gdb/doc/gdb.texinfo | 3 | ||||
-rw-r--r-- | gdb/m2-exp.y | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.modula2/builtin-procedure-adr.exp | 32 |
3 files changed, 41 insertions, 1 deletions
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 65a88c8..46ca62e 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -18298,6 +18298,9 @@ All Modula-2 built-in procedures also return a result, described below. @item ABS(@var{n}) Returns the absolute value of @var{n}. +@item ADR(@var{n}) +Returns the memory address of @var{n}. + @item CAP(@var{c}) If @var{c} is a lower case letter, it returns its upper case equivalent, otherwise it returns its argument. diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y index c127675..2887ad2 100644 --- a/gdb/m2-exp.y +++ b/gdb/m2-exp.y @@ -117,7 +117,7 @@ using namespace expr; %token <sval> TYPENAME %token SIZE CAP ORD HIGH ABS MIN_FUNC MAX_FUNC FLOAT_FUNC VAL CHR ODD TRUNC -%token TSIZE +%token TSIZE ADR %token INC DEC INCL EXCL /* The GDB scope operator */ @@ -191,6 +191,10 @@ exp : ABS '(' exp ')' { error (_("ABS function is not implemented")); } ; +exp : ADR '(' exp ')' + { pstate->wrap<unop_addr_operation> (); } + ; + exp : HIGH '(' exp ')' { pstate->wrap<m2_unop_high_operation> (); } ; @@ -699,6 +703,7 @@ static struct keyword keytab[] = {"IN", IN },/* Note space after IN */ {"AND", LOGICAL_AND}, {"ABS", ABS }, + {"ADR", ADR }, {"CHR", CHR }, {"DEC", DEC }, {"NOT", NOT }, diff --git a/gdb/testsuite/gdb.modula2/builtin-procedure-adr.exp b/gdb/testsuite/gdb.modula2/builtin-procedure-adr.exp new file mode 100644 index 0000000..6588020 --- /dev/null +++ b/gdb/testsuite/gdb.modula2/builtin-procedure-adr.exp @@ -0,0 +1,32 @@ +# Copyright 2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. It contains tests for printing +# the elements of an unbounded array using the Modula-2 language mode of +# gdb. + +standard_testfile unbounded1.c + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug quiet}]} { + return -1 +} + +if {![runto main]} { + return +} + +gdb_test "set lang modula-2" ".*does not match.*" "switch to modula-2" + +gdb_test "print ADR(i)" ".*0x.*" "print the address of local variable i" |