1 # Copyright
1998, 1999, 2000, 2001, 2002, 2003, 2004
2 # Free Software Foundation
, Inc.
4 # This
program is free software
; you can redistribute it and
/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation
; either version
2 of the License
, or
7 #
(at your option
) any later version.
9 # This
program is distributed in the hope that it will be useful
,
10 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License
for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this
program; if not
, write to the Free Software
16 # Foundation
, Inc.
, 59 Temple Place
- Suite
330, Boston
, MA
02111-1307, USA.
18 # Please email
any bugs
, comments
, and
/or additions to this file to
:
19 # bug
-gdb@prep.ai.mit.edu
21 # This file was written by Elena Zannoni
(ezannoni@cygnus.com
)
23 # this file tests command line calls with functions returning structures
24 # corresponding source file
: call_return_struct.c
35 set testfile
"call-rt-st"
36 set srcfile $
{testfile
}.c
37 set binfile $
{objdir
}/$
{subdir
}/$
{testfile
}
40 # Test depends
on printf
, which the sparclet stub doesn
't support.
41 if { [istarget "sparclet-*-*"] } {
45 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
46 untested "couldn't
compile $
{srcdir
}/$
{subdir
}/$
{srcfile
}"
52 # Create and source the file that provides information about the compiler
53 # used to
compile the test case.
55 if [get_compiler_info $
{binfile
}] {
59 # Some targets can
't do function calls, so don't even bother with this
61 if [target_info
exists gdb
,cannot_call_functions
] {
62 setup_xfail
"*-*-*" 2416
63 fail
"This target can not call functions"
67 #
Set the current language to C. This counts as a test.
If it
68 # fails
, then we skip the other tests.
73 send_gdb
"set language c\n"
75 -re
".*$gdb_prompt $" {}
76 timeout
{ fail
"set language c (timeout)" ; return 0; }
79 send_gdb
"show language\n"
81 -re
".* source language is \"c\".*$gdb_prompt $" {
82 pass
"set language to \"c\""
85 -re
".*$gdb_prompt $" {
86 fail
"setting language to \"c\""
90 fail
"can't show language (timeout)"
96 # Start with a fresh gdb.
100 gdb_reinitialize_dir $srcdir
/$subdir
102 send_gdb
"set print sevenbit-strings\n" ; gdb_expect -re "$gdb_prompt $"
103 send_gdb
"set print address off\n" ; gdb_expect -re "$gdb_prompt $"
104 send_gdb
"set width 0\n" ; gdb_expect -re "$gdb_prompt $"
107 if ![runto_main
] then {
108 perror
"couldn't run to breakpoint"
113 gdb_test
"break loop_count" \
114 "Breakpoint.* file .*call-rt-st.c, line 128\\." \
115 "breakpoint loop_count"
118 send_gdb
"continue\n"
120 -re
"Continuing\\..*Breakpoint.*loop_count \\(\\) at.*call-rt-st.c:128\[ \t\r\n\]+128\[\t \]+for \\(index=0; index.4; index..\\);\[\r\n \]+$gdb_prompt $" {
121 pass
"continue to loop_count"}
122 -re
".*$gdb_prompt $" { fail "continue to loop_count"}
123 timeout
{ fail
"(timeout) continue to loop_count"}
128 -re
"Run till exit from .0 loop_count \\(\\) at.*call-rt-st.c:128\[ \t\r\n\]+main \\(\\) at.*call-rt-st.c:777\[ \t\r\n\]+777\[\t \]+return 0;.*$gdb_prompt $" {
129 pass
"finish out from loop_count (line 777)"
131 -re
"Run till exit from .0 loop_count \\(\\) at.*call-rt-st.c:128\[ \t\r\n\]+main \\(\\) at.*call-rt-st.c:775\[ \t\r\n\]+775\[\t \]+loop_count.*$gdb_prompt $" {
132 pass
"finish out from loop_count (line 775)"
134 -re
".*$gdb_prompt $" {
135 fail
"finish out from loop_count"
138 fail
"finish out from loop_count (timeout)"
142 # Ask GDB to print the value of EXPR
, and expect to see the regexp
143 # RESULT in the output.
If we
get back the error message
"Function
144 #
return value unknown
", call that an `unsupported' test; on some
145 # architectures
, it
's impossible to find structs returned by value
147 proc print_struct_call { expr result } {
150 set command "print $expr"
151 send_gdb "${command}\n"
153 -re "$result\[\r\n\]+$gdb_prompt $" {
156 -re "Function return value unknown.\[\r\n\]+$gdb_prompt $" {
157 unsupported "$command"
159 -re "$gdb_prompt $" {
163 fail "$command (timeout)"
169 if ![gdb_skip_stdio_test "print print_struct_rep(*struct1)"] {
170 print_struct_call "print_struct_rep(*struct1)" \
171 ".*Contents of struct1:\[ \t\n\r\]+22\[ \t\]+0\[ \t\n\r\]+.\[0-9\]+ = \\{value = 5, head = 0\\}"
174 if ![gdb_skip_stdio_test "print print_one_large_struct(...)"] {
175 print_struct_call "print_one_large_struct(*list1)" \
176 ".*\[ \t\]+4\[ \t\]+1\[ \r\n\]+.\[0-9\]+ = \\{next_index = \\{1, 2, 3, 4, 5, 6, 7, 8, 9, 10\\}, values = \\{4, 6, 8, 10, 12, 14, 16, 18, 20, 22\\}, head = 0\\}"
179 if {![gdb_skip_float_test "print print_one_double(*d1)"] && \
180 ![gdb_skip_stdio_test "print print_one_double(*d1)"] } {
181 print_struct_call "print_one_double(*d1)" \
182 ".*Contents of one_double_t:\[ \r\n\]+1\\.111110\[ \r\n\]+.\[0-9\]+ = \\{double1 = 1\\.111\[0-9\]*\\}"
185 if {![gdb_skip_float_test "print print_two_floats(*f3)"] && \
186 ![gdb_skip_stdio_test "print print_two_floats(*f3)"] } {
187 print_struct_call "print_two_floats(*f3)" \
188 ".*Contents of two_floats_t:\[ \r\n\]+-2\\.345000\[ \t]+1\\.000000\[ \r\n\]+.\[0-9\]+ = \\{float1 = -2\\.34500003, float2 = 1\\}"
191 if ![gdb_skip_stdio_test "print print_bit_flags_char(*cflags)"] {
192 print_struct_call "print_bit_flags_char(*cflags)" \
193 ".*alpha\[ \r\n\]+gamma\[ \r\n\]+epsilon\[ \r\n\]+.\[0-9\]+ = \\{alpha = 1 '\\\\001', beta = 0 '\\\\0', gamma = 1 '\\\\001', delta = 0 '\\\\0', epsilon = 1 '\\\\001', omega = 0 '\\\\0'\\}"
196 if ![gdb_skip_stdio_test "print print_bit_flags_short(*sflags)"] {
197 print_struct_call "print_bit_flags_short(*sflags)" \
198 ".*alpha\[ \r\n\]+gamma\[ \r\n\]+epsilon\[ \r\n\]+.\[0-9\]+ = \\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\\}"
201 if ![gdb_skip_stdio_test "print print_bit_flags(*flags)"] {
202 print_struct_call "print_bit_flags(*flags)" \
203 ".*alpha\[ \r\n\]+gamma\[ \r\n\]+epsilon\[ \r\n\]+.\[0-9\]+ = \\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\\}"
206 if ![gdb_skip_stdio_test "print print_bit_flags_combo(*flags_combo)"] {
207 print_struct_call "print_bit_flags_combo(*flags_combo)" \
208 ".*alpha\[ \r\n\]+gamma\[ \r\n\]+epsilon\[ \r\n\]+ch1: y\[ \t\]+ch2: n\[ \r\n\]+.\[0-9\]+ = \\{alpha = 1, beta = 0, ch1 = 121 'y
', gamma = 1, delta = 0, ch2 = 110 'n
', epsilon = 1, omega = 0\\}"
211 if ![gdb_skip_stdio_test "print print_three_chars(*three_chars)"] {
212 print_struct_call "print_three_chars(*three_char)" \
213 ".*Contents of three_char_t:\[ \r\n\]+x\[ \t\]+y\[ \t\]+z\[ \r\n\]+.\[0-9\]+ = \\{ch1 = 120 'x
', ch2 = 121 'y
', ch3 = 122 'z
'\\}"
216 if ![gdb_skip_stdio_test "print print_five_chars(*five_chars)"] {
217 print_struct_call "print_five_chars(*five_char)" \
218 ".*Contents of five_char_t:\[ \r\n\]+h\[ \t\]+e\[ \t\]+l\[ \t\]+l\[ \t\]+o\[ \r\n\]+.\[0-9\]+ = \\{ch1 = 104 'h
', ch2 = 101 'e
', ch3 = 108 'l
', ch4 = 108 'l
', ch5 = 111 'o
'\\}"
221 if ![gdb_skip_stdio_test "print print_int_char_combo(*int_char_combo)"] {
222 print_struct_call "print_int_char_combo(*int_char_combo)" \
223 ".*Contents of int_char_combo_t:\[ \r\n\]+13\[ \t\]+!\[ \r\n\]+.\[0-9\]+ = \\{int1 = 13, ch1 = 33 '!'\\}"