From 4b4f2a7d2551ecb98dbb3fbfff3e3ba177916f78 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 15 Nov 2022 15:24:54 +0100 Subject: [PATCH] [gdb/testsuite] Fix gdb.base/print-file-var.exp for remote target When running test-case gdb.base/print-file-var.exp with target board remote-gdbserver-on-localhost (using REMOTE_TARGET_USERNAME) we run into some failures. Fix these by using the name of a shared lib as returned by gdb_load_shlib. This required splitting up the gdb_load_shlib functionality, which is now defined as: ... proc gdb_load_shlib { file } { set dest [gdb_download_shlib $file] gdb_locate_shlib $file return $dest } ... such that we can do gdb_download_shlib before gdb is started. Tested on x86_64-linux. Co-Authored-by: Ivan Tetyushkin --- gdb/testsuite/gdb.base/print-file-var.exp | 6 ++-- gdb/testsuite/lib/gdb.exp | 40 ++++++++++++++--------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/gdb/testsuite/gdb.base/print-file-var.exp b/gdb/testsuite/gdb.base/print-file-var.exp index 9abe87d7758..841eb22d957 100644 --- a/gdb/testsuite/gdb.base/print-file-var.exp +++ b/gdb/testsuite/gdb.base/print-file-var.exp @@ -59,8 +59,10 @@ proc test {hidden dlopen version_id_main lang} { set main_opts [list debug $lang] set link_opts [list debug shlib=${libobj1}] + set target_libobj2 [gdb_download_shlib $libobj2] + if {$dlopen} { - lappend main_opts "additional_flags=-DSHLIB_NAME=\"$libobj2\"" + lappend main_opts "additional_flags=-DSHLIB_NAME=\"$target_libobj2\"" lappend link_opts "shlib_load" } else { lappend link_opts "shlib=${libobj2}" @@ -79,7 +81,7 @@ proc test {hidden dlopen version_id_main lang} { clean_restart $executable gdb_load_shlib $libobj1 - gdb_load_shlib $libobj2 + gdb_locate_shlib $libobj2 if ![runto_main] { return -1 diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 34c7a1cb50f..0543da31da6 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -5870,30 +5870,40 @@ proc gdb_remote_download {dest fromfile {tofile {}}} { } } -# gdb_load_shlib LIB... -# -# Copy the listed library to the target. +# Copy shlib FILE to the target. -proc gdb_load_shlib { file } { +proc gdb_download_shlib { file } { + return [gdb_remote_download target [shlib_target_file $file]] +} + +# Set solib-search-path to allow gdb to locate shlib FILE. + +proc gdb_locate_shlib { file } { global gdb_spawn_id if ![info exists gdb_spawn_id] { perror "gdb_load_shlib: GDB is not running" } - set dest [gdb_remote_download target [shlib_target_file $file]] - - if {[is_remote target]} { - # If the target is remote, we need to tell gdb where to find the - # libraries. - # - # We could set this even when not testing remotely, but a user - # generally won't set it unless necessary. In order to make the tests - # more like the real-life scenarios, we don't set it for local testing. - gdb_test "set solib-search-path [file dirname $file]" "" \ - "set solib-search-path for [file tail $file]" + # If the target is remote, we need to tell gdb where to find the + # libraries. + if { ![is_remote target] } { + return } + # We could set this even when not testing remotely, but a user + # generally won't set it unless necessary. In order to make the tests + # more like the real-life scenarios, we don't set it for local testing. + gdb_test "set solib-search-path [file dirname $file]" "" \ + "set solib-search-path for [file tail $file]" +} + +# Copy shlib FILE to the target and set solib-search-path to allow gdb to +# locate it. + +proc gdb_load_shlib { file } { + set dest [gdb_download_shlib $file] + gdb_locate_shlib $file return $dest } -- 2.30.2