summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/skip.exp
blob: 7c699eb15221e039ed11fec8729c0f95a7bef18c (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
#   Copyright 2011 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 Justin Lebar. (justin.lebar@gmail.com)

if { [prepare_for_testing skip.exp "skip" \
                          {skip.c skip1.c } \
                          {debug nowarnings}] } {
    return -1
}

set srcfile skip.c
set srcfile1 skip1.c

#
# Right after we start gdb, there's no default file or function to skip.
#
gdb_test "skip file" "No default file now."
gdb_test "skip function" "No default function now."
gdb_test "skip" "No default function now."

if ![runto_main] { fail "skip tests suppressed" }

#
# Test |info skip| with an empty skiplist.
#
gdb_test "info skip" "Not skipping any files or functions\." "info skip empty"

#
# Create a skiplist entry for the current file and function.
#
gdb_test "skip file" "File .*$srcfile will be skipped when stepping\."
gdb_test "skip" "Function main at .* will be skipped when stepping\."

#
# Create a skiplist entry for a specified file and function.
#
gdb_test "skip file skip1.c" "File .*$srcfile1 will be skipped when stepping\."
gdb_test "skip function baz" "Function baz at .* will be skipped when stepping\."

#
# Test bad skiplist entry modification commands
#
gdb_test "skip enable 999" "No skiplist entries found with number 999."
gdb_test "skip disable 999" "No skiplist entries found with number 999."
gdb_test "skip delete 999" "No skiplist entries found with number 999."
gdb_test "skip enable a" "Args must be numbers or '\\$' variables."
gdb_test "skip disable a" "Args must be numbers or '\\$' variables."
gdb_test "skip delete a" "Args must be numbers or '\\$' variables."

#
# Ask for info on a skiplist entry which doesn't exist.
#
gdb_test "info skip 999" "No skiplist entries found with number 999."

#
# Does |info skip| look right?
#
gdb_test "info skip" \
  "Num\\s+Type\\s+Enb\\s+Address\\s+What\\s*
1\\s+file\\s+y\\s+.*$srcfile\\s*
2\\s+function\\s+y\\s+0x\[0-9a-f\]+ main at .*$srcfile:\[0-9\]+\\s*
3\\s+file\\s+y\\s+.*$srcfile1\\s*
4\\s+function\\s+y\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*"

#
# Right now, we have an outstanding skiplist entry on both source
# files, so when we step into the first line in main(), we should step
# right over it and go to the second line of main().
#

if ![runto_main] { fail "skip tests suppressed" }
gdb_test "step"
gdb_test "bt" "\\s*\\#0\\s+main.*" "step after all ignored"

#
# Now remove skip.c from the skiplist.  Our first step should take us
# into foo(), and our second step should take us to the next line in
# main().
#
gdb_test "skip delete 1"
# Check that entry 1 is missing from |info skip|
gdb_test "info skip" \
  "Num\\s+Type\\s+Enb\\s+Address\\s+What\\s*
2\\s+function\\s+y\\s+0x\[0-9a-f\]+ main at .*$srcfile:\[0-9\]+\\s*
3\\s+file\\s+y\\s+.*$srcfile1\\s*
4\\s+function\\s+y\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*"

if ![runto_main] { fail "skip tests suppressed" }
gdb_test "step" "foo \\(\\) at.*" "step after deleting 1 (1)"
gdb_test "step"; # Return from foo()
gdb_test "step" "main \\(\\) at.*" "step after deleting 1 (2)"

#
# Now disable the skiplist entry for  skip1.c.  We should now
# step into foo(), then into bar(), but not into baz().
#
gdb_test "skip disable 3"
# Is entry 3 disabled in |info skip|?
gdb_test "info skip 3" ".*\\n3\\s+file\\s+n.*" \
  "info skip shows entry as disabled"

if ![runto_main] { fail "skip tests suppressed" }
gdb_test "step" "bar \\(\\) at.*" "step after disabling 3 (1)"
gdb_test "step"; # Return from foo()
gdb_test "step" "foo \\(\\) at.*" "step after disabling 3 (2)"
gdb_test "step"; # Return from bar()
gdb_test "step" "main \\(\\) at.*" "step after disabling 3 (3)"

#
# Enable skiplist entry 3 and make sure we step over it like before.
#
gdb_test "skip enable 3"
# Is entry 3 enabled in |info skip|?
gdb_test "info skip 3" ".*\\n3\\s+file\\s+y.*" \
  "info skip shows entry as enabled"
if ![runto_main] { fail "skip tests suppressed" }
gdb_test "step" "foo \\(\\) at.*" "step after deleting 1 (1)"
gdb_test "step"; # Return from foo()
gdb_test "step" "main \\(\\) at.*" "step after deleting 1 (2)"

gdb_test "skip disable"
gdb_test "info skip" \
  "Num\\s+Type\\s+Enb\\s+Address\\s+What\\s*
2\\s+function\\s+n\\s+0x\[0-9a-f\]+ main at .*$srcfile:\[0-9\]+\\s*
3\\s+file\\s+n\\s+.*$srcfile1\\s*
4\\s+function\\s+n\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*" \
  "info skip after disabling all"

gdb_test "skip enable"
gdb_test "info skip" \
  "Num\\s+Type\\s+Enb\\s+Address\\s+What\\s*
2\\s+function\\s+y\\s+0x\[0-9a-f\]+ main at .*$srcfile:\[0-9\]+\\s*
3\\s+file\\s+y\\s+.*$srcfile1\\s*
4\\s+function\\s+y\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*" \
  "info skip after enabling all"

gdb_test "skip disable 4 2-3"
gdb_test "info skip" \
  "Num\\s+Type\\s+Enb\\s+Address\\s+What\\s*
2\\s+function\\s+n\\s+0x\[0-9a-f\]+ main at .*$srcfile:\[0-9\]+\\s*
3\\s+file\\s+n\\s+.*$srcfile1\\s*
4\\s+function\\s+n\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*" \
  "info skip after disabling 4 2-3"

gdb_test "skip enable 2-3"
gdb_test "info skip" \
  "Num\\s+Type\\s+Enb\\s+Address\\s+What\\s*
2\\s+function\\s+y\\s+0x\[0-9a-f\]+ main at .*$srcfile:\[0-9\]+\\s*
3\\s+file\\s+y\\s+.*$srcfile1\\s*
4\\s+function\\s+n\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*" \
  "info skip after enabling 2-3"

gdb_test "info skip 2-3" \
  "Num\\s+Type\\s+Enb\\s+Address\\s+What\\s*
2\\s+function\\s+y\\s+0x\[0-9a-f\]+ main at .*$srcfile:\[0-9\]+\\s*
3\\s+file\\s+y\\s+.*$srcfile1\\s*" \
  "info skip 2-3"

gdb_test "skip delete 2 3"
gdb_test "info skip" \
  "4\\s+function\\s+n\\s+0x\[0-9a-f\]+ baz at .*$srcfile1:\[0-9\]+\\s*" \
  "info skip after deleting 2 3"

gdb_test "skip delete"
gdb_test "info skip" "Not skipping any files or functions\." \
  "info skip after deleting all"