1 # Copyright
2012-2019 Free Software Foundation
, Inc.
3 # This
program is free software
; you can redistribute it and
/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation
; either version
3 of the License
, or
6 #
(at your option
) any later version.
8 # This
program is distributed in the hope that it will be useful
,
9 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License
for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this
program.
If not
, see
<http
://www.gnu.org
/licenses
/>.
16 if { [skip_shlib_tests
] } {
22 set lib1name $testfile
-solib1
23 set srcfile_lib1 $srcdir
/$subdir
/$lib1name.c
24 set binfile_lib1
[standard_output_file $lib1name.so
]
25 set define1
-DSHLIB1_NAME
=\"$binfile_lib1
\"
27 set lib2name $testfile
-solib2
28 set srcfile_lib2 $srcdir
/$subdir
/$lib2name.c
29 set binfile_lib2
[standard_output_file $lib2name.so
]
30 set define2
-DSHLIB2_NAME
=\"$binfile_lib2
\"
32 if { [gdb_compile_shlib $srcfile_lib1 $binfile_lib1 \
33 [list additional_flags
=-fPIC
]] != "" } {
34 untested
"failed to compile shared library 1"
38 if { [gdb_compile_shlib $srcfile_lib2 $binfile_lib2 \
39 [list additional_flags
=-fPIC
]] != "" } {
40 untested
"failed to compile shared library 2"
44 set cflags
"$define1 $define2"
45 if { [prepare_for_testing
"failed to prepare" $testfile $srcfile \
46 [list additional_flags
=$cflags shlib_load
]] } {
50 # Run
"info sharedlibrary" and check for the presence or absence of
52 proc check_info_shared
{ test expect1 expect2
} {
60 gdb_test_multiple
"info sharedlibrary" $test {
69 -re
"\r\n$gdb_prompt $" {
70 if { $actual1
== $expect1
&& $actual2
== $expect2
} {
79 # Start the inferior
, and check neither of the libraries are loaded at
84 check_info_shared
"info sharedlibrary #1" 0 0
88 gdb_breakpoint
"foo" allow-pending
89 gdb_breakpoint
"bar" allow-pending
91 # Run to the first stop and check that only the first library is loaded.
92 gdb_continue_to_breakpoint
"library load #1" "\\.?stop .*"
93 check_info_shared
"info sharedlibrary #2" 1 0
95 # Run to the second stop and check that both libraries are loaded.
96 gdb_continue_to_breakpoint
"library load #2" "\\.?stop .*"
97 check_info_shared
"info sharedlibrary #3" 1 1
99 # Check that the next stop is in foo.
100 gdb_continue_to_breakpoint
"library function #1" "\\.?foo .*"
102 # Check that the next stop is in bar.
103 gdb_continue_to_breakpoint
"library function #2" "\\.?bar .*"
105 # Restart the inferior and make sure there are no breakpoint reset
106 # errors. These can happen with the probes
-based runtime linker
107 # interface
if the
cache is not cleared correctly.
110 gdb_test_multiple
"" $test {
111 -re
{Start it from the beginning
\? \
(y or n\
) $
} {
115 -re
{Error in re
-setting breakpoint
} {
118 -re
"\r\n$gdb_prompt $" {
123 # Check that neither library is loaded.
124 check_info_shared
"info sharedlibrary #4" 0 0
126 # Run to the first stop and check that only the first library is loaded.
127 gdb_continue_to_breakpoint
"library load #3" "\\.?stop .*"
128 check_info_shared
"info sharedlibrary #5" 1 0
130 # Run to the second stop and check that both libraries are loaded.
131 gdb_continue_to_breakpoint
"library load #4" "\\.?stop .*"
132 check_info_shared
"info sharedlibrary #6" 1 1
134 # Check that the next stop is in foo.
135 gdb_continue_to_breakpoint
"library function #3" "\\.?foo .*"
137 # Check that the next stop is in bar.
138 gdb_continue_to_breakpoint
"library function #4" "\\.?bar .*"
140 # Run to the next stop and check that the first library has been unloaded.
141 gdb_continue_to_breakpoint
"library unload #1" "\\.?stop .*"
142 check_info_shared
"info sharedlibrary #7" 0 1
144 # Run to the last stop and check that both libraries are gone.
145 gdb_continue_to_breakpoint
"library unload #2" "\\.?stop .*"
146 check_info_shared
"info sharedlibrary #8" 0 0
148 with_test_prefix styled
{
149 save_vars
{ env
(TERM
) } {
150 # We need an ANSI
-capable terminal to
get the output.
153 clean_restart $testfile
155 gdb_test_no_output
"set style enabled off"
159 gdb_breakpoint
"stop"
160 gdb_continue_to_breakpoint
"library load #1" "\\.?stop .*"
162 # Simple test
for "info sharedlibrary" styling. Look for styled
163 # addresses and file
name.
164 set addr
"\033\\\[34m${hex}\033\\\[m"
165 set sofile
"\033\\\[32m\[^\033\]+\033\\\[m"
166 gdb_test_no_output
"set style enabled on"
167 gdb_test
"info sharedlibrary" \
168 "$addr\[ \t\]+$addr.*$sofile\r\n.*"