1# Copyright (C) 2011-2023 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16load_lib mi-support.exp 17set MIFLAGS "-i=mi2" 18 19gdb_exit 20if [mi_gdb_start] { 21 return 22} 23 24standard_testfile .s 25set opts {} 26 27if [info exists COMPILE] { 28 # make check RUNTESTFLAGS="gdb.mi/mi2-amd64-entry-value.exp COMPILE=1" 29 set srcfile ${testfile}.c 30 lappend opts debug optimize=-O2 31} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } { 32 verbose "Skipping mi2-amd64-entry-value." 33 return 34} 35 36set executable ${testfile} 37 38if [build_executable ${testfile}.exp ${executable} ${srcfile} $opts] { 39 return -1 40} 41 42mi_gdb_reinitialize_dir $srcdir/$subdir 43mi_gdb_load ${binfile} 44 45foreach name {different breakhere_different breakhere_validity breakhere_invalid} { 46 mi_create_breakpoint $name "break $name" 47} 48 49 50# Test various kinds of `set print entry-values'. 51 52with_test_prefix "entry-values=no" { 53 if {[mi_runto_main] == -1} { 54 return -1 55 } 56 mi_gdb_test "-gdb-set print entry-values no" {\^done} "no: set print entry-values" 57 mi_send_resuming_command "exec-continue" "no: entry_equal: continue" 58 mi_expect_stop "breakpoint-hit" .* {{name="val",value="5"}} .* .* {.* disp="keep"} "no: entry_equal: stop" 59 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="5"}\]} "no: entry_equal: -stack-list-variables" 60 mi_send_resuming_command "exec-continue" "no: entry_different: continue" 61 mi_expect_stop "breakpoint-hit" .* {{name="val",value="6"}} .* .* {.* disp="keep"} "no: entry_different: stop" 62 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="6"}\]} "no: entry_different: -stack-list-variables" 63 mi_send_resuming_command "exec-continue" "no: validity: continue" 64 mi_expect_stop "breakpoint-hit" .* {{name="lost",value="<optimized out>"},{name="born",value="10"}} .* .* {.* disp="keep"} "no: validity: stop" 65 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="lost",arg="1",value="<optimized out>"},{name="born",arg="1",value="10"}\]} "no: validity: -stack-list-variables" 66 mi_send_resuming_command "exec-continue" "no: invalid: continue" 67 mi_expect_stop "breakpoint-hit" .* {{name="inv",value="<optimized out>"}} .* .* {.* disp="keep"} "no: invalid: stop" 68 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="inv",arg="1",value="<optimized out>"}\]} "no: invalid: -stack-list-variables" 69} 70 71with_test_prefix "entry-values=only" { 72 if {[mi_runto_main] == -1} { 73 return -1 74 } 75 mi_gdb_test "-gdb-set print entry-values only" {\^done} "only: set print entry-values" 76 mi_send_resuming_command "exec-continue" "only: entry_equal: continue" 77 mi_expect_stop "breakpoint-hit" .* {{name="val@entry",value="5"}} .* .* {.* disp="keep"} "only: entry_equal: stop" 78 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val@entry",arg="1",value="5"}\]} "only: entry_equal: -stack-list-variables" 79 mi_send_resuming_command "exec-continue" "only: entry_different: continue" 80 mi_expect_stop "breakpoint-hit" .* {{name="val@entry",value="5"}} .* .* {.* disp="keep"} "only: entry_different: stop" 81 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val@entry",arg="1",value="5"}\]} "only: entry_different: -stack-list-variables" 82 mi_send_resuming_command "exec-continue" "only: validity: continue" 83 mi_expect_stop "breakpoint-hit" .* {{name="lost@entry",value="5"},{name="born@entry",value="<optimized out>"}} .* .* {.* disp="keep"} "only: validity: stop" 84 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="lost@entry",arg="1",value="5"},{name="born@entry",arg="1",value="<optimized out>"}\]} "only: validity: -stack-list-variables" 85 mi_send_resuming_command "exec-continue" "only: invalid: continue" 86 mi_expect_stop "breakpoint-hit" .* {{name="inv@entry",value="<optimized out>"}} .* .* {.* disp="keep"} "only: invalid: stop" 87 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="inv@entry",arg="1",value="<optimized out>"}\]} "only: invalid: -stack-list-variables" 88} 89 90with_test_prefix "entry-values=preferred" { 91 if {[mi_runto_main] == -1} { 92 return -1 93 } 94 mi_gdb_test "-gdb-set print entry-values preferred" {\^done} "preferred: set print entry-values" 95 mi_send_resuming_command "exec-continue" "preferred: entry_equal: continue" 96 mi_expect_stop "breakpoint-hit" .* {{name="val@entry",value="5"}} .* .* {.* disp="keep"} "preferred: entry_equal: stop" 97 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val@entry",arg="1",value="5"}\]} "preferred: entry_equal: -stack-list-variables" 98 mi_send_resuming_command "exec-continue" "preferred: entry_different: continue" 99 mi_expect_stop "breakpoint-hit" .* {{name="val@entry",value="5"}} .* .* {.* disp="keep"} "preferred: entry_different: stop" 100 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val@entry",arg="1",value="5"}\]} "preferred: entry_different: -stack-list-variables" 101 mi_send_resuming_command "exec-continue" "preferred: validity: continue" 102 mi_expect_stop "breakpoint-hit" .* {{name="lost@entry",value="5"},{name="born",value="10"}} .* .* {.* disp="keep"} "preferred: validity: stop" 103 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="lost@entry",arg="1",value="5"},{name="born",arg="1",value="10"}\]} "preferred: validity: -stack-list-variables" 104 mi_send_resuming_command "exec-continue" "preferred: invalid: continue" 105 mi_expect_stop "breakpoint-hit" .* {{name="inv@entry",value="<optimized out>"}} .* .* {.* disp="keep"} "preferred: invalid: stop" 106 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="inv@entry",arg="1",value="<optimized out>"}\]} "preferred: invalid: -stack-list-variables" 107} 108 109with_test_prefix "entry-values=if-needed" { 110 if {[mi_runto_main] == -1} { 111 return -1 112 } 113 mi_gdb_test "-gdb-set print entry-values if-needed" {\^done} "if-needed: set print entry-values" 114 mi_send_resuming_command "exec-continue" "if-needed: entry_equal: continue" 115 mi_expect_stop "breakpoint-hit" .* {{name="val",value="5"}} .* .* {.* disp="keep"} "if-needed: entry_equal: stop" 116 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="5"}\]} "if-needed: entry_equal: -stack-list-variables" 117 mi_send_resuming_command "exec-continue" "if-needed: entry_different: continue" 118 mi_expect_stop "breakpoint-hit" .* {{name="val",value="6"}} .* .* {.* disp="keep"} "if-needed: entry_different: stop" 119 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="6"}\]} "if-needed: entry_different: -stack-list-variables" 120 mi_send_resuming_command "exec-continue" "if-needed: validity: continue" 121 mi_expect_stop "breakpoint-hit" .* {{name="lost@entry",value="5"},{name="born",value="10"}} .* .* {.* disp="keep"} "if-needed: validity: stop" 122 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="lost@entry",arg="1",value="5"},{name="born",arg="1",value="10"}\]} "if-needed: validity: -stack-list-variables" 123 mi_send_resuming_command "exec-continue" "if-needed: invalid: continue" 124 mi_expect_stop "breakpoint-hit" .* {{name="inv",value="<optimized out>"}} .* .* {.* disp="keep"} "if-needed: invalid: stop" 125 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="inv",arg="1",value="<optimized out>"}\]} "if-needed: invalid: -stack-list-variables" 126} 127 128with_test_prefix "entry-values=both" { 129 if {[mi_runto_main] == -1} { 130 return -1 131 } 132 mi_gdb_test "-gdb-set print entry-values both" {\^done} "both: set print entry-values" 133 mi_send_resuming_command "exec-continue" "both: entry_equal: continue" 134 mi_expect_stop "breakpoint-hit" .* {{name="val",value="5"},{name="val@entry",value="5"}} .* .* {.* disp="keep"} "both: entry_equal: stop" 135 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="5"},{name="val@entry",arg="1",value="5"}\]} "both: entry_equal: -stack-list-variables" 136 mi_send_resuming_command "exec-continue" "both: entry_different: continue" 137 mi_expect_stop "breakpoint-hit" .* {{name="val",value="6"},{name="val@entry",value="5"}} .* .* {.* disp="keep"} "both: entry_different: stop" 138 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="6"},{name="val@entry",arg="1",value="5"}\]} "both: entry_different: -stack-list-variables" 139 mi_send_resuming_command "exec-continue" "both: validity: continue" 140 mi_expect_stop "breakpoint-hit" .* {{name="lost",value="<optimized out>"},{name="lost@entry",value="5"},{name="born",value="10"},{name="born@entry",value="<optimized out>"}} .* .* {.* disp="keep"} "both: validity: stop" 141 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="lost",arg="1",value="<optimized out>"},{name="lost@entry",arg="1",value="5"},{name="born",arg="1",value="10"},{name="born@entry",arg="1",value="<optimized out>"}\]} "both: validity: -stack-list-variables" 142 mi_send_resuming_command "exec-continue" "both: invalid: continue" 143 mi_expect_stop "breakpoint-hit" .* {{name="inv",value="<optimized out>"},{name="inv@entry",value="<optimized out>"}} .* .* {.* disp="keep"} "both: invalid: stop" 144 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="inv",arg="1",value="<optimized out>"},{name="inv@entry",arg="1",value="<optimized out>"}\]} "both: invalid: -stack-list-variables" 145} 146 147with_test_prefix "entry-values=compact" { 148 if {[mi_runto_main] == -1} { 149 return -1 150 } 151 mi_gdb_test "-gdb-set print entry-values compact" {\^done} "compact: set print entry-values" 152 mi_send_resuming_command "exec-continue" "compact: entry_equal: continue" 153 mi_expect_stop "breakpoint-hit" .* {{name="val",value="5"},{name="val@entry",value="5"}} .* .* {.* disp="keep"} "compact: entry_equal: stop" 154 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="5"},{name="val@entry",arg="1",value="5"}\]} "compact: entry_equal: -stack-list-variables" 155 mi_send_resuming_command "exec-continue" "compact: entry_different: continue" 156 mi_expect_stop "breakpoint-hit" .* {{name="val",value="6"},{name="val@entry",value="5"}} .* .* {.* disp="keep"} "compact: entry_different: stop" 157 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="6"},{name="val@entry",arg="1",value="5"}\]} "compact: entry_different: -stack-list-variables" 158 mi_send_resuming_command "exec-continue" "compact: validity: continue" 159 mi_expect_stop "breakpoint-hit" .* {{name="lost@entry",value="5"},{name="born",value="10"}} .* .* {.* disp="keep"} "compact: validity: stop" 160 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="lost@entry",arg="1",value="5"},{name="born",arg="1",value="10"}\]} "compact: validity: -stack-list-variables" 161 mi_send_resuming_command "exec-continue" "compact: invalid: continue" 162 mi_expect_stop "breakpoint-hit" .* {{name="inv",value="<optimized out>"}} .* .* {.* disp="keep"} "compact: invalid: stop" 163 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="inv",arg="1",value="<optimized out>"}\]} "compact: invalid: -stack-list-variables" 164} 165 166with_test_prefix "entry-values=default" { 167 if {[mi_runto_main] == -1} { 168 return -1 169 } 170 mi_gdb_test "-gdb-set print entry-values default" {\^done} "default: set print entry-values" 171 mi_send_resuming_command "exec-continue" "default: entry_equal: continue" 172 mi_expect_stop "breakpoint-hit" .* {{name="val",value="5"},{name="val@entry",value="5"}} .* .* {.* disp="keep"} "default: entry_equal: stop" 173 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="5"},{name="val@entry",arg="1",value="5"}\]} "default: entry_equal: -stack-list-variables" 174 mi_send_resuming_command "exec-continue" "default: entry_different: continue" 175 mi_expect_stop "breakpoint-hit" .* {{name="val",value="6"},{name="val@entry",value="5"}} .* .* {.* disp="keep"} "default: entry_different: stop" 176 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="val",arg="1",value="6"},{name="val@entry",arg="1",value="5"}\]} "default: entry_different: -stack-list-variables" 177 mi_send_resuming_command "exec-continue" "default: validity: continue" 178 mi_expect_stop "breakpoint-hit" .* {{name="lost",value="<optimized out>"},{name="lost@entry",value="5"},{name="born",value="10"}} .* .* {.* disp="keep"} "default: validity: stop" 179 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="lost",arg="1",value="<optimized out>"},{name="lost@entry",arg="1",value="5"},{name="born",arg="1",value="10"}\]} "default: validity: -stack-list-variables" 180 mi_send_resuming_command "exec-continue" "default: invalid: continue" 181 mi_expect_stop "breakpoint-hit" .* {{name="inv",value="<optimized out>"}} .* .* {.* disp="keep"} "default: invalid: stop" 182 mi_gdb_test "-stack-list-variables --all-values" {\^done,variables=\[{name="inv",arg="1",value="<optimized out>"}\]} "default: invalid: -stack-list-variables" 183} 184