1 # Copyright
2010-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 # In some cases gdbserver cannot find the DT_DEBUG library list
on its own and
17 # it needs to fall
back to GDB solib
-svr4.c look up via symbols from the main
19 # gdbserver
:1234 ld-linux
-x86
-64.so
.2 /bin
/prog
21 #
(gdb
) target remote ...
23 load_lib gdbserver
-support.exp
24 load_lib prelink
-support.exp
26 if {[skip_gdbserver_tests
] ||
[skip_shlib_tests
]} {
30 standard_testfile solib
-list
-main.c
31 set srclibfile $
{testfile
}-lib.c
32 set binlibfile
[standard_output_file $
{testfile
}.so
]
34 if { [get_compiler_info
]
35 ||
[gdb_compile_shlib
"${srcdir}/${subdir}/${srclibfile}" "${binlibfile}" {debug}] != ""
36 ||
[gdb_compile
"${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "shlib=${binlibfile}"] != "" } {
37 untested
"failed to compile"
41 set interp_system
[section_get $
{binfile
} .interp
]
42 verbose
-log "system interpreter is: $interp_system"
44 foreach nonstop
{ 0 1 } { with_test_prefix
"non-stop $nonstop" {
46 # clean_restart assumes $
{objdir
}/$
{subdir
}/ which is not applicable
47 #
for $
{interp_system
}.
50 gdb_reinitialize_dir $srcdir
/$subdir
51 gdb_load_shlib $
{binlibfile
}
53 set remote_binfile
[gdb_remote_download target $binfile
]
55 # When testing remote
, the file path we receive may be only the file
name,
56 #
"solib-list". ld-linux doesn't seem to be able to find the file when
57 # passing just the file
name, it wants either the absolute path or a
58 # relative path with at least one directory component. Calling readlink
on
59 # the target to
get the full path will make it happy.
60 set remote_binfile
[lindex
[remote_exec target
"readlink -f $remote_binfile"] 1]
62 # Make sure we
're disconnected, in case we're testing with an
63 # extended
-remote board
, therefore already connected.
64 gdb_test
"disconnect" ".*"
66 gdb_test
"set non-stop $nonstop"
68 # It is required
for the non
-stop
mode, GDB would try to step over
69 # _dl_debug_state breakpoint will still only
ld.so loaded in gdbserver.
70 # But GDB having symbols from the main executable it would try to use
71 # displaced
-stepping buffer at unmapped that time address _start.
72 gdb_test
"set displaced-stepping off"
74 # Unset last_loaded_file because we want GDBserver spawn
75 # $
{interp_system
} not $
{last_loaded_file
}.
76 global last_loaded_file
77 unset
-nocomplain last_loaded_file
79 # Note we pass $
{interp_system
}, the
program gdbserver spawns
, as
80 #
argument here
, instead of using gdb_load
, because we don
't want
81 # to download the interpreter to the target (it's already there
)
82 # or to the test output directory.
83 set res
[gdbserver_spawn
"${interp_system} ${remote_binfile}"]
84 set gdbserver_protocol
[lindex $res
0]
85 set gdbserver_gdbport
[lindex $res
1]
87 #
Load BINFILE after gdbserver_spawn
(so that gdbserver executes
ld.so
)
88 # but before
"target remote" below so that qSymbol data get already
89 # initialized from BINFILE
(and not from
ld.so first needing a change to
91 gdb_test
"file ${binfile}" {Reading symbols from .*\.\.\..*} "file binfile" \
92 {(Are you sure you want to change the file|
Load new symbol table from
".*")\? \(y or n\) } "y"
94 set test
"target $gdbserver_protocol"
95 gdb_test_multiple
"target $gdbserver_protocol $gdbserver_gdbport" $test {
96 -re
"Remote debugging using .*\r\n$gdb_prompt " {
97 #
Do not anchor end
, there may be more output in non
-stop
mode.
102 gdb_test
"continue" "Program received signal SIGUSR1, .*"
103 gdb_test
"sharedlibrary" ".*"
104 gdb_test
"p libvar" " = 23"