ChangeLog:
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / shlib-call.exp
CommitLineData
0fb0cc75 1# Copyright 1997, 1998, 1999, 2000, 2004, 2007, 2008, 2009
6aba47ca 2# Free Software Foundation, Inc.
c906108c
SS
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
e22f8b7c 6# the Free Software Foundation; either version 3 of the License, or
c906108c 7# (at your option) any later version.
e22f8b7c 8#
c906108c
SS
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.
e22f8b7c 13#
c906108c 14# You should have received a copy of the GNU General Public License
e22f8b7c 15# along with this program. If not, see <http://www.gnu.org/licenses/>.
c906108c 16
c906108c
SS
17# file to test calls into shared libraries
18# the source files for this test are:
19#
20# shmain.c
21# shr1.c (shared lib)
22# shr2.c (shared lib)
23# ss.h (header for shr2.c)
24#
25# file written by Elena Zannoni: elz@ch.apollo.com
26#
27
28#debug shmain
29#prop lib shr1.sl
30#prop lib shr2.sl
31
32if $tracelevel then {
33 strace $tracelevel
34}
35
36set prms_id 0
37set bug_id 0
38
93f02886 39if {[skip_shlib_tests]} {
c906108c
SS
40 return 0
41}
42
43set testfile "shmain"
f07e55f0
PG
44set libfile1 "shr1"
45set libfile2 "shr2"
46set srcfile ${srcdir}/${subdir}/${testfile}.c
47set lib1src ${srcdir}/${subdir}/${libfile1}.c
48set lib2src ${srcdir}/${subdir}/${libfile2}.c
49set lib1 ${objdir}/${subdir}/${libfile1}.sl
50set lib2 ${objdir}/${subdir}/${libfile2}.sl
51set binfile ${objdir}/${subdir}/${testfile}
52
53set lib_opts "debug"
54set exec_opts [list debug shlib=${lib1} shlib=${lib2}]
c906108c 55
c906108c
SS
56if [get_compiler_info ${binfile}] {
57 return -1
58}
59
f07e55f0
PG
60if { [gdb_compile_shlib ${lib1src} ${lib1} $lib_opts] != ""
61 || [gdb_compile_shlib ${lib2src} ${lib2} $lib_opts] != ""
62 || [gdb_compile ${srcfile} ${binfile} executable $exec_opts] != ""} {
63 untested "Could not compile $lib1, $lib2, or $srcfile."
64 return -1
c906108c
SS
65}
66
c906108c
SS
67# Start with a fresh gdb.
68
69gdb_exit
70gdb_start
71gdb_reinitialize_dir $srcdir/$subdir
72gdb_load ${binfile}
93f02886
DJ
73gdb_load_shlibs $lib1 $lib2
74
c906108c
SS
75send_gdb "set print sevenbit-strings\n" ; gdb_expect -re "$gdb_prompt $"
76send_gdb "set print address off\n" ; gdb_expect -re "$gdb_prompt $"
77send_gdb "set width 0\n" ; gdb_expect -re "$gdb_prompt $"
78
79
80if ![runto_main] then {
81 perror "C function calling tests suppressed"
82}
83
84
85#step -over
86
87 send_gdb "next\n"
88 gdb_expect {
11cf8741
JM
89 -re ".*g = shr1\\(g\\).*$gdb_prompt $" {pass "next to shr1"}
90 -re ".*$gdb_prompt $" { fail "next to shr1" }
91 timeout { fail "next to shr1 (timeout)" }
c906108c
SS
92 }
93
94
95
96#print g
97
98send_gdb "print g\n"
99gdb_expect {
100 -re ".*\[0-9\]* = 1.*$gdb_prompt $" {
101 pass "print g"
102 }
103 -re ".*$gdb_prompt $" { fail "print g" }
104 timeout { fail "(timeout) print g" }
105 }
106
107
108#step -over
13a5e3b8
MS
109 if ![gdb_skip_stdio_test "next over shr1"] {
110 send_gdb "next\n"
111 gdb_expect {
112 -re ".*address of sgs is $hex.*g = shr2\\(g\\).*$gdb_prompt $" {
113 pass "next over shr1"
114 }
115 -re ".*$gdb_prompt $" { fail "next over shr1" }
116 timeout { fail "next over shr1 (timeout)" }
117 }
118 } else {
119 gdb_test "next" "" ""
120 }
121
c906108c
SS
122
123#print g
124send_gdb "print g\n"
125gdb_expect {
126 -re ".*\[0-9\]* = 2.*$gdb_prompt $" {
127 pass "print g" }
128 -re ".*$gdb_prompt $" { fail "print g" }
129 timeout { fail "(timeout) print g" }
130 }
131
132#print shr1(1)
13a5e3b8
MS
133 if ![gdb_skip_stdio_test "print shr1(1)"] {
134 send_gdb "print shr1(1)\n"
135 gdb_expect {
136 -re ".*address of sgs is $hex.*\[0-9\]* = 2.*$gdb_prompt $" {
137 pass "print shr1(1)"
138 }
139 -re ".*$gdb_prompt $" { fail "print shr1(1)" }
140 timeout { fail "(timeout) print shr1(1)" }
141 }
c906108c
SS
142 }
143
144#print shr1(g)
13a5e3b8
MS
145 if ![gdb_skip_stdio_test "print shr1(g)"] {
146 send_gdb "print shr1(g)\n"
147 gdb_expect {
148 -re ".*address of sgs is $hex.*\[0-9\]* = 4.*$gdb_prompt $" {
149 pass "print shr1(g)"
150 }
151 -re ".*$gdb_prompt $" { fail "print shr1(g)" }
152 timeout { fail "(timeout) print shr1(g)" }
153 }
c906108c
SS
154 }
155
156#break shr2
157#go
158gdb_test "break shr2" \
159 "Breakpoint.*file.*shr2.c, line.*" \
160 "breakpoint function shr2"
161
13a5e3b8
MS
162gdb_test "continue" \
163 "Continuing\\..*Breakpoint \[0-9\]+, shr2 \\(.*\\) at.*shr2\\.c:7.*7.*return 2.x;" \
164 "run until breakpoint set at a function"
c906108c
SS
165
166
167#print shr1(1)
13a5e3b8
MS
168if ![gdb_skip_stdio_test "print shr1(1) 2nd time"] {
169 send_gdb "print shr1(1)\n"
170 gdb_expect {
171 -re ".*address of sgs is $hex.*\[0-9\]* = 2.*$gdb_prompt $" {
172 pass "print shr1(1) 2nd time"
173 }
174 -re ".*$gdb_prompt $" { fail "print shr1(1) 2nd time" }
175 timeout { fail "(timeout) print shr1(1) 2nd time" }
176 }
177}
c906108c
SS
178
179#print mainshr1(1)
180send_gdb "print mainshr1(1)\n"
181gdb_expect {
182 -re ".*\[0-9\]* = 2.*$gdb_prompt $" {
183 pass "print mainshr1(1) from shlib func"
184 }
185 -re ".*$gdb_prompt $" { fail "print mainshr1(1) from shlib func" }
186 timeout { fail "(timeout) print mainshr1(1) from shlib func" }
187 }
188
189#step -return
190 send_gdb "step\n"
6fde09ad
KB
191 # A step at this point will either take us entirely out of
192 # the function or into the function's epilogue. The exact
193 # behavior will differ depending upon upon whether or not
194 # the compiler emits line number information for the epilogue.
c906108c 195 gdb_expect {
6fde09ad
KB
196 -re "main \\(\\) at.*g = mainshr1\\(g\\);.*$gdb_prompt $" {
197 pass "step out of shr2 to main"
198 }
199 -re ".*\\\}.*$gdb_prompt $" {
200 pass "step out of shr2 to main (stopped in shr2 epilogue)"
201 send_gdb "step\n"
202 gdb_expect {
203 -re "main \\(\\) at.*g = mainshr1\\(g\\);.*$gdb_prompt $" { pass "step out of shr2 epilogue to main"}
204 -re ".*$gdb_prompt $" { fail "step out of shr2 epilogue to main" }
205 timeout { fail "step out of shr2 epilogue to main (timeout)" }
206 }
207 }
208 -re ".*$gdb_prompt $" { fail "step out of shr2" }
c906108c
SS
209 timeout { fail "step out of shr2 to main (timeout)" }
210 }
6fde09ad 211
c906108c
SS
212
213#print mainshr1(1)
214send_gdb "print mainshr1(1)\n"
215gdb_expect {
216 -re ".*\[0-9\]* = 2.*$gdb_prompt $" {
217 pass "print mainshr1(1)"
218 }
219 -re ".*$gdb_prompt $" { fail "print mainshr1(1) from main" }
220 timeout { fail "(timeout) print mainshr1(1) from main" }
221 }
222
223#step
224 send_gdb "step\n"
225 gdb_expect {
226 -re ".*mainshr1 \\(g=4\\) at.*return 2.g;.*$gdb_prompt $" { pass "step into mainshr1"}
227 -re ".*$gdb_prompt $" { fail "step into mainshr1" }
228 timeout { fail "step into mainshr1 (timeout)" }
229 }
230
231# Start with a fresh gdb.
232
233gdb_exit
234gdb_start
235gdb_reinitialize_dir $srcdir/$subdir
236gdb_load ${binfile}
237send_gdb "set print sevenbit-strings\n" ; gdb_expect -re "$gdb_prompt $"
238send_gdb "set print address off\n" ; gdb_expect -re "$gdb_prompt $"
239send_gdb "set width 0\n" ; gdb_expect -re "$gdb_prompt $"
240
241# PR's 16495, 18213
242# test that we can re-set breakpoints in shared libraries
55264cb4 243gdb_breakpoint "shr1" "allow-pending"
13a5e3b8
MS
244
245# FIXME: should not send "run" explicitly. Non-portable.
246
676a0442 247if ![is_remote target] {
55264cb4 248 gdb_test "run" "Starting program:.*Breakpoint .,.*" \
13a5e3b8
MS
249 "run to bp in shared library"
250
676a0442 251 gdb_test "cont" ".*Program exited normally..*"
13a5e3b8 252
55264cb4 253 gdb_test "run" "Starting program:.*Breakpoint .,.*" \
13a5e3b8
MS
254 "re-run to bp in shared library (PR's 16495, 18213)"
255
676a0442
DJ
256 gdb_test "cont" ".*Program exited normally..*"
257}
c906108c
SS
258
259return 0
This page took 0.912956 seconds and 4 git commands to generate.