[patch] add testsuite infrastructure to deal with shared libraries (now supports IBM's xlc compiler)
Paul Gilliam
pgilliam@us.ibm.com
Tue Apr 12 18:25:00 GMT 2005
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?
Here is a new version of the patch. This version allows for using IBM's xlc compiler.
Ok to commit?
-=# Paul #=-
2005-04-12 Paul Gilliam <pgilliam@us.ibm.com>
* lib/gdb.exp (gdb_compile) (gdb_compile_shlib)(NEW): Add infrustructure for building and
using shared libraries
Index: lib/gdb.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.59
diff -c -3 -p -r1.59 gdb.exp
*** lib/gdb.exp 6 Apr 2005 21:38:48 -0000 1.59
--- lib/gdb.exp 11 Apr 2005 22:10:07 -0000
*************** proc gdb_compile {source dest type optio
*** 1335,1340 ****
--- 1335,1369 ----
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]";
*************** proc gdb_compile_pthreads {source dest t
*** 1405,1410 ****
--- 1434,1497 ----
}
}
+ # 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} {
More information about the Gdb-patches
mailing list