]>
Commit | Line | Data |
---|---|---|
31d8bdd2 | 1 | # Copyright (C) 2003, 2004, 2006 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 | |
5 | # the Free Software Foundation; either version 2 of the License, or | |
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 | |
14 | # along with this program; if not, write to the Free Software | |
15 | # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
16 | ||
17 | # Please email any bugs, comments, and/or additions to this file to: | |
18 | # bug-gdb@gnu.org | |
19 | ||
20 | # This file is part of the gdb testsuite. | |
21 | ||
22 | if $tracelevel { | |
23 | strace $tracelevel | |
24 | } | |
25 | ||
26 | # Test i386 prologue analyzer. | |
27 | ||
28 | set prms_id 0 | |
29 | set bug_id 0 | |
30 | ||
31 | if ![istarget "i?86-*-*"] then { | |
32 | verbose "Skipping i386 prologue tests." | |
33 | return | |
34 | } | |
35 | ||
36 | set testfile "i386-prologue" | |
37 | set srcfile ${testfile}.c | |
38 | set binfile ${objdir}/${subdir}/${testfile} | |
daab1251 CV |
39 | |
40 | # some targets have leading underscores on assembly symbols. | |
41 | # TODO: detect this automatically | |
42 | set additional_flags "" | |
43 | if [istarget "i?86-*-cygwin*"] then { | |
44 | set additional_flags "additional_flags=-DSYMBOL_PREFIX=\"_\"" | |
45 | } | |
46 | ||
5598c03d DJ |
47 | # Don't use "debug", so that we don't have line information for the assembly |
48 | # fragments. | |
49 | if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list $additional_flags]] != "" } { | |
b60f0898 JB |
50 | untested i386-prologue.exp |
51 | return -1 | |
55ed7501 MK |
52 | } |
53 | ||
cf38c229 MK |
54 | |
55 | # The code used by the tests here encodes some breakpoints by using | |
56 | # inline assembler. This will generate a SIGTRAP which will be caught | |
57 | # by GDB. At that point the instruction pointer will point at the | |
58 | # next instruction, and execution can continue without any problems. | |
59 | # Some systems however (QNX Neutrino, Solaris) will adjust the | |
60 | # instruction pointer to point at the breakpoint instruction instead. | |
61 | # On these systems we cannot continue unless we skip it. This | |
62 | # procedure takes care of that. | |
63 | ||
64 | proc skip_breakpoint { msg } { | |
65 | gdb_test "if (*(unsigned char *)\$pc == 0xcc)\nset \$pc = \$pc + 1\nend" \ | |
66 | "" "skip breakpoint in ${msg}" | |
67 | } | |
68 | ||
69 | ||
55ed7501 MK |
70 | gdb_exit |
71 | gdb_start | |
72 | gdb_reinitialize_dir $srcdir/$subdir | |
73 | gdb_load ${binfile} | |
74 | ||
75 | # | |
76 | # Run to `main' where we begin our tests. | |
77 | # | |
78 | ||
79 | if ![runto_main] then { | |
80 | gdb_suppress_tests | |
81 | } | |
82 | ||
b6702b23 MK |
83 | # Testcase for standard prologue. |
84 | ||
85 | gdb_test "continue" "Program received signal SIGTRAP.*" "continue to standard" | |
86 | ||
cf38c229 MK |
87 | skip_breakpoint standard |
88 | ||
b6702b23 MK |
89 | gdb_test "backtrace 10" \ |
90 | "#0\[ \t\]*$hex in standard.*\r\n#1\[ \t\]*$hex in main.*" \ | |
91 | "backtrace in standard" | |
92 | ||
93 | gdb_test "info frame" \ | |
94 | ".*Saved registers:.*ebp at.*edi at.*eip at.*" \ | |
95 | "saved registers in standard" | |
96 | ||
31d8bdd2 MK |
97 | |
98 | # Testcase from breakpoints/2080. | |
99 | ||
100 | gdb_test "break *(stack_align + 7)" \ | |
101 | "Breakpoint \[0-9\]* at $hex" | |
102 | ||
103 | gdb_test "continue" \ | |
104 | "Breakpoint \[0-9\]*.*stack_align.*" \ | |
105 | "continue to stack_align + 7" | |
106 | ||
107 | setup_kfail *-*-* gdb/2080 | |
108 | gdb_test "backtrace 10" \ | |
109 | "#0\[ \t\]*$hex in stack_align.*\r\n#1\[ \t\]*$hex in main.*" \ | |
110 | "first backtrace in stack_align" | |
111 | ||
112 | gdb_test "continue" \ | |
113 | "Program received signal SIGTRAP.*" \ | |
114 | "continue in stack_align" | |
115 | ||
116 | skip_breakpoint stack_align | |
117 | ||
118 | setup_kfail *-*-* gdb/2080 | |
119 | gdb_test "backtrace 10" \ | |
120 | "#0\[ \t\]*$hex in stack_align.*\r\n#1\[ \t\]*$hex in main.*" \ | |
121 | "second backtrace in stack_align" | |
122 | ||
123 | setup_kfail *-*-* gdb/2080 | |
124 | gdb_test "info frame" \ | |
125 | ".*Saved registers:.*ecx at.*ebp at.*edi at.*eip at.*" \ | |
126 | "saved registers in stack_align" | |
127 | ||
128 | ||
c945b932 | 129 | # Testcase from symtab/1253. |
55ed7501 MK |
130 | |
131 | gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1253" | |
132 | ||
cf38c229 MK |
133 | skip_breakpoint gdb1253 |
134 | ||
55ed7501 MK |
135 | gdb_test "backtrace 10" \ |
136 | "#0\[ \t\]*$hex in gdb1253.*\r\n#1\[ \t\]*$hex in main.*" \ | |
137 | "backtrace in gdb1253" | |
c945b932 | 138 | |
161afb24 MK |
139 | gdb_test "info frame" \ |
140 | ".*Saved registers:.*ebp at.*edi at.*eip at.*" \ | |
141 | "saved registers in gdb1253" | |
142 | ||
31d8bdd2 | 143 | |
62104619 MK |
144 | # Testcase from backtrace/1718. |
145 | ||
146 | gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1718" | |
147 | ||
cf38c229 MK |
148 | skip_breakpoint gdb1718 |
149 | ||
62104619 MK |
150 | gdb_test "backtrace 10" \ |
151 | "#0\[ \t\]*$hex in gdb1718.*\r\n#1\[ \t\]*$hex in main.*" \ | |
152 | "backtrace in gdb1718" | |
153 | ||
154 | setup_kfail *-*-* gdb/1718 | |
155 | gdb_test "info frame" \ | |
156 | ".*Saved registers:.*esi at.*ebx at.*eip at.*" \ | |
157 | "saved registers in gdb1718" | |
158 | ||
31d8bdd2 | 159 | |
c945b932 MK |
160 | # Testcase from backtrace/1338. |
161 | ||
162 | gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1338" | |
163 | ||
cf38c229 MK |
164 | skip_breakpoint gdb1338 |
165 | ||
c945b932 MK |
166 | gdb_test "backtrace 10" \ |
167 | "#0\[ \t\]*$hex in gdb1338.*\r\n#1\[ \t\]*$hex in main.*" \ | |
168 | "backtrace in gdb1338" | |
161afb24 MK |
169 | |
170 | gdb_test "info frame" \ | |
171 | ".*Saved registers:.*ebx at.*esi at.*edi at.*eip at.*" \ | |
172 | "saved registers in gdb1338" | |
a8958849 MK |
173 | |
174 | # Testcase jump_at_beginning. | |
175 | gdb_test_multiple "break jump_at_beginning" \ | |
176 | "set breakpoint in jump_at_beginning" { | |
177 | -re "Breakpoint \[0-9\]* at ($hex).*$gdb_prompt $" { | |
178 | gdb_test "x/i $expect_out(1,string)" \ | |
179 | ".*<jump_at_beginning.*>:.*jmp.*" \ | |
180 | "check jump_at_beginning prologue end" | |
181 | } | |
182 | default { | |
183 | fail "set breakpoint in jump_at_beginning" | |
184 | } | |
185 | } |