From 8d04f9f0c8553ad4f04e419bbd180a583af2cdc7 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Wed, 30 Jan 2008 19:23:26 +0000 Subject: * 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. --- gdb/testsuite/gdb.ada/formatted_ref.exp | 102 +++++++++++++++++++++ gdb/testsuite/gdb.ada/formatted_ref/defs.adb | 23 +++++ gdb/testsuite/gdb.ada/formatted_ref/defs.ads | 27 ++++++ .../gdb.ada/formatted_ref/formatted_ref.adb | 21 +++++ 4 files changed, 173 insertions(+) create mode 100644 gdb/testsuite/gdb.ada/formatted_ref.exp create mode 100644 gdb/testsuite/gdb.ada/formatted_ref/defs.adb create mode 100644 gdb/testsuite/gdb.ada/formatted_ref/defs.ads create mode 100644 gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb (limited to 'gdb/testsuite/gdb.ada') diff --git a/gdb/testsuite/gdb.ada/formatted_ref.exp b/gdb/testsuite/gdb.ada/formatted_ref.exp new file mode 100644 index 0000000..4029aeb --- /dev/null +++ b/gdb/testsuite/gdb.ada/formatted_ref.exp @@ -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 . + +# 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 diff --git a/gdb/testsuite/gdb.ada/formatted_ref/defs.adb b/gdb/testsuite/gdb.ada/formatted_ref/defs.adb new file mode 100644 index 0000000..ceceda1 --- /dev/null +++ b/gdb/testsuite/gdb.ada/formatted_ref/defs.adb @@ -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 . + +package body Defs is + + function F1 (S : Struct1) return Integer is + begin + return s.x; -- Set breakpoint marker here. + end F1; + +end Defs; diff --git a/gdb/testsuite/gdb.ada/formatted_ref/defs.ads b/gdb/testsuite/gdb.ada/formatted_ref/defs.ads new file mode 100644 index 0000000..8a75122 --- /dev/null +++ b/gdb/testsuite/gdb.ada/formatted_ref/defs.ads @@ -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 . + +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; diff --git a/gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb b/gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb new file mode 100644 index 0000000..569b58f --- /dev/null +++ b/gdb/testsuite/gdb.ada/formatted_ref/formatted_ref.adb @@ -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 . + +with Defs; +procedure Formatted_Ref is + X : Integer; +begin + X := Defs.F1 (Defs.S1); +end Formatted_Ref; -- cgit v1.1