aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite')
-rw-r--r--gdb/testsuite/gdb.ada/huge.exp92
-rw-r--r--gdb/testsuite/gdb.ada/huge/foo.adb20
-rw-r--r--gdb/testsuite/gdb.ada/huge/pck.adb82
-rw-r--r--gdb/testsuite/gdb.ada/huge/pck.ads18
-rw-r--r--gdb/testsuite/gdb.base/huge.exp28
-rw-r--r--gdb/testsuite/gdb.fortran/huge.F9021
-rw-r--r--gdb/testsuite/gdb.fortran/huge.exp95
7 files changed, 353 insertions, 3 deletions
diff --git a/gdb/testsuite/gdb.ada/huge.exp b/gdb/testsuite/gdb.ada/huge.exp
new file mode 100644
index 0000000..71b440e
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/huge.exp
@@ -0,0 +1,92 @@
+# Copyright 2001-2023 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/>.
+
+# Copied from gdb.base/huge.exp, written by Michael Snyder
+# (msnyder@redhat.com).
+
+# Define if you want to skip this test
+# (could be very time-consuming on remote targets with slow connection).
+#
+require {!target_info exists gdb,skip_huge_test}
+
+load_lib "ada.exp"
+
+require allow_ada_tests
+
+standard_ada_testfile foo
+
+set max [expr 2 * 1024 * 1024]
+set min 16
+
+set opts {}
+lappend opts debug
+
+set compilation_succeeded 0
+for { set size $max } { $size >= $min } { set size [expr $size / 2] } {
+ set try_opts [concat $opts [list additional_flags=-gnateDCRASHGDB=$size]]
+ # Use gdb_compile_ada_1 to prevent failed compilations from producing a
+ # FAIL.
+ if {[gdb_compile_ada_1 "${srcfile}" "${binfile}" executable \
+ $try_opts] != "" } {
+ continue
+ }
+
+ set compilation_succeeded 1
+ break
+}
+require {expr $compilation_succeeded}
+
+clean_restart ${testfile}
+
+save_vars { timeout } {
+ set timeout 30
+
+ if {![runto "foo"]} {
+ return
+ }
+
+ gdb_test_no_output "set max-value-size unlimited"
+ gdb_test_no_output "maint set per-command space on"
+ set re1 \
+ [list \
+ [string_to_regexp $] \
+ $decimal \
+ " = " \
+ [string_to_regexp "(0 <repeats "] \
+ $decimal \
+ [string_to_regexp " times>)"]]
+ set re2 \
+ [list \
+ "Space used: $decimal" \
+ [string_to_regexp " (+"] \
+ "($decimal) for this command" \
+ [string_to_regexp ")"]]
+ set re [multi_line [join $re1 ""] [join $re2 ""]]
+ set space_used -1
+ gdb_test_multiple "print Arr" "print a very large data object" {
+ -re -wrap $re {
+ set space_used $expect_out(1,string)
+ pass $gdb_test_name
+ }
+ }
+
+ set test "not too much space used"
+ if { $space_used == -1 } {
+ unsupported $test
+ } else {
+ # At 56 passes with and without the fix, so use 55.
+ gdb_assert {$space_used < [expr 55 * 4 * $size] } $test
+ }
+}
diff --git a/gdb/testsuite/gdb.ada/huge/foo.adb b/gdb/testsuite/gdb.ada/huge/foo.adb
new file mode 100644
index 0000000..ad86f43
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/huge/foo.adb
@@ -0,0 +1,20 @@
+-- Copyright 2023 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 Pck; use Pck;
+procedure Foo is
+begin
+ Pck.Foo;
+end Foo;
diff --git a/gdb/testsuite/gdb.ada/huge/pck.adb b/gdb/testsuite/gdb.ada/huge/pck.adb
new file mode 100644
index 0000000..09988fb
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/huge/pck.adb
@@ -0,0 +1,82 @@
+-- Copyright 2023 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 Pck is
+ type My_Int is range -2147483648 .. 2147483647;
+
+#if CRASHGDB = 16
+ type Index is range 1 .. 16;
+#end if;
+#if CRASHGDB = 32
+ type Index is range 1 .. 32;
+#end if;
+#if CRASHGDB = 64
+ type Index is range 1 .. 64;
+#end if;
+#if CRASHGDB = 128
+ type Index is range 1 .. 128;
+#end if;
+#if CRASHGDB = 256
+ type Index is range 1 .. 256;
+#end if;
+#if CRASHGDB = 512
+ type Index is range 1 .. 512;
+#end if;
+#if CRASHGDB = 1024
+ type Index is range 1 .. 1024;
+#end if;
+#if CRASHGDB = 2048
+ type Index is range 1 .. 2048;
+#end if;
+#if CRASHGDB = 4096
+ type Index is range 1 .. 4096;
+#end if;
+#if CRASHGDB = 8192
+ type Index is range 1 .. 8192;
+#end if;
+#if CRASHGDB = 16384
+ type Index is range 1 .. 16384;
+#end if;
+#if CRASHGDB = 32768
+ type Index is range 1 .. 32768;
+#end if;
+#if CRASHGDB = 65536
+ type Index is range 1 .. 65536;
+#end if;
+#if CRASHGDB = 131072
+ type Index is range 1 .. 131072;
+#end if;
+#if CRASHGDB = 262144
+ type Index is range 1 .. 262144;
+#end if;
+#if CRASHGDB = 524288
+ type Index is range 1 .. 524288;
+#end if;
+#if CRASHGDB = 1048576
+ type Index is range 1 .. 1048576;
+#end if;
+#if CRASHGDB = 2097152
+ type Index is range 1 .. 2097152;
+#end if;
+
+ type My_Int_Array is
+ array (Index) of My_Int;
+ Arr : My_Int_Array := (others => 0);
+
+ procedure Foo is
+ begin
+ null;
+ end Foo;
+end Pck;
diff --git a/gdb/testsuite/gdb.ada/huge/pck.ads b/gdb/testsuite/gdb.ada/huge/pck.ads
new file mode 100644
index 0000000..5878cf8
--- /dev/null
+++ b/gdb/testsuite/gdb.ada/huge/pck.ads
@@ -0,0 +1,18 @@
+-- Copyright 2023 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 Pck is
+ procedure Foo;
+end Pck;
diff --git a/gdb/testsuite/gdb.base/huge.exp b/gdb/testsuite/gdb.base/huge.exp
index fc8909d..ef80d76 100644
--- a/gdb/testsuite/gdb.base/huge.exp
+++ b/gdb/testsuite/gdb.base/huge.exp
@@ -53,7 +53,9 @@ save_vars { timeout } {
gdb_test_no_output "set max-value-size unlimited"
- set re \
+ gdb_test_no_output "maint set per-command space on"
+
+ set re1 \
[list \
[string_to_regexp $] \
$decimal \
@@ -61,6 +63,26 @@ save_vars { timeout } {
[string_to_regexp "{0 <repeats "] \
$decimal \
[string_to_regexp " times>}"]]
- set re [join $re ""]
- gdb_test "print a" $re "print a very large data object"
+ set re2 \
+ [list \
+ "Space used: $decimal" \
+ [string_to_regexp " (+"] \
+ "($decimal) for this command" \
+ [string_to_regexp ")"]]
+ set re [multi_line [join $re1 ""] [join $re2 ""]]
+ set space_used -1
+ gdb_test_multiple "print a" "print a very large data object" {
+ -re -wrap $re {
+ set space_used $expect_out(1,string)
+ pass $gdb_test_name
+ }
+ }
+
+ set test "not too much space used"
+ if { $space_used == -1 } {
+ unsupported $test
+ } else {
+ # At 56 passes with and without the fix, so use 55.
+ gdb_assert {$space_used < [expr 55 * 4 * $size] } $test
+ }
}
diff --git a/gdb/testsuite/gdb.fortran/huge.F90 b/gdb/testsuite/gdb.fortran/huge.F90
new file mode 100644
index 0000000..70e3710
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/huge.F90
@@ -0,0 +1,21 @@
+! Copyright 2023 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/>.
+
+program huge
+ implicit none
+
+ integer, dimension(CRASH_GDB) :: array1
+ print *, array1(1)
+end program huge
diff --git a/gdb/testsuite/gdb.fortran/huge.exp b/gdb/testsuite/gdb.fortran/huge.exp
new file mode 100644
index 0000000..ad4382f
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/huge.exp
@@ -0,0 +1,95 @@
+# Copyright 2001-2023 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/>.
+
+# Copied from gdb.base/huge.exp, written by Michael Snyder
+# (msnyder@redhat.com).
+
+# Define if you want to skip this test
+# (could be very time-consuming on remote targets with slow connection).
+#
+require {!target_info exists gdb,skip_huge_test}
+
+require allow_fortran_tests
+
+load_lib fortran.exp
+
+standard_testfile .F90
+
+set max [expr 2 * 1024 * 1024]
+set min 16
+
+set opts {}
+lappend opts debug
+lappend opts f90
+
+set compilation_succeeded 0
+for { set size [expr $max] } { $size >= $min } { set size [expr $size / 2] } {
+ set try_opts [concat $opts [list additional_flags=-DCRASH_GDB=$size]]
+ if { [build_executable $testfile.exp $testfile $srcfile $try_opts] == -1 } {
+ continue
+ }
+
+ set compilation_succeeded 1
+ break
+}
+require {expr $compilation_succeeded}
+
+# Start with a fresh gdb.
+clean_restart ${binfile}
+
+save_vars { timeout } {
+ set timeout 30
+
+ if {![fortran_runto_main]} {
+ return -1
+ }
+
+ gdb_test_no_output "set max-value-size unlimited"
+
+ # Not needed for the C variant, see PR exp/30817.
+ gdb_test_no_output "set print elements unlimited"
+
+ gdb_test_no_output "maint set per-command space on"
+ set re1 \
+ [list \
+ [string_to_regexp $] \
+ $decimal \
+ " = " \
+ [string_to_regexp "(0, <repeats "] \
+ $decimal \
+ [string_to_regexp " times>)"]]
+ set re2 \
+ [list \
+ "Space used: $decimal" \
+ [string_to_regexp " (+"] \
+ "($decimal) for this command" \
+ [string_to_regexp ")"]]
+ set re [multi_line [join $re1 ""] [join $re2 ""]]
+ set space_used -1
+ gdb_test_multiple "print array1" "print a very large data object" {
+ -re -wrap $re {
+ set space_used $expect_out(1,string)
+ pass $gdb_test_name
+ }
+ }
+
+ set test "not too much space used"
+ if { $space_used == -1 } {
+ unsupported $test
+ } else {
+ # At 112 passes with and without the fix, so use 111.
+ gdb_assert {$space_used < [expr 111 * 4 * $size] } $test
+ }
+}