OSDN Git Service

1918ffee997a25d708ec384f945e2c380b8cd530
[pf3gnuchains/pf3gnuchains4x.git] / gdb / testsuite / gdb.base / call-strs.exp
1 # Copyright 1998, 1999, 2000, 2007, 2008, 2009, 2010
2 # Free Software Foundation, Inc.
3
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 3 of the License, or
7 # (at your option) any later version.
8 #
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.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 # This file was written by Elena Zannoni (ezannoni@cygnus.com)
18
19 # This test deals with calling functions which have strings as parameters.
20 # it plays around with constant strings.
21 # the corresponding source file is call-strs.c
22 #
23
24 #debug strarg
25
26 if $tracelevel then {
27         strace $tracelevel
28 }
29
30 set prms_id 0
31 set bug_id 0
32
33 set testfile "call-strs"
34 set srcfile ${testfile}.c
35 set binfile ${objdir}/${subdir}/${testfile}
36
37 # Test depends on printf, which the sparclet stub doesn't support.  
38 if { [istarget "sparclet-*-*"] } {
39     return 0;
40 }
41
42 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
43     untested call-strs.exp
44     return -1
45 }
46
47
48
49 # Some targets can't call functions, so don't even bother with this
50 # test.
51 if [target_info exists gdb,cannot_call_functions] {
52     setup_xfail "*-*-*" 2416
53     fail "This target can not call functions"
54     continue
55 }
56
57 # Set the current language to C.  This counts as a test.  If it
58 # fails, then we skip the other tests.
59
60 proc set_lang_c {} {
61     global gdb_prompt
62
63     send_gdb "set language c\n"
64     gdb_expect {
65         -re ".*$gdb_prompt $" {}
66         timeout { fail "set language c (timeout)" ; return 0; }
67     }
68
69     send_gdb "show language\n"
70     gdb_expect {
71         -re ".* source language is \"c\".*$gdb_prompt $" {
72             pass "set language to \"c\""
73             return 1
74         }
75         -re ".*$gdb_prompt $" {
76             fail "setting language to \"c\""
77             return 0
78         }
79         timeout {
80             fail "can't show language (timeout)"
81             return 0
82         }
83     }
84 }
85
86
87
88 # Start with a fresh gdb.
89
90 gdb_exit
91 gdb_start
92 gdb_reinitialize_dir $srcdir/$subdir
93 gdb_load ${binfile}
94 send_gdb "set print sevenbit-strings\n" ; gdb_expect -re "$gdb_prompt $"
95 send_gdb "set print address off\n" ; gdb_expect -re "$gdb_prompt $"
96 send_gdb "set width 0\n" ; gdb_expect -re "$gdb_prompt $"
97
98 set timeout 120
99
100 if ![runto_main] then {
101     perror "couldn't run to breakpoint"
102     continue
103 }
104
105 #step
106 send_gdb "step\n"
107 gdb_expect {
108         -re ".*strcpy\\(buf, \"test string\"\\);.*$gdb_prompt $" {pass "step after assignment to s"}
109         -re ".*$gdb_prompt $" { fail "step after assignment to s" }
110         timeout { fail "step after assignment to s (timeout)" }
111     }
112
113
114 #next
115 send_gdb "next\n"
116 gdb_expect {
117         -re ".*str_func\\(\"abcd\", \"efgh\", \"ijkl\", \"mnop\", \"qrst\", \"uvwx\", \"yz12\"\\);.*$gdb_prompt $" {pass "next over strcpy"}
118         -re ".*$gdb_prompt $" { fail "next over strcpy" }
119         timeout { fail "next over strcpy (timeout)" }
120     }
121
122 #print buf
123 send_gdb "print buf\n"
124 gdb_expect {
125     -re ".*\"test string\",.*repeats 88 times.*$gdb_prompt $" {
126         pass "print buf"
127       }
128     -re ".*$gdb_prompt $" { fail "print buf" }
129     timeout           { fail "(timeout) print buf" }
130   }
131
132
133 #print s
134 send_gdb "print s\n"
135 gdb_expect {
136     -re ".*= \"test string\".*$gdb_prompt $" {
137         pass "print s"
138       }
139     -re ".*$gdb_prompt $" { fail "print s" }
140     timeout           { fail "(timeout) print sum_array_print(10, *list1, *list2, *list3, *list4)" }
141   }
142
143
144 #print str_func1(s)
145 if ![gdb_skip_stdio_test "print str_func1(s)"] {
146     send_gdb "print  str_func1(s)\n"
147     gdb_expect {
148         -re "first string arg is: test string.*\"test string\".*$gdb_prompt $" {
149             pass "print str_func1(s)"
150         }
151         -re ".*$gdb_prompt $" { fail "print str_func1(s)" }
152         timeout               { fail "(timeout) print str_func1(s)" }
153     }
154 }
155
156
157 #print str_func1("test string")
158 if ![gdb_skip_stdio_test "print str_func1(teststring)"] {
159     send_gdb "print  str_func1(\"test string\")\n"
160     gdb_expect {
161         -re "first string arg is: test string.*\"test string\".*$gdb_prompt $" {
162             pass "print str_func1(\"test string\")"
163         }
164         -re ".*$gdb_prompt $" { fail "print str_func1(\"test string\")" }
165         timeout     { fail "(timeout) print str_func1(\"test string\")" }
166     }
167 }
168
169 #call str_func1(s)
170 if ![gdb_skip_stdio_test "call str_func1(s)"] {
171     send_gdb "call  str_func1(s)\n"
172     gdb_expect {
173         -re "first string arg is: test string.*\"test string\".*$gdb_prompt $" {
174             pass "call str_func1(s)"
175         }
176         -re ".*$gdb_prompt $" { fail "call str_func1(s)" }
177         timeout               { fail "(timeout) call str_func1(s)" }
178     }
179 }
180
181 #call str_func1("test string")
182 if ![gdb_skip_stdio_test "call str_func1 (...)"] {
183     send_gdb "call  str_func1(\"test string\")\n"
184     gdb_expect {
185         -re "first string arg is: test string.*\"test string\".*$gdb_prompt $" {
186             pass "call str_func1(\"test string\")"
187         }
188         -re ".*$gdb_prompt $" { fail "call str_func1(\"test string\")" }
189         timeout     { fail "(timeout) call str_func1(\"test string\")" }
190     }
191 }
192
193 #print str_func1(buf)
194 if ![gdb_skip_stdio_test "print str_func1(buf)"] {
195     send_gdb "print  str_func1(buf)\n"
196     gdb_expect {
197         -re "first string arg is: test string.*\"test string\".*$gdb_prompt $" {
198             pass "print str_func1(buf)"
199         }
200         -re ".*$gdb_prompt $" { fail "print str_func1(buf)" }
201         timeout               { fail "(timeout) print str_func1(buf)" }
202     }
203 }
204
205 #call str_func1(buf)
206 if ![gdb_skip_stdio_test "call str_func1(buf)"] {
207     send_gdb "call str_func1(buf)\n"
208     gdb_expect {
209         -re "first string arg is: test string.*\"test string\".*$gdb_prompt $" {
210             pass "call str_func1(buf)"
211         }
212         -re ".*$gdb_prompt $" { fail "call str_func1(buf)" }
213         timeout               { fail "(timeout) call str_func1(buf)" }
214     }
215 }
216
217 #print str_func("a","b","c","d","e","f","g")
218 if ![gdb_skip_stdio_test "print str_func(a,b,c,d,e,f,g)"] {
219     send_gdb "print  str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")\n"
220     gdb_expect {
221         -re "first string arg is: a\[ \t\r\n\]+second string arg is: b\[ \t\r\n\]+third string arg is: c\[ \t\r\n\]+fourth string arg is: d\[ \t\r\n\]+fifth string arg is: e\[ \t\r\n\]+sixth string arg is: f\[ \t\r\n\]+seventh string arg is: g\[ \t\r\n\]+.*= \"abcdefg\".*$gdb_prompt $" {
222             pass "print str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")"
223         }
224         -re ".*$gdb_prompt $" { fail "print str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")" }
225         timeout           { fail "(timeout) print str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")" }
226     }
227 }
228
229 #call str_func("a","b","c","d","e","f","g")
230 if ![gdb_skip_stdio_test "call str_func(a,b,c,d,e,f,g)"] {
231     send_gdb "call  str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")\n"
232     gdb_expect {
233         -re "first string arg is: a\[ \t\r\n\]+second string arg is: b\[ \t\r\n\]+third string arg is: c\[ \t\r\n\]+fourth string arg is: d\[ \t\r\n\]+fifth string arg is: e\[ \t\r\n\]+sixth string arg is: f\[ \t\r\n\]+seventh string arg is: g\[ \t\r\n\]+.*= \"abcdefg\".*$gdb_prompt $" {
234             pass "call str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")"
235         }
236         -re ".*$gdb_prompt $" { fail "call str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")" }
237         timeout           { fail "(timeout) call str_func(\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\")" }
238     }
239 }
240
241 #print str_func(s,s,s,s,s,s,s)
242 if ![gdb_skip_stdio_test "print str_func(s,s,s,s,s,s,s,s)"] {
243     send_gdb "print  str_func(s,s,s,s,s,s,s)\n"
244     gdb_expect {
245         -re "first string arg is: test string\[ \t\r\n\]+second string arg is: test string\[ \t\r\n\]+third string arg is: test string\[ \t\r\n\]+fourth string arg is: test string\[ \t\r\n\]+fifth string arg is: test string\[ \t\r\n\]+sixth string arg is: test string\[ \t\r\n\]+seventh string arg is: test string\[ \t\r\n\]+.*\"test stringtest stringtest stringtest stringtest stringtest stringtest string\".*$gdb_prompt $" {
246             pass "print str_func(s,s,s,s,s,s,s)"
247         }
248         -re ".*$gdb_prompt $" { fail "print str_func(s,s,s,s,s,s,s)" }
249         timeout     { fail "(timeout) print str_func(s,s,s,s,s,s,s)" }
250     }
251 }
252
253 #call str_func(s,s,s,s,s,s,s)
254 if ![gdb_skip_stdio_test "call str_func(s,s,s,s,s,s,s,s)"] {
255     send_gdb "call  str_func(s,s,s,s,s,s,s)\n"
256     gdb_expect {
257         -re "first string arg is: test string\[ \t\r\n\]+second string arg is: test string\[ \t\r\n\]+third string arg is: test string\[ \t\r\n\]+fourth string arg is: test string\[ \t\r\n\]+fifth string arg is: test string\[ \t\r\n\]+sixth string arg is: test string\[ \t\r\n\]+seventh string arg is: test string\[ \t\r\n\]+.*\"test stringtest stringtest stringtest stringtest stringtest stringtest string\".*$gdb_prompt $" {
258             pass "call str_func(s,s,s,s,s,s,s)"
259         }
260         -re ".*$gdb_prompt $" { fail "call str_func(s,s,s,s,s,s,s)" }
261         timeout               { fail "(timeout) call str_func(s,s,s,s,s,s,s)" }
262     }
263 }
264
265 gdb_exit
266 return 0