X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftestsuite%2Fgdb.base%2Fshlib-call.exp;h=81d2e03757de096dba1fb90b16edadff3f5eb095;hb=01d8c27e4f77375c0e157d115266129b76ff6734;hp=29ac1cb8b594eef5aedd36f57bbba8cd7c19618a;hpb=93f02886fd15eef1d38f073c54031c812e564128;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/testsuite/gdb.base/shlib-call.exp b/gdb/testsuite/gdb.base/shlib-call.exp index 29ac1cb8b5..81d2e03757 100644 --- a/gdb/testsuite/gdb.base/shlib-call.exp +++ b/gdb/testsuite/gdb.base/shlib-call.exp @@ -1,22 +1,17 @@ -# Copyright 1997, 1998, 1999, 2000, 2004, 2007 -# 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: @@ -33,31 +28,22 @@ #prop lib shr1.sl #prop lib shr2.sl -if $tracelevel then { - strace $tracelevel -} - -set prms_id 0 -set bug_id 0 if {[skip_shlib_tests]} { return 0 } -set testfile "shmain" -set libfile1 "shr1" -set libfile2 "shr2" -set srcfile ${srcdir}/${subdir}/${testfile}.c -set lib1src ${srcdir}/${subdir}/${libfile1}.c -set lib2src ${srcdir}/${subdir}/${libfile2}.c -set lib1 ${objdir}/${subdir}/${libfile1}.sl -set lib2 ${objdir}/${subdir}/${libfile2}.sl -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] set lib_opts "debug" set exec_opts [list debug shlib=${lib1} shlib=${lib2}] -if [get_compiler_info ${binfile}] { +if [get_compiler_info] { return -1 } @@ -70,15 +56,12 @@ if { [gdb_compile_shlib ${lib1src} ${lib1} $lib_opts] != "" # Start with a fresh gdb. -gdb_exit -gdb_start -gdb_reinitialize_dir $srcdir/$subdir -gdb_load ${binfile} +clean_restart ${binfile} gdb_load_shlibs $lib1 $lib2 -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" if ![runto_main] then { @@ -88,74 +71,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 @@ -164,73 +114,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. @@ -238,9 +160,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 @@ -252,12 +175,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