mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 11:33:45 +08:00
* gdb.ada/formatted_ref: New test program.
* gdb.ada/formatted_ref.exp: New testcase. * gdb.cp/formatted-ref.cc: New file. * gdb.cp/formatted-ref.exp: New testcase.
This commit is contained in:
parent
4e885b20aa
commit
8d04f9f0c8
@ -1,3 +1,11 @@
|
||||
2008-01-30 Paul Hilfinger <hilfinger@adacore.com>
|
||||
|
||||
* gdb.ada/formatted_ref: New test program.
|
||||
* gdb.ada/formatted_ref.exp: New testcase.
|
||||
|
||||
* gdb.cp/formatted-ref.cc: New file.
|
||||
* gdb.cp/formatted-ref.exp: New testcase.
|
||||
|
||||
2008-01-30 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* gdb.base/ptype.exp: Add testing of "ptype $pc".
|
||||
|
102
gdb/testsuite/gdb.ada/formatted_ref.exp
Normal file
102
gdb/testsuite/gdb.ada/formatted_ref.exp
Normal file
@ -0,0 +1,102 @@
|
||||
# Copyright 2007, 2008 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/>.
|
||||
|
||||
# Author: P. N. Hilfinger, AdaCore Inc.
|
||||
|
||||
# Note: This test is essentially a transcription of gdb.cp/formatted-ref.exp,
|
||||
# and is thus much more wordy than it needs to be. There are fewer
|
||||
# tests because only a few parameter types in Ada are required to be
|
||||
# passed by reference, and there is no equivalent of &(&x) for reference
|
||||
# values.
|
||||
|
||||
if $tracelevel then {
|
||||
strace $tracelevel
|
||||
}
|
||||
|
||||
load_lib "ada.exp"
|
||||
|
||||
set testdir "formatted_ref"
|
||||
set testfile "${testdir}/formatted_ref"
|
||||
set srcfile ${srcdir}/${subdir}/${testfile}.adb
|
||||
set binfile ${objdir}/${subdir}/${testfile}
|
||||
|
||||
|
||||
file mkdir ${objdir}/${subdir}/${testdir}
|
||||
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
|
||||
untested formatted-ref.exp
|
||||
return -1
|
||||
}
|
||||
|
||||
proc get_address { var } {
|
||||
global expect_out
|
||||
global gdb_prompt
|
||||
|
||||
send_gdb "print $var'access\n"
|
||||
gdb_expect {
|
||||
-re "\\$\[0-9\]+ = \\(.*\\) (0x\[0-9a-f\]+).*$gdb_prompt $" {
|
||||
return $expect_out(1,string)
|
||||
}
|
||||
timeout {
|
||||
perror "couldn't find address of $var"
|
||||
return ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc test_p_x { var val addr } {
|
||||
global gdb_prompt
|
||||
|
||||
set test "print/x $var"
|
||||
gdb_test_multiple "$test" $test {
|
||||
-re "\\$\[0-9\]+ = [string_to_regexp $val].*$gdb_prompt $" {
|
||||
pass $test
|
||||
}
|
||||
-re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" {
|
||||
fail "$test (prints just address)"
|
||||
}
|
||||
-re "\\$\[0-9\]+ = 0x\[a-f0-9\]+.*$gdb_prompt $" {
|
||||
fail "$test (prints unexpected address)"
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
proc test_p_x_addr { var addr } {
|
||||
global gdb_prompt
|
||||
|
||||
set test "print/x $var'access"
|
||||
gdb_test_multiple $test $test {
|
||||
-re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" {
|
||||
pass $test
|
||||
}
|
||||
-re "\\$\[0-9\]+ = 0x\[a-f0-9+\]+.*$gdb_prompt $" {
|
||||
fail "$test (prints unexpected address)"
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
gdb_exit
|
||||
gdb_start
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
runto defs.adb:[gdb_get_line_number "marker here" ${testdir}/defs.adb ]
|
||||
|
||||
set s1_address [get_address "s1"]
|
||||
|
||||
test_p_x "s" "(x => 0xd, y => 0x13)" $s1_address
|
||||
|
||||
test_p_x_addr "s" $s1_address
|
23
gdb/testsuite/gdb.ada/formatted_ref/defs.adb
Normal file
23
gdb/testsuite/gdb.ada/formatted_ref/defs.adb
Normal file
@ -0,0 +1,23 @@
|
||||
-- Copyright 2007, 2008 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/>.
|
||||
|
||||
package body Defs is
|
||||
|
||||
function F1 (S : Struct1) return Integer is
|
||||
begin
|
||||
return s.x; -- Set breakpoint marker here.
|
||||
end F1;
|
||||
|
||||
end Defs;
|
27
gdb/testsuite/gdb.ada/formatted_ref/defs.ads
Normal file
27
gdb/testsuite/gdb.ada/formatted_ref/defs.ads
Normal file
@ -0,0 +1,27 @@
|
||||
-- Copyright 2007, 2008 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/>.
|
||||
|
||||
package Defs is
|
||||
|
||||
type Struct1 is limited record
|
||||
X : Integer := 13;
|
||||
Y : Integer := 19;
|
||||
end record;
|
||||
|
||||
function F1 (S : Struct1) return Integer;
|
||||
|
||||
S1 : Struct1;
|
||||
|
||||
end Defs;
|
21
gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb
Normal file
21
gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb
Normal file
@ -0,0 +1,21 @@
|
||||
-- Copyright 2007, 2008 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/>.
|
||||
|
||||
with Defs;
|
||||
procedure Formatted_Ref is
|
||||
X : Integer;
|
||||
begin
|
||||
X := Defs.F1 (Defs.S1);
|
||||
end Formatted_Ref;
|
48
gdb/testsuite/gdb.cp/formatted-ref.cc
Normal file
48
gdb/testsuite/gdb.cp/formatted-ref.cc
Normal file
@ -0,0 +1,48 @@
|
||||
/* Copyright 2007, 2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
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/>. */
|
||||
|
||||
/* Author: Paul N. Hilfinger, AdaCore Inc. */
|
||||
|
||||
enum Enum1 { Val10=10, Val11, Val12 };
|
||||
|
||||
struct Struct1
|
||||
{
|
||||
int x, y;
|
||||
};
|
||||
|
||||
int f1 (Struct1& s, Enum1& e, int& i)
|
||||
{
|
||||
return s.x; /* Set breakpoint marker here. */
|
||||
}
|
||||
|
||||
Struct1 s1 = { 13, 19 };
|
||||
|
||||
int i1 = 23;
|
||||
|
||||
Enum1 e1 = Val11;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
|
||||
#ifdef usestubs
|
||||
set_debug_traps();
|
||||
breakpoint();
|
||||
#endif
|
||||
|
||||
f1 (s1, e1, i1);
|
||||
|
||||
}
|
130
gdb/testsuite/gdb.cp/formatted-ref.exp
Normal file
130
gdb/testsuite/gdb.cp/formatted-ref.exp
Normal file
@ -0,0 +1,130 @@
|
||||
# Copyright 2007, 2008 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/>.
|
||||
|
||||
# Author: P. N. Hilfinger, AdaCore, Inc.
|
||||
|
||||
# This test checks the behavior of formatted print when applied to a
|
||||
# reference value. The intended behavior is that a formatted print of
|
||||
# such a value should display the same value as a plain print,
|
||||
# modulo format, of course. Older versions of GDB would instead print
|
||||
# the reference's address value itself when doing a formatted print,
|
||||
# rather than printing both that and the dereferenced value. We also
|
||||
# check that the (non-standard) expression &(&x), where x is of type T&,
|
||||
# yields an appropriate value.
|
||||
|
||||
if $tracelevel then {
|
||||
strace $tracelevel
|
||||
}
|
||||
|
||||
set prms_id 0
|
||||
set bug_id 0
|
||||
|
||||
if { [skip_cplus_tests] } { continue }
|
||||
|
||||
set testfile "formatted-ref"
|
||||
set srcfile ${testfile}.cc
|
||||
set binfile ${objdir}/${subdir}/${testfile}
|
||||
|
||||
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
|
||||
untested formatted-ref.exp
|
||||
return -1
|
||||
}
|
||||
|
||||
proc get_address { var } {
|
||||
global expect_out
|
||||
global gdb_prompt
|
||||
|
||||
send_gdb "print &$var\n"
|
||||
gdb_expect {
|
||||
-re "\\$\[0-9\]+ = \\(.*\\) (0x\[0-9a-f\]+).*$gdb_prompt $" {
|
||||
return $expect_out(1,string)
|
||||
}
|
||||
timeout {
|
||||
perror "couldn't find address of $var"
|
||||
return ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc test_p_x { var type val addr } {
|
||||
global gdb_prompt
|
||||
|
||||
set test "print/x $var"
|
||||
gdb_test_multiple $test $test {
|
||||
-re "\\$\[0-9\]+ = \\([string_to_regexp $type]\\) @0x\[a-f0-9\]+: [string_to_regexp $val].*$gdb_prompt $" {
|
||||
pass $test
|
||||
}
|
||||
-re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" {
|
||||
fail "$test (prints just address)"
|
||||
}
|
||||
-re "\\$\[0-9\]+ = 0x\[a-f0-9\]+.*$gdb_prompt $" {
|
||||
fail "$test (prints unexpected address)"
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
proc test_p_x_addr { var addr } {
|
||||
global gdb_prompt
|
||||
|
||||
set test "print/x &$var"
|
||||
gdb_test_multiple $test $test {
|
||||
-re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" {
|
||||
pass $test
|
||||
}
|
||||
-re "\\$\[0-9\]+ = 0x\[a-f0-9+\]+.*$gdb_prompt $" {
|
||||
fail "$test (prints unexpected address)"
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
proc test_p_x_ref_addr { var addr } {
|
||||
global gdb_prompt
|
||||
|
||||
set test "print/x *(&(&$var))"
|
||||
gdb_test_multiple $test $test {
|
||||
-re "\\$\[0-9\]+ = $addr.*$gdb_prompt $" {
|
||||
pass $test
|
||||
}
|
||||
-re "\\$\[0-9\]+ = 0x\[a-f0-9+\]+.*$gdb_prompt $" {
|
||||
fail "$test (prints unexpected address)"
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
gdb_exit
|
||||
gdb_start
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
runto ${srcfile}:[gdb_get_line_number "marker here"]
|
||||
|
||||
set s1_address [get_address "s1"]
|
||||
set e1_address [get_address "e1"]
|
||||
set i1_address [get_address "i1"]
|
||||
|
||||
test_p_x "s" "Struct1 &" "{x = 0xd, y = 0x13}" $s1_address
|
||||
test_p_x "e" "Enum1 &" "0xb" $e1_address
|
||||
test_p_x "i" "int &" "0x17" $i1_address
|
||||
|
||||
test_p_x_addr "s" $s1_address
|
||||
test_p_x_addr "e" $e1_address
|
||||
test_p_x_addr "i" $i1_address
|
||||
|
||||
test_p_x_ref_addr "s" $s1_address
|
||||
test_p_x_ref_addr "i" $i1_address
|
||||
test_p_x_ref_addr "e" $e1_address
|
Loading…
Reference in New Issue
Block a user