From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26493 invoked by alias); 12 Nov 2009 15:44:42 -0000 Received: (qmail 26483 invoked by uid 22791); 12 Nov 2009 15:44:40 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 12 Nov 2009 15:44:32 +0000 Received: (qmail 21035 invoked from network); 12 Nov 2009 15:44:30 -0000 Received: from unknown (HELO localhost) (froydnj@127.0.0.2) by mail.codesourcery.com with ESMTPA; 12 Nov 2009 15:44:30 -0000 Date: Thu, 12 Nov 2009 15:44:00 -0000 From: Nathan Froyd To: gdb-patches@sourceware.org Subject: [PATCH,testsuite] fix remote-host testing for tests using shared libraries Message-ID: <20091112154430.GK31393@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.13 (2006-08-11) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-11/txt/msg00281.txt.bz2 The patch below fixes various remote-host failures for tests that use shared libraries. In normal testing, we link shared libraries using absolute paths, so it's not a problem to find the libraries at runtime. However, in remote-host testing, shared libraries are copied to the remote host and linked against using relative paths. Therefore, we need to specify -rpath to ensure that the library is found at runtime. The patch just moves a bit of logic around and adds a remote_host check. Tested with cross to powerpc-linux-gnu on mingw32 host. OK to commit? -Nathan * lib/gdb.exp (gdb_compile): Also set rpath for shlib=, on a remote host. Index: lib/gdb.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v retrieving revision 1.126 diff -u -u -r1.126 gdb.exp --- lib/gdb.exp 10 Nov 2009 20:54:55 -0000 1.126 +++ lib/gdb.exp 12 Nov 2009 15:35:42 -0000 @@ -1734,6 +1734,7 @@ # "shlib=librarypath" in OPTIONS. set new_options "" set shlib_found 0 + set shlib_load 0 foreach opt $options { if [regexp {^shlib=(.*)} $opt dummy_var shlib_name] { if [test_compiler_info "xlc-*"] { @@ -1755,22 +1756,33 @@ } } } elseif { $opt == "shlib_load" } { - if { ([istarget "*-*-mingw*"] - || [istarget *-*-cygwin*] - || [istarget *-*-pe*] - || [istarget arm*-*-symbianelf*] - || [istarget hppa*-*-hpux*])} { - # Do not need anything. - } elseif { [istarget *-*-openbsd*] } { - lappend new_options "additional_flags=-Wl,-rpath,${outdir}" - } else { - lappend new_options "libs=-ldl" - lappend new_options "additional_flags=-Wl,-rpath,\\\$ORIGIN" - } + set shlib_load 1 } else { lappend new_options $opt } } + + # We typically link to shared libraries using an absolute path, and + # that's how they are found at runtime. If we are going to + # dynamically load one by basename, we must specify rpath. If we + # are using a remote host, DejaGNU will link to the shared library + # using a relative path, so again we must specify an rpath. + if { $shlib_load || ($shlib_found && [is_remote host]) } { + if { ([istarget "*-*-mingw*"] + || [istarget *-*-cygwin*] + || [istarget *-*-pe*] + || [istarget arm*-*-symbianelf*] + || [istarget hppa*-*-hpux*])} { + # Do not need anything. + } elseif { [istarget *-*-openbsd*] } { + lappend new_options "additional_flags=-Wl,-rpath,${outdir}" + } else { + if { $shlib_load } { + lappend new_options "libs=-ldl" + } + lappend new_options "additional_flags=-Wl,-rpath,\\\$ORIGIN" + } + } set options $new_options if [target_info exists gdb_stub] {