aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.trace/actions.exp
blob: 0c27d84868b7a2abb8df46c2e443bd21a63150dd (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#   Copyright 1998, 2007, 2008, 2009, 2010 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/>.

# This file was written by Michael Snyder (msnyder@cygnus.com)

load_lib "trace-support.exp";

if $tracelevel then {
    strace $tracelevel
}


gdb_exit
gdb_start

set testfile "actions"
set srcfile ${testfile}.c
set binfile $objdir/$subdir/actions
if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	  executable {debug nowarnings}] != "" } {
    untested actions.exp
    return -1
}
gdb_reinitialize_dir $srcdir/$subdir

# If testing on a remote host, download the source file.
# remote_download host $srcdir/$subdir/$srcfile

gdb_file_cmd $binfile

# define relative source line numbers:
# all subsequent line numbers are relative to this first one (baseline)

set baseline  [gdb_find_recursion_test_baseline $srcfile];
if { $baseline == -1 } then {
    fail "Could not find gdb_recursion_test function"
    return;
}

set testline1 [expr $baseline + 7]

#
# test actions command
#

gdb_delete_tracepoints
set trcpt1 [gdb_gettpnum gdb_c_test];
set trcpt2 [gdb_gettpnum gdb_asm_test];
set trcpt3 [gdb_gettpnum $testline1];
if { $trcpt1 <= 0 || $trcpt2 <= 0 || $trcpt3 <= 0 } then {
    fail "setting tracepoints"
    return;
}

# 5.1 actions of specified tracepoint

send_gdb "info tracepoints\n"
gdb_expect {
    -re "Actions for tracepoint \[0-9\]+:.*$gdb_prompt $" {
	fail "5.1a: testsuite failure (tracepoint already has action)!"
    }
    -re "No tracepoints.*$gdb_prompt $" {
	fail "5.1a: set three tracepoints, no actions (No tracepoints!)"
    }
    -re "$gdb_prompt $" {
	pass "5.1a: set three tracepoints, no actions"
    }
}

gdb_trace_setactions "5.1b: set actions for first tracepoint" \
	"$trcpt1" \
	"collect gdb_char_test" "^$"

gdb_test "info tracepoints" \
    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_c_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_char_test.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_asm_test at .*$srcfile:\[0-9\]+.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_recursion_test at .*$srcfile:\[0-9\]+" \
		"5.1c: verify actions set for first tracepoint"

gdb_trace_setactions "5.1d: set actions for second tracepoint" \
	"$trcpt2" \
	"collect gdb_short_test" "^$"

gdb_test "info tracepoints" \
    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_c_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_char_test.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_asm_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_short_test.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_recursion_test at .*$srcfile:\[0-9\]+" \
		"5.1e: verify actions set for second tracepoint"

gdb_trace_setactions "5.2a: set actions for last (default) tracepoint" \
	"" \
	"collect gdb_long_test" "^$"

gdb_test "info tracepoints" \
    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_c_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_char_test.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_asm_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_short_test.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_recursion_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_long_test." \
		"5.1e: verify actions set for second tracepoint"

# 5.3 replace actions set earlier

gdb_trace_setactions "5.3a: reset actions for first tracepoint" \
	"$trcpt1" \
	"collect gdb_struct1_test" "^$"

gdb_test "info tracepoints" \
    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_c_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_struct1_test.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_asm_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_short_test.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_recursion_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_long_test." \
		"5.3b: verify actions set for first tracepoint"

#
# test end command (all by itself)
#

# 5.4 end outside of context

gdb_test "end" "This command cannot be used at the top level." \
			"5.4: 'end' command out of context"

# 5.5 empty actions (just an end with no other actions)

gdb_trace_setactions "5.5a: set empty actions for first tracepoint" \
	"$trcpt1"

send_gdb "info tracepoints\n"
gdb_expect {
    -re "No tracepoints.*$gdb_prompt $" {
	fail "5.5c: verify NO actions for first tracepoint"
    }
    -re "Actions for.* $trcpt1:.*$gdb_prompt $" {
	fail "5.5c: verify NO actions for first tracepoint"
    }
    -re "$gdb_prompt $" {
	pass "5.5c: verify NO actions for first tracepoint"
    }
}

# 5.6 actions for invalid tracepoint number

gdb_test "actions [expr $trcpt2 + $trcpt3]" \
    "No tracepoint number [expr $trcpt2 + $trcpt3]." \
			"5.6: actions for invalid tracepoint number"

# 5.7 invalid action (other than 'collect', 'while-stepping' or 'end')
#	    "warning: .print gdb_c_test. is not a supported trace.*> $" \

gdb_trace_setactions "5.7: invalid action" \
	"$trcpt1" \
	"print gdb_c_test" \
	"`print gdb_c_test' is not a supported tracepoint action"

# 5.8 help actions (collect, while-stepping, end)

gdb_test "help actions" \
    "Specify the actions to be taken at a tracepoint.*" \
			"5.8a: help actions"

gdb_test "help collect" \
    "Specify one or more data items to be collected at a tracepoint.*" \
			"5.8b: help collect"

gdb_test "help while-stepping" \
    "Specify single-stepping behavior at a tracepoint.*" \
			"5.8c: help while-stepping"

gdb_test "help end" "Ends a list of commands or actions.*" \
			"5.8d: help end"

# 5.9 default-collect

gdb_test "set default-collect gdb_char_test, gdb_long_test - 100" \
    "" \
    "5.9a: set default-collect"

gdb_test "show default-collect" \
    "The list of expressions to collect by default is \"gdb_char_test, gdb_long_test - 100\"..*" \
    "5.9b: show default-collect"

gdb_test "set default-collect" \
    "" \
    "5.9c: set default-collect"

# 5.10 teval

gdb_test "tvariable \$tsv" \
  "Trace state variable \\\$tsv created, with initial value 0." \
  "Create a trace state variable"

gdb_trace_setactions "5.10a: set teval action for first tracepoint" \
	"$trcpt1" \
	"teval gdb_char_test" "^$"

gdb_trace_setactions "5.10a: set teval action for second tracepoint" \
	"$trcpt2" \
	"teval \$tsv += 1" "^$"

gdb_test "info tracepoints" \
    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_c_test at .*$srcfile:\[0-9\]+.
\[\t \]+teval gdb_char_test.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_asm_test at .*$srcfile:\[0-9\]+.
\[\t \]+teval \\\$tsv \\\+= 1.
\[0-9\]+\[\t \]+tracepoint     keep y.* in gdb_recursion_test at .*$srcfile:\[0-9\]+.
\[\t \]+collect gdb_long_test." \
		"5.10a: verify teval actions set for two tracepoints"