From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6808 invoked by alias); 14 Apr 2005 19:07:16 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 6151 invoked from network); 14 Apr 2005 19:07:01 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sourceware.org with SMTP; 14 Apr 2005 19:07:01 -0000 Received: from drow by nevyn.them.org with local (Exim 4.50 #1 (Debian)) id 1DM9g2-0004lR-Sd; Thu, 14 Apr 2005 15:06:58 -0400 Date: Thu, 14 Apr 2005 19:07:00 -0000 From: Daniel Jacobowitz To: Paul Gilliam Cc: gdb-patches@sources.redhat.com Subject: Re: [patch] add testsuite infrastructure to deal with shared libraries (now supports IBM's xlc compiler) Message-ID: <20050414190658.GC26377@nevyn.them.org> Mail-Followup-To: Paul Gilliam , gdb-patches@sources.redhat.com References: <200504011440.16592.pgilliam@us.ibm.com> <20050401231259.GA3382@nevyn.them.org> <200504061049.10971.pgilliam@us.ibm.com> <200504121123.27555.pgilliam@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200504121123.27555.pgilliam@us.ibm.com> User-Agent: Mutt/1.5.8i X-SW-Source: 2005-04/txt/msg00132.txt.bz2 On Tue, Apr 12, 2005 at 10:23:27AM -0800, Paul Gilliam wrote: > On Wednesday 06 April 2005 10:49, Paul Gilliam wrote: > > This patch is a slightly tweeked version of a part of this patch: > > http://sources.redhat.com/ml/gdb-patches/2004-11/msg00538.html > > > > The first part of the patch modifies 'gdb_compile' to add platform-specific options to > > 'target_compile' if a shared library was specified using "shlib=librarypath" in the options > > argument to 'gdb_compile'. > > > > The second part of the patch adds the new proc 'gdb_compile_shlib' which is used to > > build shared libraries in platform-specific ways. > > > > The tweek is to use 'test_compile_info' instead of $gcc_compiled. > > > > -=# Paul #=- > > PS: How do I indicate in the change log that this is really the work of Daniel Jacobowitz? By listing more than one name in the changelog, like this. You haven't got the knack of GNU changelogs quite down yet... 2005-04-14 Paul Gilliam Daniel Jacobowitz * lib/gdb.exp (gdb_compile): Handle shlib=. (gdb_compile_shlib): New function. > + set link_options options That ought to be $options. Note that this is my bug from the original posting. I'm checking in the attached, which includes that and a formatting fix. -- Daniel Jacobowitz CodeSourcery, LLC 2005-04-14 Paul Gilliam Daniel Jacobowitz * lib/gdb.exp (gdb_compile): Handle shlib=. (gdb_compile_shlib): New function. Index: lib/gdb.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v retrieving revision 1.60 diff -u -p -r1.60 gdb.exp --- lib/gdb.exp 12 Apr 2005 20:14:35 -0000 1.60 +++ lib/gdb.exp 14 Apr 2005 19:05:24 -0000 @@ -1335,6 +1335,35 @@ proc gdb_compile {source dest type optio global gdb_wrapper_flags; global gdb_wrapper_initialized; + # Add platform-specific options if a shared library was specified using + # "shlib=librarypath" in OPTIONS. + set new_options "" + set shlib_found 0 + foreach opt $options { + if [regexp {^shlib=(.*)} $opt dummy_var shlib_name] { + if [test_compiler_info "xlc-*"] { + # IBM xlc compiler doesn't accept shared library named other + # than .so: use "-Wl," to bypass this + lappend source "-Wl,$shlib_name" + } else { + lappend source $shlib_name + } + if {$shlib_found == 0} { + set shlib_found 1 + if { ([test_compiler_info "gcc-*"] + && ([istarget "powerpc*-*-aix*"] + || [istarget "rs6000*-*-aix*"] )) } { + lappend options "additional_flags=-L${objdir}/${subdir}" + } elseif { [istarget "mips-sgi-irix*"] } { + lappend options "additional_flags=-rpath ${objdir}/${subdir}" + } + } + } else { + lappend new_options $opt + } + } + set options $new_options + if [target_info exists gdb_stub] { set options2 { "additional_flags=-Dusestubs" } lappend options "libs=[target_info gdb_stub]"; @@ -1405,6 +1434,63 @@ proc gdb_compile_pthreads {source dest t } } +# Build a shared library from SOURCES. You must use get_compiler_info +# first. + +proc gdb_compile_shlib {sources dest options} { + set obj_options $options + + switch -glob [test_compiler_info] { + "xlc-*" { + lappend obj_options "additional_flags=-qpic" + } + "gcc-*" { + if { !([istarget "powerpc*-*-aix*"] + || [istarget "rs6000*-*-aix*"]) } { + lappend obj_options "additional_flags=-fpic" + } + } + default { + switch -glob [istarget] { + "hppa*-hp-hpux*" { + lappend obj_options "additional_flags=+z" + } + "mips-sgi-irix*" { + # Disable SGI compiler's implicit -Dsgi + lappend obj_options "additional_flags=-Usgi" + } + default { + # don't know what the compiler is... + } + } + } + } + + set outdir [file dirname $dest] + set objects "" + foreach source $sources { + set sourcebase [file tail $source] + if {[gdb_compile $source "${outdir}/${sourcebase}.o" object $obj_options] != ""} { + return -1 + } + lappend objects ${outdir}/${sourcebase}.o + } + + if [istarget "hppa*-*-hpux*"] { + remote_exec build "ld -b ${objects} -o ${dest}" + } else { + set link_options $options + if [test_compiler_info "xlc-*"] { + lappend link_options "additional_flags=-qmkshrobj" + } else { + lappend link_options "additional_flags=-shared" + } + if {[gdb_compile "${objects}" "${dest}" executable $link_options] != ""} { + return -1 + } + } +} + # This is just like gdb_compile_pthreads, above, except that we always add the # objc library for compiling Objective-C programs proc gdb_compile_objc {source dest type options} {