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]

Re: [patch] add testsuite infrastructure to deal with shared libraries (now supports IBM's xlc compiler)


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  <pgilliam@us.ibm.com>
	    Daniel Jacobowitz  <dan@codesourcery.com>

	* 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  <pgilliam@us.ibm.com>
	    Daniel Jacobowitz  <dan@codesourcery.com>

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


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