1 # This testcase is part of GDB
, the GNU debugger.
3 # Copyright
1996, 1997, 1999, 2003, 2004 Free Software Foundation
, Inc.
5 # This
program is free software
; you can redistribute it and
/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation
; either version
2 of the License
, or
8 #
(at your option
) any later version.
10 # This
program is distributed in the hope that it will be useful
,
11 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License
for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this
program; if not
, write to the Free Software
17 # Foundation
, Inc.
, 59 Temple Place
- Suite
330, Boston
, MA
02111-1307, USA.
19 # Please email
any bugs
, comments
, and
/or additions to this file to
:
20 # bug
-gdb@prep.ai.mit.edu
29 # Some targets can
't call functions, so don't even bother with this
32 if [target_info
exists gdb
,cannot_call_functions
] {
34 fail
"This target can not call functions"
38 set testfile
"structs"
39 set srcfile $
{testfile
}.c
40 set binfile $
{objdir
}/$
{subdir
}/$
{testfile
}
42 # Create and source the file that provides information about the
43 # compiler used to
compile the test case.
45 if [get_compiler_info $
{binfile
}] {
49 #
Compile a variant of structs.c using TYPES to specify the type of
50 # the first N struct elements
(the remaining elements take the type of
51 # the last TYPES field
). Run the compmiled
program up to
"main".
52 # Also updates the global
"testfile" to reflect the most recent build.
54 proc start_structs_test
{ types
} {
63 # Create the additional flags
65 set testfile
"structs"
67 for {set n
0} {$n
<[llength $
{types
}]} {incr n
} {
69 set t
[lindex $
{types
} $n
]
70 lappend flags
"additional_flags=-Dt${m}=${t}"
71 append testfile
"-" "$t"
74 set binfile $
{objdir
}/$
{subdir
}/$
{testfile
}
75 if { [gdb_compile
"${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags}"] != "" } {
76 # built the second test case since we can
't use prototypes
77 warning "Prototypes not supported, rebuilding with -DNO_PROTOTYPES"
78 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags} additional_flags=-DNO_PROTOTYPES"] != "" } {
79 gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
83 # Start with a fresh gdb.
86 gdb_reinitialize_dir $srcdir/$subdir
89 # Make certain that the output is consistent
90 gdb_test "set print sevenbit-strings" "" \
91 "set print sevenbit-strings; ${testfile}"
92 gdb_test "set print address off" "" \
93 "set print address off; ${testfile}"
94 gdb_test "set width 0" "" \
95 "set width 0; ${testfile}"
98 if { ![runto_main] } then {
102 # Get the debug format
105 # check that at the struct containing all the relevant types is correct
106 set foo_t "type = struct struct[llength ${types}] \{"
107 for {set n 0} {$n<[llength ${types}]} {incr n} {
108 append foo_t "\[\r\n \]+[lindex ${types} $n] [i2a $n];"
110 append foo_t "\[\r\n \]+\}"
111 gdb_test "ptype foo[llength ${types}]" "${foo_t}" \
112 "ptype foo[llength ${types}]; ${testfile}"
115 # The expected value for fun${n}, L${n} and foo${n}. First element is
116 # empty to make indexing easier. "foo" returns the modified value,
117 # "zed" returns the invalid value.
123 "{a = 97 'a
', b = 50 '2'}"
124 "{a = 49 '1', b = 98 'b
', c = 51 '3'}"
125 "{a = 97 'a
', b = 50 '2', c = 99 'c
', d = 52 '4'}"
126 "{a = 49 '1', b = 98 'b
', c = 51 '3', d = 100 'd
', e = 53 '5'}"
127 "{a = 97 'a
', b = 50 '2', c = 99 'c
', d = 52 '4', e = 101 'e
', f = 54 '6'}"
128 "{a = 49 '1', b = 98 'b
', c = 51 '3', d = 100 'd
', e = 53 '5', f = 102 'f
', g = 55 '7'}"
129 "{a = 97 'a
', b = 50 '2', c = 99 'c
', d = 52 '4', e = 101 'e
', f = 54 '6', g = 103 'g
', h = 56 '8'}"
130 "{a = 49 '1', b = 98 'b
', c = 51 '3', d = 100 'd
', e = 53 '5', f = 102 'f
', g = 55 '7', h = 104 'h
', i = 57 '9'}"
131 "{a = 97 'a
', b = 50 '2', c = 99 'c
', d = 52 '4', e = 101 'e
', f = 54 '6', g = 103 'g
', h = 56 '8', i = 105 'i
', j = 65 'A
'}"
132 "{a = 49 '1', b = 98 'b
', c = 51 '3', d = 100 'd
', e = 53 '5', f = 102 'f
', g = 55 '7', h = 104 'h
', i = 57 '9', j = 106 'j
', k = 66 'B
'}"
133 "{a = 97 'a
', b = 50 '2', c = 99 'c
', d = 52 '4', e = 101 'e
', f = 54 '6', g = 103 'g
', h = 56 '8', i = 105 'i
', j = 65 'A
', k = 107 'k
', l = 67 'C
'}"
134 "{a = 49 '1', b = 98 'b
', c = 51 '3', d = 100 'd
', e = 53 '5', f = 102 'f
', g = 55 '7', h = 104 'h
', i = 57 '9', j = 106 'j
', k = 66 'B
', l = 108 'l
', m = 68 'D
'}"
135 "{a = 97 'a
', b = 50 '2', c = 99 'c
', d = 52 '4', e = 101 'e
', f = 54 '6', g = 103 'g
', h = 56 '8', i = 105 'i
', j = 65 'A
', k = 107 'k
', l = 67 'C
', m = 109 'm
', n = 69 'E
'}"
136 "{a = 49 '1', b = 98 'b
', c = 51 '3', d = 100 'd
', e = 53 '5', f = 102 'f
', g = 55 '7', h = 104 'h
', i = 57 '9', j = 106 'j
', k = 66 'B
', l = 108 'l
', m = 68 'D
', n = 110 'n
', o = 70 'F
'}"
137 "{a = 97 'a
', b = 50 '2', c = 99 'c
', d = 52 '4', e = 101 'e
', f = 54 '6', g = 103 'g
', h = 56 '8', i = 105 'i
', j = 65 'A
', k = 107 'k
', l = 67 'C
', m = 109 'm
', n = 69 'E
', o = 111 'o
', p = 71 'G
'}"
138 "{a = 49 '1', b = 98 'b
', c = 51 '3', d = 100 'd
', e = 53 '5', f = 102 'f
', g = 55 '7', h = 104 'h
', i = 57 '9', j = 106 'j
', k = 66 'B
', l = 108 'l
', m = 68 'D
', n = 110 'n
', o = 70 'F
', p = 112 'p
', q = 72 'H
'}"
146 "{a = 90 'Z
', b = 90 'Z
'}"
147 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
'}"
148 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
'}"
149 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
'}"
150 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
'}"
151 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
'}"
152 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
'}"
153 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
'}"
154 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
', j = 90 'Z
'}"
155 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
', j = 90 'Z
', k = 90 'Z
'}"
156 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
', j = 90 'Z
', k = 90 'Z
', l = 90 'Z
'}"
157 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
', j = 90 'Z
', k = 90 'Z
', l = 90 'Z
', m = 90 'Z
'}"
158 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
', j = 90 'Z
', k = 90 'Z
', l = 90 'Z
', m = 90 'Z
', n = 90 'Z
'}"
159 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
', j = 90 'Z
', k = 90 'Z
', l = 90 'Z
', m = 90 'Z
', n = 90 'Z
', o = 90 'Z
'}"
160 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
', j = 90 'Z
', k = 90 'Z
', l = 90 'Z
', m = 90 'Z
', n = 90 'Z
', o = 90 'Z
', p = 90 'Z
'}"
161 "{a = 90 'Z
', b = 90 'Z
', c = 90 'Z
', d = 90 'Z
', e = 90 'Z
', f = 90 'Z
', g = 90 'Z
', h = 90 'Z
', i = 90 'Z
', j = 90 'Z
', k = 90 'Z
', l = 90 'Z
', m = 90 'Z
', n = 90 'Z
', o = 90 'Z
', p = 90 'Z
', q = 90 'Z
'}"
169 "{a = \[^,\}\]*, b = \[^,\}\]*}"
170 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*}"
171 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*}"
172 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*}"
173 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*}"
174 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*}"
175 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*}"
176 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*}"
177 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*, j = \[^,\}\]*}"
178 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*, j = \[^,\}\]*, k = \[^,\}\]*}"
179 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*, j = \[^,\}\]*, k = \[^,\}\]*, l = \[^,\}\]*}"
180 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*, j = \[^,\}\]*, k = \[^,\}\]*, l = \[^,\}\]*, m = \[^,\}\]*}"
181 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*, j = \[^,\}\]*, k = \[^,\}\]*, l = \[^,\}\]*, m = \[^,\}\]*, n = \[^,\}\]*}"
182 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*, j = \[^,\}\]*, k = \[^,\}\]*, l = \[^,\}\]*, m = \[^,\}\]*, n = \[^,\}\]*, o = \[^,\}\]*}"
183 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*, j = \[^,\}\]*, k = \[^,\}\]*, l = \[^,\}\]*, m = \[^,\}\]*, n = \[^,\}\]*, o = \[^,\}\]*, p = \[^,\}\]*}"
184 "{a = \[^,\}\]*, b = \[^,\}\]*, c = \[^,\}\]*, d = \[^,\}\]*, e = \[^,\}\]*, f = \[^,\}\]*, g = \[^,\}\]*, h = \[^,\}\]*, i = \[^,\}\]*, j = \[^,\}\]*, k = \[^,\}\]*, l = \[^,\}\]*, m = \[^,\}\]*, n = \[^,\}\]*, o = \[^,\}\]*, p = \[^,\}\]*, q = \[^,\}\]*}"
188 # Given N (0..25), return the corresponding alphabetic letter in lower
189 # or upper case. This is ment to be i18n proof.
192 return [string range "abcdefghijklmnopqrstuvwxyz" $n $n]
196 return [string toupper [i2a $n]]
200 # Use the file name, compiler and tuples to set up any needed KFAILs.
202 proc setup_kfails { file tuples bug } {
204 if [string match $file $testfile] {
205 foreach f $tuples { setup_kfail $f $bug }
209 proc setup_compiler_kfails { file compiler format tuples bug } {
211 if {[string match $file $testfile] && [test_compiler_info $compiler] && [test_debug_format $format]} {
212 foreach f $tuples { setup_kfail $f $bug }
216 # Test GDB's ability to make inferior function calls to functions
217 # returning
(or passing in a single structs.
219 # N identifies the number of elements in the struct that will be used
220 #
for the test case. FAILS is a list of target tuples that will fail
223 # start_structs_test
() will have previously built a
program with a
224 # specified combination of types
for those elements. To ensure
225 # robustness of the output
, "p/c" is used.
227 # This tests the code paths
"which return-value convention?" and
228 #
"extract return-value from registers" called by "infcall.c".
230 proc test_struct_calls
{ n
} {
234 # Check that GDB can always extract a struct
-return value from an
235 # inferior function
call. Since GDB always knows the location of an
236 # inferior function
call's return value these should never fail
238 # Implemented by calling the parameterless function "fun$N" and then
239 # examining the return value printed by GDB.
241 set tests "call $n ${testfile}"
243 # Call fun${n}, checking the printed return-value.
244 setup_compiler_kfails structs-tc-tll gcc-3-3-* "DWARF 2" i*86-*-* gdb/1455
245 setup_compiler_kfails structs-tc-td gcc-3-3-* "DWARF 2" i*86-*-* gdb/1455
246 gdb_test "p/c fun${n}()" "[foo ${n}]" "p/c fun<n>(); ${tests}"
248 # Check that GDB can always pass a structure to an inferior function.
249 # This test can never fail.
251 # Implemented by calling the one parameter function "Fun$N" which
252 # stores its parameter in the global variable "L$N". GDB then
253 # examining that global to confirm that the value is as expected.
255 gdb_test "call Fun${n}(foo${n})" "" "call Fun<n>(foo<n>); ${tests}"
256 setup_compiler_kfails structs-tc-tll gcc-3-3-* "DWARF 2" i*86-*-* gdb/1455
257 setup_compiler_kfails structs-tc-td gcc-3-3-* "DWARF 2" i*86-*-* gdb/1455
258 gdb_test "p/c L${n}" [foo ${n}] "p/c L<n>; ${tests}"
261 # Test GDB's ability to both
return a function
(with
"return" or
262 #
"finish") and correctly extract/store any corresponding
265 # Check that GDB can consistently extract
/store structure
return
266 #
values. There are two cases
- returned in registers and returned in
267 # memory.
For the latter case
, the
return value can
't be found and a
268 # failure is "expected". However GDB must still both return the
269 # function and display the final source and line information.
271 # N identifies the number of elements in the struct that will be used
272 # for the test case. FAILS is a list of target tuples that will fail
275 # This tests the code paths "which return-value convention?", "extract
276 # return-value from registers", and "store return-value in registers".
277 # Unlike "test struct calls", this test is expected to "fail" when the
278 # return-value is in memory (GDB can't find the location
). The test
279 # is in three parts
: test
"return"; test "finish"; check that the two
280 # are consistent. GDB can sometimes work
for one command and not the
283 proc test_struct_returns
{ n
} {
287 set tests
"return $n ${testfile}"
290 # Check that
"return" works.
292 # GDB must always force the
return of a function that has
293 # a struct result. Dependant
on the ABI
, it may
, or may not be
294 # possible to store the
return value in a register.
296 # The relevant code looks like
"L{n} = fun{n}()". The test forces
297 #
"fun{n}" to "return" with an explicit value. Since that code
298 # snippet will store the the returned value in
"L{n}" the return
299 # is tested by examining
"L{n}". This assumes that the
300 # compiler implemented this as fun
{n
}(&L
{n
}) and hence that when
301 # the value isn
't stored "L{n}" remains unchanged. Also check for
302 # consistency between this and the "finish" case.
304 # Get into a call of fun${n}
305 gdb_test "advance fun${n}" \
306 "fun${n} .*\[\r\n\]+\[0-9\].*return foo${n}.*" \
307 "advance to fun<n> for return; ${tests}"
309 # Check that the program invalidated the relevant global.
310 gdb_test "p/c L${n}" " = [zed $n]" "zed L<n> for return; ${tests}"
312 # Force the "return". This checks that the return is always
313 # performed, and that GDB correctly reported this to the user.
314 # GDB 6.0 and earlier, when the return-value's location wasn
't
315 # known, both failed to print a final "source and line" and misplaced
316 # the frame ("No frame").
318 # The test is writen so that it only reports one FAIL/PASS for the
319 # entire operation. The value returned is checked further down.
320 # "return_value_known", if non-zero, indicates that GDB knew where
321 # the return value was located.
323 set test "return foo<n>; ${tests}"
324 set return_value_known 1
325 set return_value_unimplemented 0
326 gdb_test_multiple "return foo${n}" "${test}" {
328 # Ulgh, a struct return, remember this (still need prompt).
329 set return_value_known 0
332 -re "A structure or union" {
333 # Ulgh, a struct return, remember this (still need prompt).
334 set return_value_known 0
335 # Double ulgh. Architecture doesn't use return_value and
336 # hence hasn
't implemented small structure return.
337 set return_value_unimplemented 1
340 -re "Make fun${n} return now.*y or n. $" {
341 gdb_test_multiple "y" "${test}" {
342 -re "L${n} *= fun${n}.*${gdb_prompt} $" {
343 # Need to step off the function call
344 gdb_test "next" "L.* *= fun.*" "${test}"
346 -re "L[expr ${n} + 1] *= fun[expr ${n} + 1].*${gdb_prompt} $" {
353 # Check that the return-value is as expected. At this stage we're
354 # just checking that GDB has returned a value consistent with
355 #
"return_value_known" set above.
357 # Note that
, when return_value_known is false
, we can
't make any
358 # assumptions at all about the value L<n>:
360 # - If the caller passed the address of L<n> directly as fun<n>'s
361 #
return value buffer
, then L
<n
> will be unchanged
, because we
362 # forced fun
<n
> to
return before it could store anything in it.
364 #
- If the caller passed the address of some temporary buffer to
365 # fun
<n
>, and
then copied the buffer into L
<n
>, then L
<n
> will
366 # have been overwritten with whatever garbage was in the
367 # uninitialized buffer.
369 #
- However
, if the temporary buffer just happened to have the
370 #
"right" value of foo<n> in it, then L<n> will, in fact, have
371 # the value you
'd expect to see if the 'return' had worked!
372 # This has actually been observed to happen on the Renesas M32C.
374 # So, really, anything is acceptable unless return_value_known is
377 set test "value foo<n> returned; ${tests}"
378 gdb_test_multiple "p/c L${n}" "${test}" {
379 -re " = [foo ${n}].*${gdb_prompt} $" {
380 # This answer is okay regardless of whether GDB claims to
381 # have set the return value: if it did, then this is what
382 # we expected; and if it didn't
, then any answer is okay.
385 -re
" = [any $n].*${gdb_prompt} $" {
386 if $return_value_known
{
387 # This contradicts the above claim that GDB knew
388 # the location of the
return value.
391 # We expected L$
{n
} to be
set to garbage
, so
any
392 # answer is acceptable.
396 -re
".*${gdb_prompt} $" {
397 if $return_value_unimplemented
{
398 # What a suprize. The architecture hasn
't implemented
399 # return_value, and hence has to fail.
400 kfail "$test" gdb/1444
407 # Check that a "finish" works.
409 # This is almost but not quite the same as "call struct funcs".
410 # Architectures can have subtle differences in the two code paths.
412 # The relevant code snippet is "L{n} = fun{n}()". The program is
413 # advanced into a call to "fun{n}" and then that function is
414 # finished. The returned value that GDB prints, reformatted using
417 # Get into "fun${n}()".
418 gdb_test "advance fun${n}" \
419 "fun${n} .*\[\r\n\]+\[0-9\].*return foo${n}.*" \
420 "advance to fun<n> for finish; ${tests}"
422 # Check that the program invalidated the relevant global.
423 gdb_test "p/c L${n}" " = [zed $n]" "zed L<n> for finish; ${tests}"
425 # Finish the function, set 'finish_value_known
" to non-empty if
426 # the
return-value was found.
428 set test
"finish foo<n>; ${tests}"
429 set finish_value_known
1
430 gdb_test_multiple
"finish" "${test}" {
431 -re
"Value returned is .*${gdb_prompt} $" {
434 -re
"Cannot determine contents.*${gdb_prompt} $" {
435 # Expected bad value.
For the moment this is ok.
436 set finish_value_known
0
441 # Re
-print the last
(return-value
) using the more robust
442 #
"p/c". If no return value was found, the 'Z' from the previous
443 # check that the
variable was cleared
, is printed.
444 set test
"value foo<n> finished; ${tests}"
445 gdb_test_multiple
"p/c" "${test}" {
446 -re
"[foo ${n}]\[\r\n\]+${gdb_prompt} $" {
447 if $finish_value_known
{
450 # This contradicts the above claim that GDB didn
't
451 # know the location of the return-value.
455 -re "[zed ${n}]\[\r\n\]+${gdb_prompt} $" {
456 # The value didn't
get found. This is
"expected".
457 if $finish_value_known
{
458 # This contradicts the above claim that GDB did
459 # know the location of the
return-value.
467 # Finally
, check that
"return" and finish" have consistent
470 # Since
"finish" works in more cases than "return" (see
471 # RETURN_VALUE_ABI_RETURNS_ADDRESS and
472 # RETURN_VALUE_ABI_PRESERVES_ADDRESS
), the
"return" value being
473 # known implies that the
"finish" value is known (but not the
476 set test
"return value known implies finish value known; ${tests}"
477 if {$return_value_known
&& ! $finish_value_known
} {
478 kfail gdb
/1444 "${test}"
484 # ABIs pass anything
>8 or
>16 bytes in memory but below that things
485 # randomly use register and
/and structure conventions. Check all
486 # possible sized char structs in that range. But only a restricted
487 # range of the other types.
489 # NetBSD
/PPC returns
"unnatural" (3, 5, 6, 7) sized structs in memory.
491 # d10v is weird.
5/6 byte structs go in memory.
2 or more char
492 # structs go in memory. Everything
else is in a register
!
494 # Test
every single char struct from
1.
.17 in size. This is what the
495 # original
"structs" test was doing.
497 start_structs_test
{ tc
}
515 test_struct_returns
1
516 test_struct_returns
2
517 test_struct_returns
3
518 test_struct_returns
4
519 test_struct_returns
5
520 test_struct_returns
6
521 test_struct_returns
7
522 test_struct_returns
8
527 # Assuming that
any integer struct larger than
8 bytes goes in memory
,
528 # come up with many and varied combinations of a
return struct.
For
529 #
"struct calls" test just beyond that 8 byte boundary, for "struct
530 # returns
" test up to that boundary.
532 #
For floats
, assumed that up to two struct elements can be stored in
533 # floating point registers
, regardless of their size.
535 # The approx size of each structure it is computed assumed that tc
=1,
536 # ts
=2, ti
=4, tl
=4, tll
=8, tf
=4, td
=8, tld
=16, and that all fields are
537 # naturally aligned. Padding being added where needed. Note that
538 # these numbers are just approx
, the d10v has ti
=2, a
64-bit has has
541 # Approx size
: 2, 4, ...
542 start_structs_test
{ ts
}
548 test_struct_returns
1
549 test_struct_returns
2
550 test_struct_returns
3
551 test_struct_returns
4
553 # Approx size
: 4, 8, ...
554 start_structs_test
{ ti
}
558 test_struct_returns
1
559 test_struct_returns
2
561 # Approx size
: 4, 8, ...
562 start_structs_test
{ tl
}
566 test_struct_returns
1
567 test_struct_returns
2
569 # Approx size
: 8, 16, ...
570 start_structs_test
{ tll
}
573 test_struct_returns
1
575 # Approx size
: 4, 8, ...
576 start_structs_test
{ tf
}
580 test_struct_returns
1
581 test_struct_returns
2
583 # Approx size
: 8, 16, ...
584 start_structs_test
{ td
}
587 test_struct_returns
1
589 # Approx size
: 16, 32, ...
590 start_structs_test
{ tld
}
593 test_struct_returns
1
595 # Approx size
: 2+1=3, 4, ...
596 start_structs_test
{ ts tc
}
604 test_struct_returns
2
606 # Approx size
: 4+1=5, 6, ...
607 start_structs_test
{ ti tc
}
613 test_struct_returns
2
615 # Approx size
: 4+1=5, 6, ...
616 start_structs_test
{ tl tc
}
622 test_struct_returns
2
624 # Approx size
: 8+1=9, 10, ...
625 start_structs_test
{ tll tc
}
628 # Approx size
: 4+1=5, 6, ...
629 start_structs_test
{ tf tc
}
635 test_struct_returns
2
637 # Approx size
: 8+1=9, 10, ...
638 start_structs_test
{ td tc
}
641 # Approx size
: 16+1=17, 18, ...
642 start_structs_test
{ tld tc
}
645 # Approx size
: (1+1)+2=4, 6, ...
646 start_structs_test
{ tc ts
}
652 test_struct_returns
2
654 # Approx size
: (1+3)+4=8, 12, ...
655 start_structs_test
{ tc ti
}
659 test_struct_returns
2
661 # Approx size
: (1+3)+4=8, 12, ...
662 start_structs_test
{ tc tl
}
666 test_struct_returns
2
668 # Approx size
: (1+7)+8=16, 24, ...
669 start_structs_test
{ tc tll
}
672 # Approx size
: (1+3)+4=8, 12, ...
673 start_structs_test
{ tc tf
}
678 # Approx size
: (1+7)+8=16, 24, ...
679 start_structs_test
{ tc td
}
682 # Approx size
: (1+15)+16=32, 48, ...
683 start_structs_test
{ tc tld
}
686 # Some float combinations
688 # Approx size
: 8+4=12, 16, ...
689 # d10v
: 4+4=8, 12, ...
690 start_structs_test
{ td tf
}
692 test_struct_returns
2
694 # Approx size
: (4+4)+8=16, 32, ...
695 # d10v
: 4+4=8, 12, ...
696 start_structs_test
{ tf td
}
698 test_struct_returns
2