* lib/gdb.exp (gdb_compile_shlib_pthreads): New helper.
authorUlrich Weigand <uweigand@de.ibm.com>
Fri, 15 Jul 2011 14:11:22 +0000 (14:11 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Fri, 15 Jul 2011 14:11:22 +0000 (14:11 +0000)
* gdb.threads/tls-shared.exp: Use it.  Call gdb_load_shlibs.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.threads/tls-shared.exp
gdb/testsuite/lib/gdb.exp

index 3befd3b93c7e17c2602430cb9daa40749976c6c8..18ddc59e3ded02f8d420b82e622dc1e18a1f360b 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-15  Ulrich Weigand  <ulrich.weigand@linaro.org>
+
+       * lib/gdb.exp (gdb_compile_shlib_pthreads): New helper.
+       * gdb.threads/tls-shared.exp: Use it.  Call gdb_load_shlibs.
+
 2011-07-15  Ulrich Weigand  <ulrich.weigand@linaro.org>
 
        * lib/gdb.exp (gdb_compile): Specify rpath if the *target* is
index 5a46c8fa651d0639e3ae3e370df1214a9fd68543..b82eebdafb9551a6bf20d8cc51d352dbccf46c74 100644 (file)
@@ -24,6 +24,8 @@ set testfile tls-main
 set libfile tls-shared
 set srcfile ${testfile}.c
 set binfile ${objdir}/${subdir}/${testfile}
+set srcfile_lib ${libfile}.c
+set binfile_lib ${objdir}/${subdir}/${libfile}.so
 
 remote_exec build "rm -f ${binfile}"
 
@@ -32,48 +34,9 @@ if [get_compiler_info ${binfile}] {
     return -1
 }
 
-if  { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}.o" object {debug}] != "" } {
-    return -1
-}
-
-# Build the shared libraries this test case needs.
-#
-
-if {$gcc_compiled == 0} {
-    if [istarget "hppa*-hp-hpux*"] then {
-        set additional_flags "additional_flags=+z"
-    } elseif { [istarget "mips-sgi-irix*"] } {
-        # Disable SGI compiler's implicit -Dsgi
-        set additional_flags "additional_flags=-Usgi"
-    } else {
-        # don't know what the compiler is...
-        set additional_flags ""
-    }
-} else {
-    if { ([istarget "powerpc*-*-aix*"]
-    || [istarget "rs6000*-*-aix*"]) } {
-        set additional_flags ""
-    } else {
-        set additional_flags "additional_flags=-fpic"
-    }
-}
-
-set additional_flags "$additional_flags -shared"
-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${libfile}.c" "${objdir}/${subdir}/${libfile}.so" executable [list debug $additional_flags "incdir=${objdir}"]] != ""} {
-    return -1
-}
-
-if { ($gcc_compiled 
-&&  ([istarget "powerpc*-*-aix*"]
-|| [istarget "rs6000*-*-aix*"] )) } {
-    set additional_flags "additional_flags=-L${objdir}/${subdir}"
-} elseif { [istarget "mips-sgi-irix*"] } {
-    set additional_flags "additional_flags=-rpath ${objdir}/${subdir}"
-} else {
-    set additional_flags ""
-}
 
-if {[gdb_compile_pthreads "${objdir}/${subdir}/${testfile}.o ${objdir}/${subdir}/${libfile}.so" "${binfile}" executable [list debug $additional_flags]] != ""} {
+if { [gdb_compile_shlib_pthreads ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} {debug}] != ""
+     || [gdb_compile_pthreads ${srcdir}/${subdir}/${srcfile} ${binfile} executable [list debug shlib=${binfile_lib}]] != ""} {
     return -1
 }
 
@@ -82,6 +45,7 @@ gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
+gdb_load_shlibs ${binfile_lib}
 
 if ![runto_main] then {
     fail "Can't run to main"
index 7ddcb13d4e59647bfa8ac31f3223f7b526294ab4..ef5ad5cef5f806eb6b95cbfb73891a82a6f314ce 100644 (file)
@@ -2401,6 +2401,41 @@ proc gdb_compile_shlib {sources dest options} {
     }
 }
 
+# This is just like gdb_compile_shlib, above, except that it tries compiling
+# against several different thread libraries, to see which one this
+# system has.
+proc gdb_compile_shlib_pthreads {sources dest options} {
+    set built_binfile 0
+    set why_msg "unrecognized error"
+    foreach lib {-lpthreads -lpthread -lthread ""} {
+        # This kind of wipes out whatever libs the caller may have
+        # set.  Or maybe theirs will override ours.  How infelicitous.
+        set options_with_lib [concat $options [list libs=$lib quiet]]
+        set ccout [gdb_compile_shlib $sources $dest $options_with_lib]
+        switch -regexp -- $ccout {
+            ".*no posix threads support.*" {
+                set why_msg "missing threads include file"
+                break
+            }
+            ".*cannot open -lpthread.*" {
+                set why_msg "missing runtime threads library"
+            }
+            ".*Can't find library for -lpthread.*" {
+                set why_msg "missing runtime threads library"
+            }
+            {^$} {
+                pass "successfully compiled posix threads test case"
+                set built_binfile 1
+                break
+            }
+        }
+    }
+    if {!$built_binfile} {
+        unsupported "Couldn't compile $sources: ${why_msg}"
+        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} {