]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/testsuite/gdb.trace/tstatus.exp
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.trace / tstatus.exp
1 # Copyright 2011-2024 Free Software Foundation, Inc.
2 # This program is free software; you can redistribute it and/or modify
3 # it under the terms of the GNU General Public License as published by
4 # the Free Software Foundation; either version 3 of the License, or
5 # (at your option) any later version.
6 #
7 # This program is distributed in the hope that it will be useful,
8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 # GNU General Public License for more details.
11 #
12 # You should have received a copy of the GNU General Public License
13 # along with this program. If not, see <http://www.gnu.org/licenses/>.
14
15 load_lib "trace-support.exp"
16
17 standard_testfile actions.c
18 set executable $testfile
19 set expfile tstatus.exp
20
21 require gdb_trace_common_supports_arch
22
23 if [prepare_for_testing "failed to prepare" $executable $srcfile \
24 [list debug]] {
25 return -1
26 }
27
28 if ![runto_main] {
29 return -1
30 }
31
32 if ![gdb_target_supports_trace] {
33 unsupported "target does not support trace"
34 return -1
35 }
36
37 set tstatus_output ""
38
39 proc run_trace_experiment {} {
40 global gdb_prompt
41 global decimal
42 global tstatus_output
43
44 # gdb_test_no_output "set debug remote 1" ""
45
46 gdb_test "continue" \
47 ".*Breakpoint \[0-9\]+, begin .*" \
48 "advance to trace begin"
49
50 gdb_test_no_output "tstart my tracing note" "start trace experiment"
51
52 gdb_test "continue" \
53 ".*Breakpoint \[0-9\]+, end .*" \
54 "advance through tracing"
55
56 # Now play with tstatus a bit.
57
58 # Since support for notes, user, stop reason, etc. is optional, we
59 # need to match both with and without cases.
60
61 set test "tstatus reports trace note"
62 gdb_test_multiple "tstatus" $test {
63 -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace notes: my tracing note\.\[\r\n\]+Not looking at any trace frame\..*\r\n$gdb_prompt $" {
64 pass $test
65 }
66 -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*\r\n$gdb_prompt $" {
67 unsupported $test
68 }
69 }
70
71 gdb_test "set trace-notes different note" "" "change tracing note"
72
73 set test "tstatus reports different trace note"
74 gdb_test_multiple "tstatus" $test {
75 -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\..*\r\n$gdb_prompt $" {
76 pass $test
77 }
78 -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*\r\n$gdb_prompt $" {
79 unsupported $test
80 }
81 }
82
83 gdb_test "set trace-user me me me" "" "change tracing user"
84
85 set test "tstatus reports trace user"
86 gdb_test_multiple "tstatus" $test {
87 -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Trace user is me me me\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\..*\r\n$gdb_prompt $" {
88 pass $test
89 }
90 -re "Trace is running.*Trace will stop if GDB disconnects\.\[\r\n\]+Not looking at any trace frame.*\r\n$gdb_prompt $" {
91 unsupported $test
92 }
93 }
94
95 gdb_test_no_output "tstop because I can" "trace stopped with note"
96
97 set test "tstatus reports trace stop reason"
98 gdb_test_multiple "tstatus" $test {
99 -re "(Trace stopped by a tstop command \\(because I can\\)\..*Trace will stop if GDB disconnects\.\[\r\n\]+Trace user is me me me\.\[\r\n\]+Trace notes: different note\.\[\r\n\]+Not looking at any trace frame\.).*\r\n$gdb_prompt $" {
100 set tstatus_output $expect_out(1,string)
101 pass $test
102 }
103 -re "(Trace stopped by a tstop command\.).*\r\n$gdb_prompt $" {
104 set tstatus_output $expect_out(1,string)
105 unsupported $test
106 }
107 }
108
109 set test "info trace reports tracepoint hit count and traceframe usage"
110 gdb_test_multiple "info trace" $test {
111 -re "actions\.c:\[0-9\]+\[\r\n\]+\[\t ]+tracepoint already hit 1 time\[\r\n\]+\[\t ]+trace buffer usage ${decimal} bytes\.\[\r\n\]+\[\t ]+collect parm.*\r\n$gdb_prompt $" {
112 pass $test
113 }
114 -re "actions\.c:\[0-9\]+\[\r\n\]+\[\t ]+collect parm.*\r\n$gdb_prompt $" {
115 unsupported $test
116 }
117 }
118 }
119
120 proc test_tracepoints {} {
121 global gdb_prompt
122
123 gdb_breakpoint "begin" qualified
124
125 gdb_breakpoint "end" qualified
126
127 gdb_test "trace gdb_c_test" "Tracepoint .*" \
128 "tracepoint at gdb_c_test"
129
130 gdb_trace_setactions "collect at set_point: define actions" \
131 "" \
132 "collect parm" "^$"
133
134 run_trace_experiment
135
136 }
137
138 test_tracepoints
139
140 set tracefile [standard_output_file ${testfile}]
141 # Save trace frames to tfile.
142 gdb_test "tsave ${tracefile}.tf" \
143 "Trace data saved to file '${tracefile}.tf'.*" \
144 "save tfile trace file"
145 # Save trace frames to CTF.
146 gdb_test "tsave -ctf ${tracefile}.ctf" \
147 "Trace data saved to directory '${tracefile}.ctf'.*" \
148 "save ctf trace file"
149
150 # Change target to tfile.
151 set test "change to tfile target"
152 gdb_test_multiple "target tfile ${tracefile}.tf" "$test" {
153 -re "A program is being debugged already. Kill it. .y or n. " {
154 send_gdb "y\n"
155 exp_continue
156 }
157 -re "$gdb_prompt $" {
158 pass "$test"
159 }
160 }
161
162 # Convert "(because I can) to "\(because I can\)"
163 set tstatus_output [string map {\( \\(} $tstatus_output]
164 set tstatus_output [string map {\) \\)} $tstatus_output]
165
166 # The status should be identical to the status of live inferior.
167 gdb_test "tstatus" "Using a trace file\.\r\n${tstatus_output}.*" \
168 "tstatus on tfile target"
169
170 # Change target to ctf if GDB supports.
171 gdb_test_multiple "target ctf ${tracefile}.ctf" "" {
172 -re "Undefined target command: \"ctf ${tracefile}.ctf\"\. Try \"help target\"\.\r\n$gdb_prompt $" {
173 }
174 -re ".*\r\n$gdb_prompt $" {
175 gdb_test "tstatus" "Using a trace file\.\r\n${tstatus_output}.*" \
176 "tstatus on ctf target"
177 }
178 }