X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftestsuite%2Fgdb.base%2Fshlib-call.exp;h=762a3f38c0cba6239067f63802e6e20f22534026;hb=84c93cd5f1ff869eb8c04314738eaa2cddb3c29e;hp=26a6556464de841caae48da46b4757979103d156;hpb=55264cb45f7440b284160602a692fdb07b0a27b3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/testsuite/gdb.base/shlib-call.exp b/gdb/testsuite/gdb.base/shlib-call.exp index 26a6556464..762a3f38c0 100644 --- a/gdb/testsuite/gdb.base/shlib-call.exp +++ b/gdb/testsuite/gdb.base/shlib-call.exp @@ -1,21 +1,17 @@ -# Copyright 1997, 1998, 1999, 2000, 2004 Free Software Foundation, Inc. +# Copyright 1997-2016 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Please email any bugs, comments, and/or additions to this file to: -# bug-gdb@prep.ai.mit.edu +# along with this program. If not, see . # file to test calls into shared libraries # the source files for this test are: @@ -32,100 +28,41 @@ #prop lib shr1.sl #prop lib shr2.sl -if $tracelevel then { - strace $tracelevel -} -set prms_id 0 -set bug_id 0 - -# are we on a target board? -if ![isnative] then { +if {[skip_shlib_tests]} { return 0 } -set testfile "shmain" -set libfile "shr" -set srcfile ${testfile}.c -set binfile ${objdir}/${subdir}/${testfile} +standard_testfile shmain.c shr1.c shr2.c +set srcfile ${srcdir}/${subdir}/${srcfile} +set lib1src ${srcdir}/${subdir}/${srcfile2} +set lib2src ${srcdir}/${subdir}/${srcfile3} +set lib1 [standard_output_file shr1.sl] +set lib2 [standard_output_file shr2.sl] -# build the first test case -if [get_compiler_info ${binfile}] { - return -1 -} +set lib_opts "debug" +set exec_opts [list debug shlib=${lib1} shlib=${lib2}] -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}.o" object {debug}] != "" } { - gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." -} - - -# 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" - } -} - -if {[gdb_compile "${srcdir}/${subdir}/${libfile}1.c" "${objdir}/${subdir}/${libfile}1.o" object [list debug $additional_flags]] != ""} { - gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." -} - -if {[gdb_compile "${srcdir}/${subdir}/${libfile}2.c" "${objdir}/${subdir}/${libfile}2.o" object [list debug $additional_flags]] != ""} { - gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." -} - -if [istarget "hppa*-*-hpux*"] { - remote_exec build "ld -b ${objdir}/${subdir}/${libfile}1.o -o ${objdir}/${subdir}/${libfile}1.sl" - remote_exec build "ld -b ${objdir}/${subdir}/${libfile}2.o -o ${objdir}/${subdir}/${libfile}2.sl" -} else { - set additional_flags "additional_flags=-shared" - if {[gdb_compile "${objdir}/${subdir}/${libfile}1.o" "${objdir}/${subdir}/${libfile}1.sl" executable [list debug $additional_flags]] != ""} { - gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." - } - if {[gdb_compile "${objdir}/${subdir}/${libfile}2.o" "${objdir}/${subdir}/${libfile}2.sl" executable [list debug $additional_flags]] != ""} { - gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." - } +if [get_compiler_info] { + 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 "${objdir}/${subdir}/${testfile}.o ${objdir}/${subdir}/${libfile}1.sl ${objdir}/${subdir}/${libfile}2.sl" "${binfile}" executable [list debug $additional_flags]] != ""} { - gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +if { [gdb_compile_shlib ${lib1src} ${lib1} $lib_opts] != "" + || [gdb_compile_shlib ${lib2src} ${lib2} $lib_opts] != "" + || [gdb_compile ${srcfile} ${binfile} executable $exec_opts] != ""} { + untested "failed to compile" + return -1 } - - # Start with a fresh gdb. -gdb_exit -gdb_start -gdb_reinitialize_dir $srcdir/$subdir -gdb_load ${binfile} -send_gdb "set print sevenbit-strings\n" ; gdb_expect -re "$gdb_prompt $" -send_gdb "set print address off\n" ; gdb_expect -re "$gdb_prompt $" -send_gdb "set width 0\n" ; gdb_expect -re "$gdb_prompt $" +clean_restart ${binfile} +gdb_load_shlib $lib1 +gdb_load_shlib $lib2 + +gdb_test_no_output "set print sevenbit-strings" +gdb_test_no_output "set print address off" +gdb_test_no_output "set width 0" if ![runto_main] then { @@ -135,74 +72,41 @@ if ![runto_main] then { #step -over - send_gdb "next\n" - gdb_expect { - -re ".*g = shr1\\(g\\).*$gdb_prompt $" {pass "next to shr1"} - -re ".*$gdb_prompt $" { fail "next to shr1" } - timeout { fail "next to shr1 (timeout)" } - } - - +gdb_test "next 2" "g = shr1\\(g\\);" "next to shr1" #print g -send_gdb "print g\n" -gdb_expect { - -re ".*\[0-9\]* = 1.*$gdb_prompt $" { - pass "print g" - } - -re ".*$gdb_prompt $" { fail "print g" } - timeout { fail "(timeout) print g" } - } - +gdb_test "print g" "\[0-9\]* = 1" "print g" #step -over - if ![gdb_skip_stdio_test "next over shr1"] { - send_gdb "next\n" - gdb_expect { - -re ".*address of sgs is $hex.*g = shr2\\(g\\).*$gdb_prompt $" { - pass "next over shr1" - } - -re ".*$gdb_prompt $" { fail "next over shr1" } - timeout { fail "next over shr1 (timeout)" } - } - } else { - gdb_test "next" "" "" - } +if ![gdb_skip_stdio_test "next over shr1"] { + gdb_test_stdio "next" \ + "address of sgs is $hex" \ + "g = shr2\\(g\\);" \ + "next over shr1" +} else { + gdb_test "next" ".*" "" +} #print g -send_gdb "print g\n" -gdb_expect { - -re ".*\[0-9\]* = 2.*$gdb_prompt $" { - pass "print g" } - -re ".*$gdb_prompt $" { fail "print g" } - timeout { fail "(timeout) print g" } - } +gdb_test "print g" "\[0-9\]* = 2" "print g" #print shr1(1) - if ![gdb_skip_stdio_test "print shr1(1)"] { - send_gdb "print shr1(1)\n" - gdb_expect { - -re ".*address of sgs is $hex.*\[0-9\]* = 2.*$gdb_prompt $" { - pass "print shr1(1)" - } - -re ".*$gdb_prompt $" { fail "print shr1(1)" } - timeout { fail "(timeout) print shr1(1)" } - } - } +if ![gdb_skip_stdio_test "print shr1(1)"] { + gdb_test_stdio "print shr1(1)" \ + "address of sgs is $hex" \ + "\[0-9\]* = 2" \ + "print shr1(1)" +} #print shr1(g) - if ![gdb_skip_stdio_test "print shr1(g)"] { - send_gdb "print shr1(g)\n" - gdb_expect { - -re ".*address of sgs is $hex.*\[0-9\]* = 4.*$gdb_prompt $" { - pass "print shr1(g)" - } - -re ".*$gdb_prompt $" { fail "print shr1(g)" } - timeout { fail "(timeout) print shr1(g)" } - } - } +if ![gdb_skip_stdio_test "print shr1(g)"] { + gdb_test_stdio "print shr1(g)" \ + "address of sgs is $hex" \ + "\[0-9\]* = 4" \ + "print shr1(g)" +} #break shr2 #go @@ -211,73 +115,45 @@ gdb_test "break shr2" \ "breakpoint function shr2" gdb_test "continue" \ - "Continuing\\..*Breakpoint \[0-9\]+, shr2 \\(.*\\) at.*shr2\\.c:7.*7.*return 2.x;" \ + "Continuing\\..*Breakpoint ${decimal}, shr2 \\(.*\\) at.*shr2\\.c:${decimal}.*shr2-return \\*\\/" \ "run until breakpoint set at a function" #print shr1(1) if ![gdb_skip_stdio_test "print shr1(1) 2nd time"] { - send_gdb "print shr1(1)\n" - gdb_expect { - -re ".*address of sgs is $hex.*\[0-9\]* = 2.*$gdb_prompt $" { - pass "print shr1(1) 2nd time" - } - -re ".*$gdb_prompt $" { fail "print shr1(1) 2nd time" } - timeout { fail "(timeout) print shr1(1) 2nd time" } - } + gdb_test_stdio "print shr1(1)" \ + "address of sgs is $hex" \ + "\[0-9\]* = 2" \ + "print shr1(1) 2nd time" } #print mainshr1(1) -send_gdb "print mainshr1(1)\n" -gdb_expect { - -re ".*\[0-9\]* = 2.*$gdb_prompt $" { - pass "print mainshr1(1) from shlib func" - } - -re ".*$gdb_prompt $" { fail "print mainshr1(1) from shlib func" } - timeout { fail "(timeout) print mainshr1(1) from shlib func" } - } +gdb_test "print mainshr1(1)" "\[0-9\]* = 2" \ + "print mainshr1(1) from shlib func" #step -return - send_gdb "step\n" - # A step at this point will either take us entirely out of - # the function or into the function's epilogue. The exact - # behavior will differ depending upon upon whether or not - # the compiler emits line number information for the epilogue. - gdb_expect { - -re "main \\(\\) at.*g = mainshr1\\(g\\);.*$gdb_prompt $" { - pass "step out of shr2 to main" - } - -re ".*\\\}.*$gdb_prompt $" { - pass "step out of shr2 to main (stopped in shr2 epilogue)" - send_gdb "step\n" - gdb_expect { - -re "main \\(\\) at.*g = mainshr1\\(g\\);.*$gdb_prompt $" { pass "step out of shr2 epilogue to main"} - -re ".*$gdb_prompt $" { fail "step out of shr2 epilogue to main" } - timeout { fail "step out of shr2 epilogue to main (timeout)" } - } - } - -re ".*$gdb_prompt $" { fail "step out of shr2" } - timeout { fail "step out of shr2 to main (timeout)" } +# A step at this point will either take us entirely out of +# the function or into the function's epilogue. The exact +# behavior will differ depending upon upon whether or not +# the compiler emits line number information for the epilogue. +gdb_test_multiple "step" "step out of shr2 to main" { + -re "main \\(\\) at.*g = mainshr1\\(g\\);.*$gdb_prompt $" { + pass "step out of shr2 to main" + } + -re ".*\\\}.*$gdb_prompt $" { + pass "step out of shr2 to main (stopped in shr2 epilogue)" + gdb_test "step" \ + "main \\(\\) at.*g = mainshr1\\(g\\);" \ + "step out of shr2 epilogue to main" } +} - #print mainshr1(1) -send_gdb "print mainshr1(1)\n" -gdb_expect { - -re ".*\[0-9\]* = 2.*$gdb_prompt $" { - pass "print mainshr1(1)" - } - -re ".*$gdb_prompt $" { fail "print mainshr1(1) from main" } - timeout { fail "(timeout) print mainshr1(1) from main" } - } +gdb_test "print mainshr1(1)" "\[0-9\]* = 2" "print mainshr1(1)" #step - send_gdb "step\n" - gdb_expect { - -re ".*mainshr1 \\(g=4\\) at.*return 2.g;.*$gdb_prompt $" { pass "step into mainshr1"} - -re ".*$gdb_prompt $" { fail "step into mainshr1" } - timeout { fail "step into mainshr1 (timeout)" } - } +gdb_test "step" "mainshr1 \\(g=4\\) at.*return 2.g;" \ + "step into mainshr1" # Start with a fresh gdb. @@ -285,9 +161,10 @@ gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} -send_gdb "set print sevenbit-strings\n" ; gdb_expect -re "$gdb_prompt $" -send_gdb "set print address off\n" ; gdb_expect -re "$gdb_prompt $" -send_gdb "set width 0\n" ; gdb_expect -re "$gdb_prompt $" +gdb_test_no_output "set print sevenbit-strings" +gdb_test_no_output "set print address off" +gdb_test_no_output "set width 0" + # PR's 16495, 18213 # test that we can re-set breakpoints in shared libraries @@ -299,12 +176,12 @@ if ![is_remote target] { gdb_test "run" "Starting program:.*Breakpoint .,.*" \ "run to bp in shared library" - gdb_test "cont" ".*Program exited normally..*" + gdb_continue_to_end "" continue 1 gdb_test "run" "Starting program:.*Breakpoint .,.*" \ "re-run to bp in shared library (PR's 16495, 18213)" - gdb_test "cont" ".*Program exited normally..*" + gdb_continue_to_end "" continue 1 } return 0