summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.trace/actions.exp
blob: 66d3d87d22e17525c9c286fed61d323fd2f68e2c (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
#   Copyright 1998 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

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

load_lib "trace-support.exp";

if $tracelevel then {
    strace $tracelevel
}

set prms_id 0
set bug_id 0

gdb_exit
gdb_start

if [istarget "m68k-*-elf"] then {
    set binfile [board_info target d490_binfile];
    set srcfile gdb_c_test.c
} else {
    set testfile "actions"
    set srcfile ${testfile}.c
    set binfile $objdir/$subdir/$testfile
    if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	    executable {debug additional_flags=-w}] != "" } {
	gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
    }
}
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" "^$"

send_gdb "info tracepoints\n"
gdb_expect {
    -re "Actions for.* $trcpt1:.*collect gdb_char_test.*$gdb_prompt $" {
	pass "5.1c: verify actions set for first tracepoint"
    }
    -re "$gdb_prompt $" {
	fail "5.1c: verify actions set for first tracepoint"
    }
}

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

send_gdb "info tracepoints\n"
gdb_expect {
    -re "Actions for.* $trcpt2:.*collect gdb_short_test.*$gdb_prompt $" {
	pass "5.1e: verify actions set for second tracepoint"
    }
    -re "$gdb_prompt $" {
	fail "5.1e: verify actions set for second tracepoint"
    }
}

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

send_gdb "info tracepoints\n"
gdb_expect {
    -re "Actions for.* $trcpt3:.*collect gdb_long_test.*$gdb_prompt $" {
	pass "5.2b: verify actions set for last (default) tracepoint"
    }
    -re "$gdb_prompt $" {
	fail "5.2b: verify actions set for last (default) tracepoint"
    }
}

# 5.3 replace actions set earlier

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

send_gdb "info tracepoints\n"
gdb_expect {
    -re "Actions for.* $trcpt1:.*collect gdb_struct1_test.*$gdb_prompt $" {
	pass "5.3b: verify actions set for first tracepoint"
    }
    -re "$gdb_prompt $" {
	fail "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" \
	"warning: .print gdb_c_test. is not a supported trace"

# 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"