This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[patch] add testsuite infrastructure to deal with shared libraries
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?
--
04-06-2005 Paul Gilliam <pgilliam@us.ibm.com>
* testsuite/lib/gdb.exp: Add infrastructure for share libs:
(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.58
diff -c -3 -p -r1.58 gdb.exp
*** lib/gdb.exp 10 Sep 2004 01:04:59 -0000 1.58
--- lib/gdb.exp 6 Apr 2005 17:23:15 -0000
*************** proc gdb_compile {source dest type optio
*** 1324,1329 ****
--- 1324,1352 ----
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] {
+ 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_objc {source dest type
*** 1434,1439 ****
--- 1457,1506 ----
}
}
+ # Build a shared library from SOURCES. You must use get_compiler_info
+ # first.
+
+ proc gdb_compile_shlib {sources dest options} {
+ global gcc_compiled
+
+ set obj_options $options
+ if { ! [test_compiler_info "gcc-*"]} {
+ if [istarget "hppa*-hp-hpux*"] then {
+ lappend obj_options "additional_flags=+z"
+ } elseif { [istarget "mips-sgi-irix*"] } {
+ # Disable SGI compiler's implicit -Dsgi
+ lappend obj_options "additional_flags=-Usgi"
+ } else {
+ # don't know what the compiler is...
+ }
+ } else {
+ if { !([istarget "powerpc*-*-aix*"]
+ || [istarget "rs6000*-*-aix*"]) } {
+ lappend obj_options "additional_flags=-fpic"
+ }
+ }
+
+ 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
+ lappend link_options "additional_flags=-shared"
+ if {[gdb_compile "${objects}" "${dest}" executable $link_options] != ""} {
+ return -1
+ }
+ }
+ }
+
proc send_gdb { string } {
global suppress_flag;
if { $suppress_flag } {