Automatic Copyright Year update after running gdb/copyright.py
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.trace / mi-trace-unavailable.exp
CommitLineData
88b9d363 1# Copyright 2013-2022 Free Software Foundation, Inc.
8cb5cc78
YQ
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 trace-support.exp
17
18standard_testfile trace-unavailable.c
19
ba22ff86 20if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug nopie}] } {
8cb5cc78
YQ
21 return -1
22}
23
24if ![runto_main] {
bc6c7af4 25 fail "can't run to main to check for trace support"
8cb5cc78
YQ
26 return -1
27}
28
29if ![gdb_target_supports_trace] {
bc6c7af4 30 unsupported "current target does not support trace"
8cb5cc78
YQ
31 return -1
32}
33
34gdb_exit
35
36load_lib mi-support.exp
37set MIFLAGS "-i=mi"
38
b75d55d4
PA
39mi_clean_restart $binfile
40mi_runto_main
8cb5cc78
YQ
41
42mi_gdb_test "-break-insert marker" \
43 "\\^done,bkpt=\{number=\"${decimal}\",type=\"breakpoint\".*\"\}" \
44 "insert tracepoint on marker"
45mi_gdb_test "-break-insert -a bar" \
46 "\\^done,bkpt=\{number=\"${decimal}\",type=\"tracepoint\".*\"\}" \
47 "insert tracepoint on bar"
48
49# Define an action.
50mi_gdb_test "-break-commands 3 \"collect array\" \"collect j\" \"end\" " \
51 {\^done} "set action"
52
c898adb7
YQ
53mi_gdb_test "-break-insert -a foo" \
54 "\\^done,bkpt=\{number=\"${decimal}\",type=\"tracepoint\".*\"\}" \
55 "insert tracepoint on foo"
56
57# Collect 'main' to make sure no registers are collected except PC.
58mi_gdb_test "-break-commands 4 \"collect main\" \"end\" " \
59 {\^done} "set action on tracepoint 4"
60
8cb5cc78
YQ
61mi_gdb_test "-trace-start" {.*\^done} "trace start"
62mi_send_resuming_command "exec-continue" "continuing to marker"
63mi_expect_stop \
64 "breakpoint-hit" "marker" ".*" ".*" ".*" {"" "disp=\"keep\""} \
65 "stop at marker"
66mi_gdb_test "-trace-stop" {.*} "trace stop"
67
68# Save trace frames to tfile.
69set tracefile [standard_output_file ${testfile}]
70mi_gdb_test "-trace-save ${tracefile}.tf" ".*\\^done" \
71 "save tfile trace file"
72# Save trace frames to ctf.
73mi_gdb_test "-trace-save -ctf ${tracefile}.ctf" ".*\\^done" \
74 "save ctf trace file"
75
8cb5cc78
YQ
76proc test_trace_unavailable { data_source } {
77 global decimal
78
79 with_test_prefix "$data_source" {
80
81 # Test MI commands '-stack-list-locals', '-stack-list-arguments',
82 # and '-stack-list-variables'.
83 mi_gdb_test "-trace-find frame-number 0" \
84 ".*\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"0\",frame=\{.*" \
85 "-trace-find frame-number 0"
86
82a0a75f
YQ
87 # The "print entry-values" option shouldn't affect the output of
88 # '-stack-list-locals'.
89 foreach entry_values { no only preferred if-needed both compact default } {
90 mi_gdb_test "-gdb-set print entry-values $entry_values" {\^done} ""
91
92 with_test_prefix "$entry_values" {
93 # Test MI command '-stack-list-locals'.
94 mi_gdb_test "-stack-list-locals --simple-values" \
95 ".*\\^done,locals=\\\[\{name=\"array\",type=\"unsigned char \\\[2\\\]\"\},\{name=\"i\",type=\"int\",value=\"<unavailable>\"\}\\\]" \
96 "-stack-list-locals --simple-values"
97 }
98 }
99
100 mi_gdb_test "-gdb-set print entry-values no" {\^done} \
101 "-gdb-set print entry-values no"
102
8cb5cc78
YQ
103 # Test MI command '-stack-list-locals'.
104 mi_gdb_test "-stack-list-locals --simple-values" \
105 ".*\\^done,locals=\\\[\{name=\"array\",type=\"unsigned char \\\[2\\\]\"\},\{name=\"i\",type=\"int\",value=\"<unavailable>\"\}\\\]" \
106 "-stack-list-locals --simple-values"
6211c335
YQ
107 mi_gdb_test "-stack-list-locals --skip-unavailable --simple-values" \
108 ".*\\^done,locals=\\\[\{name=\"array\",type=\"unsigned char \\\[2\\\]\"\}\\\]" \
109 "-stack-list-locals --skip-unavailable --simple-values"
8cb5cc78
YQ
110
111 # Test MI command '-stack-list-arguments'.
112 mi_gdb_test "-stack-list-arguments --simple-values" \
113 ".*\\^done,stack-args=\\\[frame=\{level=\"0\",args=\\\[\{name=\"j\",type=\"int\",value=\"4\"\},\{name=\"s\",type=\"char \\\*\",value=\"<unavailable>\"\}\\\]\},.*\}.*" \
114 "-stack-list-arguments --simple-values"
6211c335
YQ
115 mi_gdb_test "-stack-list-arguments --skip-unavailable --simple-values" \
116 ".*\\^done,stack-args=\\\[frame=\{level=\"0\",args=\\\[\{name=\"j\",type=\"int\",value=\"4\"\}\\\]\},.*\}.*" \
117 "-stack-list-arguments --skip-unavailable --simple-values"
8cb5cc78
YQ
118
119 # Test MI command '-stack-list-variables'.
120 mi_gdb_test "-stack-list-variables --simple-values" \
121 ".*\\^done,variables=\\\[\{name=\"j\",arg=\"1\",type=\"int\",value=\"4\"\},\{name=\"s\",arg=\"1\",type=\"char \\\*\",value=\"<unavailable>\"\},\{name=\"array\",type=\"unsigned char \\\[2\\\]\"\},\{name=\"i\",type=\"int\",value=\"<unavailable>\"\}\\\]" \
122 "-stack-list-variables --simple-values"
6211c335
YQ
123 mi_gdb_test "-stack-list-variables --skip-unavailable --simple-values" \
124 ".*\\^done,variables=\\\[\{name=\"j\",arg=\"1\",type=\"int\",value=\"4\"\},\{name=\"array\",type=\"unsigned char \\\[2\\\]\"\}\\\]" \
125 "-stack-list-variables --skip-unavailable --simple-values"
8cb5cc78 126
c898adb7
YQ
127 mi_gdb_test "-trace-find frame-number 1" \
128 ".*\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"1\",frame=\{.*" \
129 "-trace-find frame-number 1"
130
a4105d04
MK
131 set pcnum -1
132 set gpr0num -1
c898adb7
YQ
133 if [is_amd64_regs_target] {
134 set pcnum 16
a4105d04 135 set gpr0num 0
c898adb7
YQ
136 } elseif [is_x86_like_target] {
137 set pcnum 8
a4105d04 138 set gpr0num 0
7890fb45
PL
139 } elseif [is_aarch64_target] {
140 set pcnum 32
a4105d04 141 set gpr0num 0
b04fd3be
MK
142 } elseif [istarget "powerpc*-*-*"] {
143 set pcnum 64
a4105d04
MK
144 set gpr0num 0
145 } elseif { [istarget "s390*-*-*"] } {
146 # Strictly speaking, this is PSWA, not PC.
147 set pcnum 1
148 set gpr0num 2
c898adb7
YQ
149 } else {
150 # Other ports support tracepoint should define the number
151 # of its own pc register.
152 }
153
a4105d04 154 if { $pcnum != -1 } {
c898adb7
YQ
155 global hex
156 # Test that register 0 and PC are displayed, and register
157 # 0 is unavailable.
a4105d04
MK
158 mi_gdb_test "-data-list-register-values x ${gpr0num} ${pcnum}" \
159 ".*\\^done,register-values=\\\[\{number=\"${gpr0num}\",value=\"<unavailable>\"\},\{number=\"${pcnum}\",value=\"${hex}\"\}\\\]" \
c898adb7
YQ
160 "-data-list-register-values x"
161
162 # Test that only available register PC is displayed.
a4105d04 163 mi_gdb_test "-data-list-register-values --skip-unavailable x ${gpr0num} ${pcnum}" \
c898adb7
YQ
164 ".*\\^done,register-values=\\\[\{number=\"${pcnum}\",value=\"${hex}\"\}\\\]" \
165 "-data-list-register-values --skip-unavailable x"
166 }
167
8cb5cc78
YQ
168 # Don't issue command '-trace-find none' to return from
169 # tfind mode (examining trace frames) on purpose, in order
170 # to test that GDB is able to clear its tracing-related local state
171 # in the next -target-select.
172 # mi_gdb_test "-trace-find none" ".*\\^done,found=\"0\".*" "-trace-find none"
173 }
174}
175
176test_trace_unavailable "live"
177
178# Change target to ctf if GDB supports it.
179set msg "-target-select ctf"
180send_gdb "-target-select ctf ${tracefile}.ctf\n"
181gdb_expect {
182 -re ".*\\^connected.*${mi_gdb_prompt}$" {
183 # GDB supports ctf, do the test.
184 test_trace_unavailable "ctf"
185 }
186 -re ".*\\^error,msg=\"Undefined target command.*${mi_gdb_prompt}$" {
187 # GDB doesn't support ctf, skip the test.
188 unsupported "gdb does not support ctf target"
189 }
190 -re ".*$mi_gdb_prompt$" {
191 fail "$msg"
192 }
193 timeout {
194 fail "$msg (timeout)"
195 }
196}
197
198# Change target to tfile.
199mi_gdb_test "-target-select tfile ${tracefile}.tf" ".*\\^connected.*" \
200 "-target-select tfile"
201test_trace_unavailable "tfile"
202
203mi_gdb_exit
This page took 1.176558 seconds and 4 git commands to generate.