]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.arch/i386-prologue.exp
Fix more cases of improper test names
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.arch / i386-prologue.exp
CommitLineData
618f726f 1# Copyright (C) 2003-2016 Free Software Foundation, Inc.
55ed7501
MK
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
e22f8b7c 5# the Free Software Foundation; either version 3 of the License, or
55ed7501
MK
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
e22f8b7c 14# along with this program. If not, see <http://www.gnu.org/licenses/>.
55ed7501
MK
15
16# Please email any bugs, comments, and/or additions to this file to:
17# bug-gdb@gnu.org
18
19# This file is part of the gdb testsuite.
20
55ed7501
MK
21# Test i386 prologue analyzer.
22
55ed7501 23
11fc9057 24if { ![is_x86_like_target] } then {
55ed7501
MK
25 verbose "Skipping i386 prologue tests."
26 return
27}
28
29set testfile "i386-prologue"
30set srcfile ${testfile}.c
c99dbb42 31set binfile [standard_output_file ${testfile}]
daab1251
CV
32
33# some targets have leading underscores on assembly symbols.
ee5683ab 34set additional_flags [gdb_target_symbol_prefix_flags]
daab1251 35
5598c03d
DJ
36# Don't use "debug", so that we don't have line information for the assembly
37# fragments.
38if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list $additional_flags]] != "" } {
5b362f04 39 untested "failed to compile"
b60f0898 40 return -1
55ed7501
MK
41}
42
cf38c229
MK
43
44# The code used by the tests here encodes some breakpoints by using
45# inline assembler. This will generate a SIGTRAP which will be caught
46# by GDB. At that point the instruction pointer will point at the
47# next instruction, and execution can continue without any problems.
48# Some systems however (QNX Neutrino, Solaris) will adjust the
49# instruction pointer to point at the breakpoint instruction instead.
50# On these systems we cannot continue unless we skip it. This
51# procedure takes care of that.
52
53proc skip_breakpoint { msg } {
54 gdb_test "if (*(unsigned char *)\$pc == 0xcc)\nset \$pc = \$pc + 1\nend" \
55 "" "skip breakpoint in ${msg}"
56}
57
58
55ed7501
MK
59gdb_exit
60gdb_start
61gdb_reinitialize_dir $srcdir/$subdir
62gdb_load ${binfile}
63
64#
65# Run to `main' where we begin our tests.
66#
67
68if ![runto_main] then {
69 gdb_suppress_tests
70}
71
b6702b23
MK
72# Testcase for standard prologue.
73
74gdb_test "continue" "Program received signal SIGTRAP.*" "continue to standard"
75
cf38c229
MK
76skip_breakpoint standard
77
b6702b23
MK
78gdb_test "backtrace 10" \
79 "#0\[ \t\]*$hex in standard.*\r\n#1\[ \t\]*$hex in main.*" \
80 "backtrace in standard"
81
82gdb_test "info frame" \
83 ".*Saved registers:.*ebp at.*edi at.*eip at.*" \
84 "saved registers in standard"
85
31d8bdd2 86
5eefc2b7 87# Testcase from breakpoints/2080 (when %ecx is used)
31d8bdd2 88
5eefc2b7 89gdb_test "break *(stack_align_ecx + 7)" \
31d8bdd2
MK
90 "Breakpoint \[0-9\]* at $hex"
91
92gdb_test "continue" \
5eefc2b7
JB
93 "Breakpoint \[0-9\]*.*stack_align_ecx.*" \
94 "continue to stack_align_ecx + 7"
31d8bdd2 95
31d8bdd2 96gdb_test "backtrace 10" \
5eefc2b7
JB
97 "#0\[ \t\]*$hex in stack_align_ecx.*\r\n#1\[ \t\]*$hex in main.*" \
98 "first backtrace in stack_align_ecx"
31d8bdd2
MK
99
100gdb_test "continue" \
101 "Program received signal SIGTRAP.*" \
5eefc2b7 102 "continue in stack_align_ecx"
31d8bdd2 103
5eefc2b7 104skip_breakpoint stack_align_ecx
31d8bdd2 105
31d8bdd2 106gdb_test "backtrace 10" \
5eefc2b7
JB
107 "#0\[ \t\]*$hex in stack_align_ecx.*\r\n#1\[ \t\]*$hex in main.*" \
108 "second backtrace in stack_align_ecx"
31d8bdd2 109
31d8bdd2
MK
110gdb_test "info frame" \
111 ".*Saved registers:.*ecx at.*ebp at.*edi at.*eip at.*" \
5eefc2b7
JB
112 "saved registers in stack_align_ecx"
113
114
115# Testcase from breakpoints/2080 (when %edx is used)
116
117gdb_test "break *(stack_align_edx + 7)" \
118 "Breakpoint \[0-9\]* at $hex"
119
120gdb_test "continue" \
121 "Breakpoint \[0-9\]*.*stack_align_edx.*" \
122 "continue to stack_align_edx + 7"
123
124gdb_test "backtrace 10" \
125 "#0\[ \t\]*$hex in stack_align_edx.*\r\n#1\[ \t\]*$hex in main.*" \
126 "first backtrace in stack_align_edx"
127
128gdb_test "continue" \
129 "Program received signal SIGTRAP.*" \
130 "continue in stack_align_edx"
131
132skip_breakpoint stack_align_edx
133
134gdb_test "backtrace 10" \
135 "#0\[ \t\]*$hex in stack_align_edx.*\r\n#1\[ \t\]*$hex in main.*" \
136 "second backtrace in stack_align_edx"
137
138gdb_test "info frame" \
139 ".*Saved registers:.*ecx at.*ebp at.*edi at.*eip at.*" \
140 "saved registers in stack_align_edx"
141
142
143# Testcase from breakpoints/2080 (when %eax is used)
144
145gdb_test "break *(stack_align_eax + 7)" \
146 "Breakpoint \[0-9\]* at $hex"
147
148gdb_test "continue" \
149 "Breakpoint \[0-9\]*.*stack_align_eax.*" \
150 "continue to stack_align_eax + 7"
151
152gdb_test "backtrace 10" \
153 "#0\[ \t\]*$hex in stack_align_eax.*\r\n#1\[ \t\]*$hex in main.*" \
154 "first backtrace in stack_align_eax"
155
156gdb_test "continue" \
157 "Program received signal SIGTRAP.*" \
158 "continue in stack_align_eax"
159
160skip_breakpoint stack_align_eax
161
162gdb_test "backtrace 10" \
163 "#0\[ \t\]*$hex in stack_align_eax.*\r\n#1\[ \t\]*$hex in main.*" \
164 "second backtrace in stack_align_eax"
165
166gdb_test "info frame" \
167 ".*Saved registers:.*ecx at.*ebp at.*edi at.*eip at.*" \
168 "saved registers in stack_align_eax"
31d8bdd2
MK
169
170
c945b932 171# Testcase from symtab/1253.
55ed7501
MK
172
173gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1253"
174
cf38c229
MK
175skip_breakpoint gdb1253
176
55ed7501
MK
177gdb_test "backtrace 10" \
178 "#0\[ \t\]*$hex in gdb1253.*\r\n#1\[ \t\]*$hex in main.*" \
179 "backtrace in gdb1253"
c945b932 180
161afb24
MK
181gdb_test "info frame" \
182 ".*Saved registers:.*ebp at.*edi at.*eip at.*" \
183 "saved registers in gdb1253"
184
31d8bdd2 185
62104619
MK
186# Testcase from backtrace/1718.
187
188gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1718"
189
cf38c229
MK
190skip_breakpoint gdb1718
191
62104619
MK
192gdb_test "backtrace 10" \
193 "#0\[ \t\]*$hex in gdb1718.*\r\n#1\[ \t\]*$hex in main.*" \
194 "backtrace in gdb1718"
195
bbc8b958 196setup_kfail gdb/1718 *-*-*
62104619
MK
197gdb_test "info frame" \
198 ".*Saved registers:.*esi at.*ebx at.*eip at.*" \
199 "saved registers in gdb1718"
200
31d8bdd2 201
c945b932
MK
202# Testcase from backtrace/1338.
203
204gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1338"
205
cf38c229
MK
206skip_breakpoint gdb1338
207
c945b932
MK
208gdb_test "backtrace 10" \
209 "#0\[ \t\]*$hex in gdb1338.*\r\n#1\[ \t\]*$hex in main.*" \
210 "backtrace in gdb1338"
161afb24
MK
211
212gdb_test "info frame" \
213 ".*Saved registers:.*ebx at.*esi at.*edi at.*eip at.*" \
214 "saved registers in gdb1338"
a8958849
MK
215
216# Testcase jump_at_beginning.
217gdb_test_multiple "break jump_at_beginning" \
218 "set breakpoint in jump_at_beginning" {
219 -re "Breakpoint \[0-9\]* at ($hex).*$gdb_prompt $" {
220 gdb_test "x/i $expect_out(1,string)" \
221 ".*<jump_at_beginning.*>:.*jmp.*" \
222 "check jump_at_beginning prologue end"
223 }
224 default {
225 fail "set breakpoint in jump_at_beginning"
226 }
227}