1 # Copyright
2011-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 # This file was written by Justin Lebar.
(justin.lebar@gmail.com
)
19 # Tests skipping shared libraries.
22 # This only works
on GNU
/Linux.
23 if { ![isnative
] ||
[is_remote host
] ||
![istarget
*-linux
*] ||
[skip_shlib_tests
]} {
28 set srcfile_main
"${test}-main.c"
29 set executable_main $
{test
}-test
30 set binfile_main
[standard_output_file $
{executable_main
}]
31 set srcfile_lib
"${test}-lib.c"
32 set libname
"lib${test}"
33 set binfile_lib
[standard_output_file $
{libname
}.so
]
36 #
Compile our
program under test. The main
program references a shared library
37 # libskip
-solib.so
, which contains two functions
, square
(), which is
38 # referenced by the main
program, and multiply
(), which is not referenced by
42 if {[gdb_compile_shlib $
{srcdir
}/$
{subdir
}/$
{srcfile_lib
} $
{binfile_lib
} [list debug additional_flags
=-fPIC
-Wl
,-soname
,$
{libname
}.so
]] != ""} {
46 if {[gdb_compile
"${srcdir}/${subdir}/${srcfile_main}" "${binfile_main}.o" object debug] != ""} {
50 set testobjdir
[standard_output_file
{}]
51 if {[gdb_compile
"${binfile_main}.o" "${binfile_main}" executable \
52 [list debug
"additional_flags=-L$testobjdir -l${test} \
53 -Wl
,-rpath
=$testobjdir
"]] != ""} {
57 clean_restart $
{executable_main
}
60 # At this point
, if we try to skip the file $
{srcfile_lib
} or the function
61 # multiply
(), we should
get a prompt asking us
if we want to enable the
62 # skip entry pending a shared library
load.
65 gdb_test
"skip file ${srcfile_lib}" \
66 "File ${srcfile_lib} will be skipped when stepping." \
67 "ignoring file in solib" \
68 "No source file named ${srcfile_lib}.*
69 Ignore file pending future shared library
load.
*" \
73 # Checkinfo skip list.
75 gdb_test
"info skip" \
76 "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s*
77 1\\s
+y
\\s
+n
\\s
+$
{srcfile_lib
}\\s
+n
\\s
+<none>\\s
*" \
78 "info skip with pending file"
80 if ![runto_main
] { fail
"skip tests suppressed" }
83 # We shouldn
't step into square(), since we skipped skip-solib-lib.c.
86 gdb_test "bt" "#0\\s+main.*" "step after ignoring solib file."
89 # Now restart gdb and testing ignoring of a function inside a solib.
91 clean_restart ${executable_main}
93 gdb_test "skip function multiply" \
94 "Function multiply will be skipped when stepping\\." \
95 "ignoring function in solib" \
96 "No function found named multiply..*
97 Ignore function pending future shared library load.*" \
100 if ![runto_main] { fail "skip tests suppressed" }
103 # Our first step should take us into square.
105 gdb_test "step" "square.*"
108 # Now our entry should no longer be pending.
110 gdb_test "info skip" \
111 "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s*
112 1\\s+y\\s+n\\s+<none>\\s+n\\s+multiply\\s*" \
113 "info skip for function multiply"
116 # This step shouldn't go into multiply
-- we should skip it and go
on to the
117 # last line of square.
120 gdb_test
"bt" "#0\\s+square.*"