diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/shlib-call.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/shlib-call.exp | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/shlib-call.exp b/gdb/testsuite/gdb.base/shlib-call.exp new file mode 100644 index 00000000000..414d7427f01 --- /dev/null +++ b/gdb/testsuite/gdb.base/shlib-call.exp @@ -0,0 +1,258 @@ +# Copyright (C) 1997, 1998 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 +# (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 + +# file to test calls into shared libraries +# the source files for this test are: +# +# shmain.c +# shr1.c (shared lib) +# shr2.c (shared lib) +# ss.h (header for shr2.c) +# +# file written by Elena Zannoni: elz@ch.apollo.com +# + +#debug shmain +#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 { + return 0 +} + +set testfile "shmain" +set libfile "shr" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +# build the first test case +if [get_compiler_info ${binfile}] { + return -1 +} + +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" + } else { + # don't know what the compiler is... + 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 {[gdb_compile "${objdir}/${subdir}/${testfile}.o ${objdir}/${subdir}/${libfile}1.sl ${objdir}/${subdir}/${libfile}2.sl" "${binfile}" executable {debug}] != ""} { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + + + +# 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 $" + + +if ![runto_main] then { + perror "C function calling tests suppressed" +} + + +#step -over + + send_gdb "next\n" + gdb_expect { + -re ".*g = shr1\\(g\\).*$gdb_prompt $" {pass "next to shr2"} + -re ".*$gdb_prompt $" { fail "next to shr2" } + timeout { fail "next to shr2 (timeout)" } + } + + + +#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" } + } + + +#step -over + 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)" } + } + +#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" } + } + +#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)" } + } + +#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)" } + } + +#break shr2 +#go +gdb_test "break shr2" \ + "Breakpoint.*file.*shr2.c, line.*" \ + "breakpoint function shr2" + +gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, shr2 \\(.*\\) at.*shr2\\.c:3.*3.*return 2.x;" \ +"run until breakpoint set at a function" + + +#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)" } + } + +#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" } + } + +#step -return + send_gdb "step\n" + gdb_expect { + -re ".*\\\}.*$gdb_prompt $" { pass "step inside shr2 (shlib func)"} + -re ".*$gdb_prompt $" { fail "step inside shr2 (shlib func)" } + timeout { fail "step inside shr2 (shlib func) (timeout)" } + } + + send_gdb "step\n" + gdb_expect { + -re "main \\(\\) at.*g = mainshr1\\(g\\);.*$gdb_prompt $" { pass "step out of shr2 to main"} + -re ".*$gdb_prompt $" { fail "step out of shr2 to main" } + timeout { fail "step out of shr2 to main (timeout)" } + } + +#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" } + } + +#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)" } + } + +# 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 $" + +# PR's 16495, 18213 +# test that we can re-set breakpoints in shared libraries +gdb_test "break shr1" "Breakpoint 1 at .*" "set bp in shared library" +gdb_test "run" "Starting program:.*Breakpoint 1,.*" "run to bp in shared library" +gdb_test "cont" "Program exited normally." +gdb_test "run" "Starting program:.*Breakpoint 1,.*" "re-run to bp in shared library (PR's 16495, 18213)" +gdb_test "cont" "Program exited normally." + +return 0 |