]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.btrace/function_call_history.exp
GDB copyright headers update after running GDB's copyright.py script.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.btrace / function_call_history.exp
CommitLineData
2f1d9bdd
MM
1# This testcase is part of GDB, the GNU debugger.
2#
618f726f 3# Copyright 2013-2016 Free Software Foundation, Inc.
2f1d9bdd
MM
4#
5# Contributed by Intel Corp. <christian.himpel@intel.com>
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 3 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19
20# check for btrace support
21if { [skip_btrace_tests] } { return -1 }
22
23# start inferior
24standard_testfile
25if [prepare_for_testing function_call_history.exp $testfile {} {debug}] {
26 return -1
27}
28if ![runto_main] {
29 return -1
30}
31
32# start btrace
33gdb_test_no_output "record btrace"
34
35# set bp after increment loop and continue
36set bp_location [gdb_get_line_number "bp.1" $testfile.c]
37gdb_breakpoint $bp_location
38gdb_continue_to_breakpoint "cont to $bp_location" ".*$testfile.c:$bp_location.*"
39
724c7dd8 40proc rec_fun_all {} {
3c724c8c 41 gdb_test "record function-call-history 1" [multi_line \
5de9129b
MM
42 "1\tmain" \
43 "2\tinc" \
44 "3\tmain" \
45 "4\tinc" \
46 "5\tmain" \
47 "6\tinc" \
48 "7\tmain" \
49 "8\tinc" \
50 "9\tmain" \
51 "10\tinc" \
52 "11\tmain" \
53 "12\tinc" \
54 "13\tmain" \
55 "14\tinc" \
56 "15\tmain" \
57 "16\tinc" \
58 "17\tmain" \
59 "18\tinc" \
60 "19\tmain" \
61 "20\tinc" \
3c724c8c 62 "21\tmain"]
724c7dd8
MM
63}
64
2f1d9bdd
MM
65# show function call history with unlimited size, we expect to see all 21 entries
66gdb_test_no_output "set record function-call-history-size 0"
724c7dd8 67with_test_prefix "size unlimited" rec_fun_all
2f1d9bdd
MM
68
69# show function call history with size of 21, we expect to see all 21 entries
70gdb_test_no_output "set record function-call-history-size 21"
724c7dd8 71with_test_prefix "size 21" rec_fun_all
2f1d9bdd
MM
72
73# show first 15 entries
74gdb_test_no_output "set record function-call-history-size 15"
3c724c8c 75gdb_test "record function-call-history 1" [multi_line \
5de9129b
MM
76 "1\tmain" \
77 "2\tinc" \
78 "3\tmain" \
79 "4\tinc" \
80 "5\tmain" \
81 "6\tinc" \
82 "7\tmain" \
83 "8\tinc" \
84 "9\tmain" \
85 "10\tinc" \
86 "11\tmain" \
87 "12\tinc" \
88 "13\tmain" \
89 "14\tinc" \
3c724c8c 90 "15\tmain"] "forward - 1"
2f1d9bdd
MM
91
92# show last 6 entries
3c724c8c 93gdb_test "record function-call-history +" [multi_line \
5de9129b
MM
94 "16\tinc" \
95 "17\tmain" \
96 "18\tinc" \
97 "19\tmain" \
98 "20\tinc" \
3c724c8c 99 "21\tmain"] "forward - 2"
2f1d9bdd
MM
100
101# moving further should not work
724c7dd8 102gdb_test "record function-call-history +" "At the end of the branch trace record\\." "forward - 3"
2f1d9bdd
MM
103
104# make sure we cannot move any further a second time
724c7dd8 105gdb_test "record function-call-history +" "At the end of the branch trace record\\." "forward - 4"
2f1d9bdd
MM
106
107# moving back showing the latest 15 function calls
3c724c8c 108gdb_test "record function-call-history -" [multi_line \
5de9129b
MM
109 "7\tmain" \
110 "8\tinc" \
111 "9\tmain" \
112 "10\tinc" \
113 "11\tmain" \
114 "12\tinc" \
115 "13\tmain" \
116 "14\tinc" \
117 "15\tmain" \
118 "16\tinc" \
119 "17\tmain" \
120 "18\tinc" \
121 "19\tmain" \
122 "20\tinc" \
3c724c8c 123 "21\tmain"] "backward - 1"
2f1d9bdd
MM
124
125# moving further back shows the 6 first function calls
3c724c8c 126gdb_test "record function-call-history -" [multi_line \
5de9129b
MM
127 "1\tmain" \
128 "2\tinc" \
129 "3\tmain" \
130 "4\tinc" \
131 "5\tmain" \
3c724c8c 132 "6\tinc"] "backward - 2"
2f1d9bdd
MM
133
134# moving further back shouldn't work
724c7dd8 135gdb_test "record function-call-history -" "At the start of the branch trace record\\." "backward - 3"
2f1d9bdd
MM
136
137# make sure we cannot move any further back
724c7dd8 138gdb_test "record function-call-history -" "At the start of the branch trace record\\." "backward - 4"
2f1d9bdd 139
8710b709
MM
140# don't mess around with path names
141gdb_test_no_output "set filename-display basename"
142
2f1d9bdd 143# moving forward again, but this time with file and line number, expected to see the first 15 entries
3c724c8c 144gdb_test "record function-call-history /l +" [multi_line \
8710b709
MM
145 "\[0-9\]*\tmain\tat $srcfile:40,41" \
146 "\[0-9\]*\tinc\tat $srcfile:22,24" \
147 "\[0-9\]*\tmain\tat $srcfile:40,41" \
148 "\[0-9\]*\tinc\tat $srcfile:22,24" \
149 "\[0-9\]*\tmain\tat $srcfile:40,41" \
150 "\[0-9\]*\tinc\tat $srcfile:22,24" \
151 "\[0-9\]*\tmain\tat $srcfile:40,41" \
152 "\[0-9\]*\tinc\tat $srcfile:22,24" \
153 "\[0-9\]*\tmain\tat $srcfile:40,41" \
154 "\[0-9\]*\tinc\tat $srcfile:22,24" \
155 "\[0-9\]*\tmain\tat $srcfile:40,41" \
156 "\[0-9\]*\tinc\tat $srcfile:22,24" \
157 "\[0-9\]*\tmain\tat $srcfile:40,41" \
158 "\[0-9\]*\tinc\tat $srcfile:22,24" \
159 "\[0-9\]*\tmain\tat $srcfile:40,41" \
3c724c8c 160 ] "forward /l - 1"
2f1d9bdd
MM
161
162# moving forward and expect to see the latest 6 entries
3c724c8c 163gdb_test "record function-call-history /l +" [multi_line \
8710b709
MM
164 "\[0-9\]*\tinc\tat $srcfile:22,24" \
165 "\[0-9\]*\tmain\tat $srcfile:40,41" \
166 "\[0-9\]*\tinc\tat $srcfile:22,24" \
167 "\[0-9\]*\tmain\tat $srcfile:40,41" \
168 "\[0-9\]*\tinc\tat $srcfile:22,24" \
169 "\[0-9\]*\tmain\tat $srcfile:40,43" \
3c724c8c 170 ] "forward /l - 2"
2f1d9bdd
MM
171
172# moving further forward shouldn't work
724c7dd8
MM
173gdb_test "record function-call-history /l +" "At the end of the branch trace record\\." "forward /l - 3"
174gdb_test "record function-call-history /l" "At the end of the branch trace record\\." "forward /l - 4"
175
3c724c8c 176set expected_range [multi_line \
5de9129b
MM
177 "4\tinc" \
178 "5\tmain" \
179 "6\tinc" \
180 "7\tmain" \
181 "8\tinc" \
182 "9\tmain" \
3c724c8c 183 "10\tinc"]
2f1d9bdd
MM
184
185# show functions in instruction range
0688d04e 186gdb_test "record function-call-history 4,10" $expected_range
5de9129b 187gdb_test "record function-call-history 4,+7" $expected_range
0688d04e
MM
188gdb_test "record function-call-history 10,-7" $expected_range
189gdb_test "record function-call-history 4,4" "4\tinc\r"
2f1d9bdd
MM
190
191# set bp after fib recursion and continue
192set bp_location [gdb_get_line_number "bp.2" $testfile.c]
193gdb_breakpoint $bp_location
194gdb_continue_to_breakpoint "cont to $bp_location" ".*$testfile.c:$bp_location.*"
195
23a7fe75
MM
196# at this point we expect to have main, fib, ..., fib, main, where fib occurs 9 times,
197# so we limit the output to only show the latest 11 function calls
198gdb_test_no_output "set record function-call-history-size 11"
3c724c8c 199gdb_test "record function-call-history" [multi_line \
5de9129b 200 "21\tmain" \
23a7fe75
MM
201 "22\tfib" \
202 "23\tfib" \
203 "24\tfib" \
204 "25\tfib" \
205 "26\tfib" \
206 "27\tfib" \
207 "28\tfib" \
208 "29\tfib" \
5de9129b 209 "30\tfib" \
3c724c8c 210 "31\tmain"] "recursive"
8710b709
MM
211
212# show indented function call history for fib
3c724c8c 213gdb_test "record function-call-history /c 21, +11" [multi_line \
8710b709
MM
214 "21\tmain" \
215 "22\t fib" \
216 "23\t fib" \
217 "24\t fib" \
218 "25\t fib" \
219 "26\t fib" \
220 "27\t fib" \
221 "28\t fib" \
222 "29\t fib" \
223 "30\t fib" \
224 "31\tmain" \
3c724c8c 225 ] "indented"
8710b709
MM
226
227# make sure we can handle incomplete trace with respect to indentation
228if ![runto_main] {
229 return -1
230}
231# navigate to the fib in line 24 above
232gdb_breakpoint fib
233gdb_continue_to_breakpoint "cont to fib.1"
234gdb_continue_to_breakpoint "cont to fib.2"
235gdb_continue_to_breakpoint "cont to fib.3"
236gdb_continue_to_breakpoint "cont to fib.4"
237
238# start tracing
239gdb_test_no_output "record btrace"
240
241# continue until line 30 above
242delete_breakpoints
243set bp_location [gdb_get_line_number "bp.2" $testfile.c]
244gdb_breakpoint $bp_location
245gdb_continue_to_breakpoint "cont to bp.2" ".*$testfile.c:$bp_location\r\n.*"
246
247# let's look at the trace. we expect to see the tail of the above listing.
3c724c8c 248gdb_test "record function-call-history /c" [multi_line \
8710b709
MM
249 "1\t fib" \
250 "2\t fib" \
251 "3\t fib" \
252 "4\t fib" \
253 "5\t fib" \
254 "6\tmain" \
3c724c8c 255 ] "indented tail"