| # Copyright 2023-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/>. |
| |
| load_lib "ada.exp" |
| |
| require allow_ada_tests |
| |
| standard_ada_testfile foo |
| |
| if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ |
| [list debug ]] != "" } { |
| return -1 |
| } |
| |
| clean_restart ${testfile} |
| |
| set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb] |
| if {![runto "foo.adb:$bp_location"]} { |
| perror "Couldn't run ${testfile}" |
| return |
| } |
| |
| with_test_prefix "with standard max-value size" { |
| gdb_test "print Large_1d_Array" \ |
| " = \\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\ |
| 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\ |
| 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\ |
| 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,\ |
| 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,\ |
| 61, 62, 63, 64\\)" |
| gdb_test -nonl "output Large_1d_Array" \ |
| "\\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\ |
| 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\ |
| 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\ |
| 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,\ |
| 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,\ |
| 61, 62, 63, 64\\)" |
| gdb_test "print Large_3d_Array" \ |
| " = \\(\\(\\(1, 2, 3, 4\\), \\(5, 6, 7, 8\\),\ |
| \\(9, 10, 11, 12\\), \\(13, 14, 15, 16\\)\\),\ |
| \\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\ |
| \\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\),\ |
| \\(\\(33, 34, 35, 36\\), \\(37, 38, 39, 40\\),\ |
| \\(41, 42, 43, 44\\), \\(45, 46, 47, 48\\)\\),\ |
| \\(\\(49, 50, 51, 52\\), \\(53, 54, 55, 56\\),\ |
| \\(57, 58, 59, 60\\), \\(61, 62, 63, 64\\)\\)\\)" |
| gdb_test -nonl "output Large_3d_Array" \ |
| "\\(\\(\\(1, 2, 3, 4\\), \\(5, 6, 7, 8\\),\ |
| \\(9, 10, 11, 12\\), \\(13, 14, 15, 16\\)\\),\ |
| \\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\ |
| \\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\),\ |
| \\(\\(33, 34, 35, 36\\), \\(37, 38, 39, 40\\),\ |
| \\(41, 42, 43, 44\\), \\(45, 46, 47, 48\\)\\),\ |
| \\(\\(49, 50, 51, 52\\), \\(53, 54, 55, 56\\),\ |
| \\(57, 58, 59, 60\\), \\(61, 62, 63, 64\\)\\)\\)" |
| } |
| |
| # Set the max-value-size so we can only print 33 elements. |
| set elements 33 |
| set elem_size [get_valueof "/d" "(Large_1d_Array(1)'Size + 7) / 8" "*unknown*"] |
| gdb_test_no_output "set max-value-size [expr $elem_size * $elements]" |
| |
| with_test_prefix "with reduced max-value size" { |
| gdb_test "print Large_1d_Array" \ |
| "value of type `.*' requires $decimal bytes,\ |
| which is more than max-value-size" |
| gdb_test "output Large_1d_Array" \ |
| "value of type `.*' requires $decimal bytes,\ |
| which is more than max-value-size" |
| gdb_test "print Large_3d_Array" \ |
| "value of type `.*' requires $decimal bytes,\ |
| which is more than max-value-size" |
| gdb_test "output Large_3d_Array" \ |
| "value of type `.*' requires $decimal bytes,\ |
| which is more than max-value-size" |
| } |
| |
| with_test_prefix "with reduced print -elements flag" { |
| gdb_test "print -elements 2 -- Large_1d_Array" \ |
| " = \\(1, 2\\.\\.\\.\\)" |
| gdb_test "print -elements 2 -- Large_3d_Array" \ |
| " = \\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\ |
| \\(\\(17, 18\\.\\.\\.\\),\ |
| \\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)" |
| } |
| |
| gdb_test_no_output "set print elements 2" |
| |
| with_test_prefix "with reduced print elements" { |
| gdb_test "print Large_1d_Array" \ |
| " = \\(1, 2\\.\\.\\.\\)" |
| gdb_test -nonl "output Large_1d_Array" \ |
| "\\(1, 2\\.\\.\\.\\)" |
| |
| gdb_test "print \$" \ |
| " = \\(1, 2\\.\\.\\.\\)" \ |
| "print Large_1d_Array from history" |
| gdb_test -nonl "output \$\$" \ |
| "\\(1, 2\\.\\.\\.\\)" \ |
| "output Large_1d_Array from history" |
| |
| gdb_test "print Large_3d_Array" \ |
| " = \\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\ |
| \\(\\(17, 18\\.\\.\\.\\),\ |
| \\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)" |
| gdb_test -nonl "output Large_3d_Array" \ |
| "\\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\ |
| \\(\\(17, 18\\.\\.\\.\\),\ |
| \\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)" |
| |
| gdb_test "print \$" \ |
| " = \\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\ |
| \\(\\(17, 18\\.\\.\\.\\),\ |
| \\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)" \ |
| "print Large_3d_Array from history" |
| gdb_test -nonl "output \$\$" \ |
| "\\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\ |
| \\(\\(17, 18\\.\\.\\.\\),\ |
| \\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)" \ |
| "output Large_3d_Array from history" |
| } |
| |
| gdb_test_no_output "set print elements $elements" |
| |
| with_test_prefix "with print elements matching max-value size" { |
| gdb_test "print \$\$2" \ |
| " = \\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\ |
| 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\ |
| 25, 26, 27, 28, 29, 30, 31, 32, 33\\.\\.\\.\\)" \ |
| "print Large_1d_Array from history" |
| gdb_test -nonl "output \$\$3" \ |
| "\\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\ |
| 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\ |
| 25, 26, 27, 28, 29, 30, 31, 32, 33\\.\\.\\.\\)" \ |
| "output Large_1d_Array from history" |
| |
| gdb_test "print \$\$2" \ |
| " = \\(\\(\\(1, 2, 3, 4\\), \\(5, 6, 7, 8\\),\ |
| \\(9, 10, 11, 12\\), \\(13, 14, 15, 16\\)\\),\ |
| \\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\ |
| \\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\),\ |
| \\(\\(33(?:, <unavailable>)\{3\}\\)(?:,\ |
| \\(<unavailable>(?:, <unavailable>)\{3\}\\))\{3\}\\),\ |
| \\(\\(<unavailable>(?:, <unavailable>)\{3\}\\)(?:,\ |
| \\(<unavailable>(?:, <unavailable>)\{3\}\\))\{3\}\\)\\)" \ |
| "print Large_3d_Array from history" |
| gdb_test -nonl "output \$\$3" \ |
| "\\(\\(\\(1, 2, 3, 4\\), \\(5, 6, 7, 8\\),\ |
| \\(9, 10, 11, 12\\), \\(13, 14, 15, 16\\)\\),\ |
| \\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\ |
| \\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\),\ |
| \\(\\(33(?:, <unavailable>)\{3\}\\)(?:,\ |
| \\(<unavailable>(?:, <unavailable>)\{3\}\\))\{3\}\\),\ |
| \\(\\(<unavailable>(?:, <unavailable>)\{3\}\\)(?:,\ |
| \\(<unavailable>(?:, <unavailable>)\{3\}\\))\{3\}\\)\\)" \ |
| "output Large_3d_Array from history" |
| } |
| |
| gdb_test_no_output "set max-value-size unlimited" |
| gdb_test_no_output "set print elements unlimited" |
| gdb_test_no_output "set print repeats 2" |
| |
| with_test_prefix "with unlimited print elements" { |
| gdb_test "print \$\$" \ |
| " = \\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\ |
| 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\ |
| 25, 26, 27, 28, 29, 30, 31, 32, 33,\ |
| <unavailable> <repeats 31 times>\\)" \ |
| "print Large_1d_Array from history" |
| gdb_test -nonl "output \$\$2" \ |
| "\\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\ |
| 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\ |
| 25, 26, 27, 28, 29, 30, 31, 32, 33,\ |
| <unavailable> <repeats 31 times>\\)" \ |
| "output Large_1d_Array from history" |
| |
| gdb_test "print \$\$" \ |
| " = \\(\\(\\(1, 2, 3, 4\\), \\(5, 6, 7, 8\\),\ |
| \\(9, 10, 11, 12\\), \\(13, 14, 15, 16\\)\\),\ |
| \\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\ |
| \\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\),\ |
| \\(\\(33, <unavailable> <repeats 3 times>\\),\ |
| \\(<unavailable> <repeats 4 times>\\) <repeats 3 times>\\),\ |
| \\(\\(<unavailable> <repeats 4 times>\\)\ |
| <repeats 4 times>\\)\\)" \ |
| "print Large_3d_Array from history" |
| gdb_test -nonl "output \$\$2" \ |
| "\\(\\(\\(1, 2, 3, 4\\), \\(5, 6, 7, 8\\),\ |
| \\(9, 10, 11, 12\\), \\(13, 14, 15, 16\\)\\),\ |
| \\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\ |
| \\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\),\ |
| \\(\\(33, <unavailable> <repeats 3 times>\\),\ |
| \\(<unavailable> <repeats 4 times>\\) <repeats 3 times>\\),\ |
| \\(\\(<unavailable> <repeats 4 times>\\) <repeats 4 times>\\)\\)" \ |
| "output Large_3d_Array from history" |
| |
| gdb_test "print \$\[2\]" \ |
| " = \\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\ |
| \\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\)" \ |
| "print available Large_3d_Array row from history" |
| gdb_test -nonl "output \$\$\[2\]" \ |
| "\\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\ |
| \\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\)" \ |
| "output available Large_3d_Array row from history" |
| |
| gdb_test "print \$\$\[3\]" \ |
| " = \\(\\(33, <unavailable> <repeats 3 times>\\),\ |
| \\(<unavailable> <repeats 4 times>\\) <repeats 3 times>\\)" \ |
| "print partially available Large_3d_Array row from history" |
| gdb_test -nonl "output \$\$2\[3\]" \ |
| "\\(\\(33, <unavailable> <repeats 3 times>\\),\ |
| \\(<unavailable> <repeats 4 times>\\) <repeats 3 times>\\)" \ |
| "output partially available Large_3d_Array row from history" |
| |
| # These go straigth to the inferior. |
| gdb_test "print \$\$2(3)" \ |
| " = \\(\\(33, 34, 35, 36\\), \\(37, 38, 39, 40\\),\ |
| \\(41, 42, 43, 44\\), \\(45, 46, 47, 48\\)\\)" \ |
| "print partially available Large_3d_Array row bypassing history" |
| gdb_test -nonl "output \$\$3(3)" \ |
| "\\(\\(33, 34, 35, 36\\), \\(37, 38, 39, 40\\),\ |
| \\(41, 42, 43, 44\\), \\(45, 46, 47, 48\\)\\)" \ |
| "output partially available Large_3d_Array row bypassing history" |
| |
| gdb_test "print \$\$3\[4\]" \ |
| " = <unavailable>" \ |
| "print unavailable Large_3d_Array row from history" |
| gdb_test -nonl "output \$\$4\[4\]" \ |
| "<unavailable>" \ |
| "output unavailable Large_3d_Array row from history" |
| |
| gdb_test "print \$\$4\[3\]\[1\]\[1\]" \ |
| " = 33" \ |
| "print available Large_3d_Array element from history" |
| gdb_test -nonl "output \$\$5\[3\]\[1\]\[1\]" \ |
| "33" \ |
| "output available Large_3d_Array element from history" |
| |
| gdb_test "print \$\$5\[3\]\[1\]\[2\]" \ |
| " = <unavailable>" \ |
| "print unavailable Large_3d_Array element from history" |
| gdb_test -nonl "output \$\$6\[3\]\[1\]\[2\]" \ |
| "<unavailable>" \ |
| "output unavailable Large_3d_Array element from history" |
| |
| gdb_test "print \$\$6\[3\]\[1\]\[1\] + \$\$6\[3\]\[1\]\[2\]" \ |
| "value is not available" \ |
| "print expression referring unavailable element from history" |
| gdb_test "output \$\$6\[3\]\[1\]\[1\] + \$\$6\[3\]\[1\]\[2\]" \ |
| "value is not available" \ |
| "output expression referring unavailable element from history" |
| } |