This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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 } {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]