* lib/gdb.exp (gdb_compile_shlib_pthreads): New helper.

* gdb.threads/tls-shared.exp: Use it.  Call gdb_load_shlibs.
This commit is contained in:
Ulrich Weigand 2011-07-15 14:11:22 +00:00
parent 31f83dc55a
commit 756d88a7fe
3 changed files with 45 additions and 41 deletions

View 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

View 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"

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