]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.hp/gdb.base-hp/so-thresh.exp
run copyright.sh for 2011.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.hp / gdb.base-hp / so-thresh.exp
CommitLineData
7b6bb8da 1# Copyright (C) 1997, 1998, 2007, 2008, 2009, 2010, 2011
4c38e0a4 2# Free Software Foundation, Inc.
7be570e7
JM
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
7be570e7 7# (at your option) any later version.
e22f8b7c 8#
7be570e7
JM
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#
7be570e7 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/>. */
7be570e7 16
7be570e7
JM
17if $tracelevel then {
18 strace $tracelevel
19 }
20
7be570e7
JM
21
22if { [skip_hp_tests] } then { continue }
23
24set testfile "so-thresh"
25set binfile ${objdir}/${subdir}/${testfile}
26
27if [get_compiler_info ${binfile}] {
28 return -1
29}
30
31# This testcase is relatively large, and therefore can take awhile to
32# load. We'd best set the timeout to something suitable, or we may
33# seem to fail...
34#
35set timeout 60
36
37# Build procedure for this testcase:
38# ${srcdir}/${subdir}/so-thresh.sh ${subdir}
39# which calls,
40# make -f ${srcdir}/${subdir}/so-thresh.mk <targets> <macros>
41# which builds,
42# genso-thresh (from genso-thresh.c)
43# which generates,
44# lib00-so-thresh.c
45# lib01-so-thresh.c
46# lib02-so-thresh.c
47# so-thresh.lopt (link options file)
48# lib0*-so-thresh.sl (from .c files above)
49# so-thresh (from so-thresh.c)
50# using lib0*-so-thresh.sl and so-thresh.lopt
51#
52# Since so-thresh.mk requires SRCDIR and OBJDIR macro definitions,
53# and SRCDIR / OBJDIR could be in relative path format, we use
54# so-thresh.sh script to pin down SRCDIR / OBJDIR (using $PWD/ prefix
55# when detected relative path values for srcdir / objdir), before the
56# 'cd $subdir' call (when this can be done in TCL here, we can call
57# make directly instead).
58#
59# remote_exec build "sh -c \\\"cd ${objdir}/${subdir}\\; make -v -f ${srcdir}/${subdir}/${testfile}.mk clean require_shlibs all SRCDIR=${srcdir}/${subdir} OBJDIR=${objdir}/${subdir}\\\""
60
7be570e7
JM
61remote_exec build "${srcdir}/${subdir}/${testfile}.sh $subdir"
62
63# Only HP-UX (and any other platforms using SOM shared libraries, I
ca344dff 64# guess) interprets the auto-solib-limit variable as a threshhold,
7be570e7
JM
65# rather than a boolean that strictly enables or disables automatic
66# loading of shlib symbol tables.
67#
68# On HP-UX, it is the size threshhold (in megabytes) at which to
69# stop auto loading of symbol tables.
70#
71if ![istarget "hppa*-hp-hpux*"] then {
72 setup_xfail "*-*-*"
73}
74
75# Start with a fresh gdb
76#
77gdb_exit
78gdb_start
79gdb_reinitialize_dir $srcdir/$subdir
80gdb_load ${binfile}
81
82# This is a test of gdb's ability on HP-UX to stop automatically
83# loading symbols of shared libraries, when the total size of the
84# debugger's symbol table reaches a specified threshhold.
85#
86
ca344dff 87# On HP-UX, the help text for auto-solib-limit mentions that it
7be570e7
JM
88# serves as a threshhold.
89#
ca344dff 90send_gdb "help set auto-solib-limit\n"
7be570e7 91gdb_expect {
ca344dff
JL
92 -re "Set threshold .in Mb. for autoloading shared library symbols.*
93When shared library autoloading is enabled, new libraries will be loaded.*
94only until the total size of shared library symbols exceeds this.*
95threshold in megabytes. Is ignored when using .sharedlibrary.*$gdb_prompt $"\
96 {pass "help set auto-solib-limit"}
7be570e7 97 -re "$gdb_prompt $"\
ca344dff
JL
98 {fail "help set auto-solib-limit"}
99 timeout {fail "(timeout) help set auto-solib-limit"}
7be570e7
JM
100}
101
102# On HP-UX, the threshhold is by default set to 50, which means
103# 50 megabytes.
104#
ca344dff 105send_gdb "show auto-solib-limit\n"
7be570e7 106gdb_expect {
ca344dff
JL
107 -re "Threshold .in Mb. for autoloading shared library symbols is $decimal.*$gdb_prompt $"\
108 {pass "show auto-solib-limit "}
7be570e7 109 -re "$gdb_prompt $"\
ca344dff
JL
110 {fail "show auto-solib-limit "}
111 timeout {fail "(timeout) show auto-solib-limit "}
7be570e7
JM
112}
113
ca344dff 114send_gdb "set auto-solib-limit 1\n"
7be570e7
JM
115gdb_expect {
116 -re ".*$gdb_prompt $"
ca344dff 117 {pass "set auto-solib-limit to 1"}
7be570e7 118 -re ".*$gdb_prompt $"
ca344dff
JL
119 {fail "set auto-solib-limit to 1"}
120 timeout {fail "(timeout) set auto-solib-limit to 1"}
7be570e7
JM
121}
122
123
124# We have manually verified that our testcase exceeds 1 Mbytes
125# of heap space in GDB to hold the symbols for the main program
126# and all associated linked-against libraries. Thus, when we
127# run to the program's main, and therefore notice all the linked-
128# against shlibs, we expect to hit the threshhold.
129#
130# (Note that we're not using the expect [runto main] function here,
131# 'cause we want to match on output from the run command.
132#
133send_gdb "break main\n"
134gdb_expect {
135 -re "Breakpoint \[0-9\]* at.*$gdb_prompt $"\
136 {pass "1 set break at main"}
137 -re "$gdb_prompt $"\
138 {fail "1 set break at main"}
139 timeout {fail "(timeout) 1 set break at main"}
140}
141
142send_gdb "run\n"
143gdb_expect {
144 -re ".*warning. Symbols for some libraries have not been loaded, because.*
ca344dff 145doing so would exceed the size threshold specified by auto-solib-limit.*
7be570e7 146To manually load symbols, use the 'sharedlibrary' command.*
ca344dff 147To raise the threshold, set auto-solib-limit to a larger value and rerun.*
7be570e7 148the program.*$gdb_prompt $"\
ca344dff 149 {pass "run to main hit auto-solib-limit threshold"}
7be570e7 150 -re "$gdb_prompt $"\
ca344dff
JL
151 {fail "run to main hit auto-solib-limit threshold"}
152 timeout {fail "(timeout) run to main hit auto-solib-limit threshold"}
7be570e7
JM
153}
154
155# Verify that "info share" mentions something about libraries whose
156# symbols weren't loaded.
157#
158# We'll assume that at least the last two shlib's symbols weren't
159# loaded. As a side-effect of matching this pattern, the text start
160# address of the last one is captured in expect_out(1,string).
161# (we'll need it for the 'add-symbol-file' command in a nonce...)
162#
163send_gdb "info sharedlibrary\n"
164gdb_expect {
165 -re ".*lib01_$testfile.sl .*symbols not loaded.*0x\[0-9\]* (0x\[0-9a-fA-F\]*).*$gdb_prompt $"\
166 { send_gdb "add-symbol-file lib02_$testfile.sl $expect_out(1,string)\n"
167 gdb_expect {
168 -re "add symbol table.*y or n.*$"\
169 {send_gdb "y\n"
170 gdb_expect {
171 -re "$gdb_prompt $" {pass "add-symbol-file and info sharedlib"}
172 timeout {fail "(timeout) add-symbol-file and info sharedlib"}
173 }}
174 -re "$gdb_prompt $"\
175 {fail "add-symbol-file and info sharedlib"}
176 timeout {fail "(timeout) add-symbol-file and info sharedlib"}
177 }
178 }
179 -re "$gdb_prompt $" {
180 setup_xfail hppa*-*-* CHFts24108
181 fail "info sharedlibrary shows shlibs with unloaded symbols"
182 }
183 timeout {fail "(timeout) info sharedlibrary shows shlibs with unloaded symbols"}
184}
185
186# Verify that we can manually load the symbol table of a library
187# whose symbols weren't loaded. (We'll pick the last one.)
188#
189
190# I moved this test inside the one above, because the expect_out array is not ok if the
191# previous test has failed, and expect would error out (elz)
192#
193#send_gdb "add-symbol-file lib02_$testfile.sl $expect_out(1,string)\n"
194#gdb_expect {
195# -re "add symbol table.*y or n.*$"\
196# {send_gdb "y\n"
197# gdb_expect {
198# -re "$gdb_prompt $" {pass "add-symbol-file"}
199# timeout {fail "(timeout) add-symbol-file"}
200# }}
201# -re "$gdb_prompt $"\
202# {fail "add-symbol-file"}
203# timeout {fail "(timeout) add-symbol-file"}
204#}
205
206# Verify that we can manually load the symbols for all libraries
207# which weren't already loaded.
208#
209# Warning! On a machine with little free swap space, this may
210# fail!
211#
212send_gdb "sharedlibrary\n"
213gdb_expect {
214 -re "Reading symbols from.*done.*$gdb_prompt $"\
215 {pass "sharedlibrary"}
216 -re "$gdb_prompt $" {
217 setup_xfail hppa*-*-* CHFts24108
218 fail "sharedlibrary"
219 }
220 timeout {fail "(timeout) sharedlibrary"}
221}
222
223# Rerun the program, this time verifying that we can set the
224# threshhold high enough to avoid hitting it.
225#
226# It appears that gdb isn't freeing memory when rerunning, as one
227# would expect. To avoid potentially hitting a virtual memory
228# ceiling, start with a fresh gdb.
229#
230gdb_exit
231gdb_start
232gdb_reinitialize_dir $srcdir/$subdir
233gdb_load ${binfile}
234
235send_gdb "break main\n"
236gdb_expect {
237 -re "Breakpoint \[0-9\]* at.*$gdb_prompt $"\
238 {pass "2 set break at main"}
239 -re "$gdb_prompt $"\
240 {fail "2 set break at main"}
241 timeout {fail "(timeout) 2 set break at main"}
242}
243
ca344dff 244send_gdb "set auto-solib-limit 9999\n"
7be570e7
JM
245gdb_expect {
246 -re "$gdb_prompt $"\
ca344dff
JL
247 {pass "set auto-solib-limit threshold to practical infinity"}
248 timeout {fail "(timeout) set auto-solib-limit threshold to practical infinity"}
7be570e7
JM
249}
250send_gdb "run\n"
251gdb_expect {
252 -re ".*warning. Symbols for some libraries have not been loaded, because.*
ca344dff 253doing so would exceed the size threshold specified by auto-solib-limit.*
7be570e7 254To manually load symbols, use the 'sharedlibrary' command.*
ca344dff 255To raise the threshold, set auto-solib-limit to a larger value and rerun.*
7be570e7
JM
256the program.*$gdb_prompt $"\
257 {fail "rerun threshold at practical infinity (still hit threshold)"}
258 -re "$gdb_prompt $"\
259 {pass "rerun with threshold at practical infinity"}
260 timeout {fail "(timeout) rerun with threshold at practical infinity"}
261}
262
263# Rerun the program, this time altogether disabling the auto loading
264# feature. There should be no information at all about shared
265# libraries now.
266#
267# ??rehrauer: Personally, I'd call that a bug, since it doesn't give
268# you the ability to manually load single shlibs (you need the text
269# start address that 'info share' normall gives you). On the other
270# hand, one can easily choose to load them all...
271#
272# It appears that gdb isn't freeing memory when rerunning, as one
273# would expect. To avoid potentially hitting a virtual memory
274# ceiling, start with a fresh gdb.
275#
276gdb_exit
277gdb_start
278gdb_reinitialize_dir $srcdir/$subdir
279gdb_load ${binfile}
280
281send_gdb "break main\n"
282gdb_expect {
283 -re "Breakpoint \[0-9\]* at.*$gdb_prompt $"\
284 {pass "3 set break at main"}
285 -re "$gdb_prompt $"\
286 {fail "3 set break at main"}
287 timeout {fail "(timeout) 3 set break at main"}
288}
289
ca344dff 290send_gdb "set auto-solib-limit 0\n"
7be570e7
JM
291gdb_expect {
292 -re "$gdb_prompt $"\
ca344dff
JL
293 {pass "set auto-solib-limit threshold to 0"}
294 timeout {fail "(timeout) set auto-solib-limit threshold to 0"}
7be570e7
JM
295}
296send_gdb "run\n"
297gdb_expect {
298 -re ".*warning. Symbols for some libraries have not been loaded, because.*
ca344dff 299doing so would exceed the size threshold specified by auto-solib-limit.*
7be570e7 300To manually load symbols, use the 'sharedlibrary' command.*
ca344dff 301To raise the threshold, set auto-solib-limit to a larger value and rerun.*
7be570e7
JM
302the program.*$gdb_prompt $"\
303 {fail "rerun threshold at 0 (still hit threshold)"}
304 -re "$gdb_prompt $"\
305 {pass "rerun with threshold at 0"}
306 timeout {fail "(timeout) rerun with threshold at 0"}
307}
308
309# Verify that we can still manually load symbols for all libraries.
310# (We'll assume that if the last shlib's symbols are loaded, that
311# all of them were.)
312#
313# Note that we set the GDB "height" variable to prevent GDB from
314# prompting
315#
316# Warning! On a machine with little free swap space, this may
317# fail!
318#
319send_gdb "set height 9999\n"
320gdb_expect {
321 -re "$gdb_prompt $"\
322 {pass "set screen page height to practical infinity"}
323 timeout {fail "(timeout) set screen page height to practical infinity"}
324}
325send_gdb "sharedlibrary\n"
326gdb_expect {
327 -re ".*Reading symbols from .*/lib02-so-thresh\\.sl\\.\\.\\.done\\..*$gdb_prompt $"\
328 {pass "manually load all symbols"}
329 -re "$gdb_prompt $" {
330 setup_xfail hppa*-*-* CHFts24108
331 fail "manually load all symbols (CHFts24108)"
332 }
333 timeout {fail "(timeout) manually load all symbols"}
334}
335
336return 0