X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftestsuite%2Fgdb.base%2Fcorefile.exp;h=b9fc7dca94fdb9fe2afdfa0c62b71f2eaf47a4b7;hb=4c93b1dbf4b961c11d393440e6417678864ed9c2;hp=f998f88665980a7f747fc5bff76a99320566d7bc;hpb=d0352a18a504a4e7b761f6b3264cf11347d8d056;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/testsuite/gdb.base/corefile.exp b/gdb/testsuite/gdb.base/corefile.exp index f998f88665..b9fc7dca94 100644 --- a/gdb/testsuite/gdb.base/corefile.exp +++ b/gdb/testsuite/gdb.base/corefile.exp @@ -1,30 +1,20 @@ -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. +# Copyright 1992-2000, 2007-2012 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 . # This file was written by Fred Fish. (fnf@cygnus.com) -if $tracelevel then { - strace $tracelevel -} - -set prms_id 0 -set bug_id 0 # are we on a target board if ![isnative] then { @@ -35,64 +25,27 @@ set testfile "coremaker" set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { - gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." + untested corefile.exp + return -1 } # Create and source the file that provides information about the compiler # used to compile the test case. -if [get_compiler_info ${binfile}] { +if [get_compiler_info] { return -1; } -# Create a core file named "corefile" rather than just "core", to -# avoid problems with sys admin types that like to regularly prune all -# files named "core" from the system. -# -# Arbitrarily try setting the core size limit to "unlimited" since -# this does not hurt on systems where the command does not work and -# allows us to generate a core on systems where it does. -# -# Some systems append "core" to the name of the program; others append -# the name of the program to "core". -set found 0 -catch "system \"(cd ${objdir}/${subdir}; ulimit -c unlimited; ${binfile}; true) >/dev/null 2>&1\"" -# remote_exec host "${binfile}" -foreach i "${objdir}/${subdir}/core ${objdir}/${subdir}/core.coremaker.c ${binfile}.core" { - if [remote_file build exists $i] { - remote_exec build "mv $i ${objdir}/${subdir}/corefile" - set found 1 - } -} -if { $found == 0 } { - # The braindamaged HPUX shell quits after the ulimit -c above - # without executing ${binfile}. So we try again without the - # ulimit here if we didn't find a core file above. - # Oh, I should mention that any "braindamaged" non-Unix system has - # the same problem. I like the cd bit too, it's really neat'n stuff. - catch "system \"(cd ${objdir}/${subdir}; ${binfile}; true) >/dev/null 2>&1\"" - foreach i "${objdir}/${subdir}/core ${objdir}/${subdir}/core.coremaker.c ${binfile}.core" { - if [remote_file build exists $i] { - remote_exec build "mv $i ${objdir}/${subdir}/corefile" - set found 1 - } - } - - if { $found == 0 } { - warning "can't generate a core file - core tests suppressed - check ulimit -c" - return 0 - } +set corefile [core_find $binfile {coremmap.data}] +if {$corefile == ""} { + return 0 } -# -# Test that we can simply startup with a "-core=corefile" command line arg +# Test that we can simply startup with a "-core=$corefile" command line arg # and recognize that the core file is a valid, usable core file. # To do this, we must shutdown the currently running gdb and restart # with the -core args. We can't use gdb_start because it looks for # the first gdb prompt, and the message we are looking for occurs -# before the first prompt. Also, we can't include GDBFLAGS because -# if it is empty, this confuses gdb with an empty argument that it -# grumbles about (said grumbling currently being ignored in gdb_start). -# **FIXME** +# before the first prompt. # # Another problem is that on some systems (solaris for example), there # is apparently a limit on the length of a fully specified path to @@ -101,24 +54,27 @@ if { $found == 0 } { gdb_exit if $verbose>1 then { - send_user "Spawning $GDB -nw $GDBFLAGS -core=$objdir/$subdir/corefile\n" + send_user "Spawning $GDB $INTERNAL_GDBFLAGS $GDBFLAGS -core=$corefile\n" } set oldtimeout $timeout set timeout [expr "$timeout + 60"] verbose "Timeout is now $timeout seconds" 2 -eval "spawn $GDB -nw $GDBFLAGS -core=$objdir/$subdir/corefile" +eval "spawn $GDB $INTERNAL_GDBFLAGS $GDBFLAGS -core=$corefile" expect { + -re "Couldn't find .* registers in core file.*$gdb_prompt $" { + fail "args: -core=[file tail $corefile] (couldn't find regs)" + } -re "Core was generated by .*coremaker.*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { - pass "args: -core=corefile" + pass "args: -core=[file tail $corefile]" } -re "Core was generated by .*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { - pass "args: -core=corefile (with bad program name)" + pass "args: -core=[file tail $corefile] (with bad program name)" } -re ".*registers from core file: File in wrong format.* $" { - fail "args: -core=corefile (could not read registers from core file)" + fail "args: -core=[file tail $corefile] (could not read registers from core file)" } - -re ".*$gdb_prompt $" { fail "args: -core=corefile" } + -re ".*$gdb_prompt $" { fail "args: -core=[file tail $corefile]" } timeout { fail "(timeout) starting with -core" } } @@ -131,22 +87,22 @@ expect { close; if $verbose>1 then { - send_user "Spawning $GDB -nw $GDBFLAGS $binfile -core=$objdir/$subdir/corefile\n" + send_user "Spawning $GDB $INTERNAL_GDBFLAGS $GDBFLAGS $binfile -core=$corefile\n" } -eval "spawn $GDB -nw $GDBFLAGS $binfile -core=$objdir/$subdir/corefile"; +eval "spawn $GDB $INTERNAL_GDBFLAGS $GDBFLAGS $binfile -core=$corefile"; expect { -re "Core was generated by .*coremaker.*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { - pass "args: execfile -core=corefile" + pass "args: execfile -core=[file tail $corefile]" } -re "Core was generated by .*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { - pass "args: execfile -core=corefile (with bad program name)" + pass "args: execfile -core=[file tail $corefile] (with bad program name)" } -re ".*registers from core file: File in wrong format.* $" { - fail "args: execfile -core=corefile (could not read registers from core file)" + fail "args: execfile -core=[file tail $corefile] (could not read registers from core file)" } - -re ".*$gdb_prompt $" { fail "args: execfile -core=corefile" } + -re ".*$gdb_prompt $" { fail "args: execfile -core=[file tail $corefile]" } timeout { fail "(timeout) starting with -core" } } set timeout $oldtimeout @@ -162,8 +118,12 @@ gdb_load ${binfile} # Test basic corefile recognition via core-file command. -send_gdb "core-file $objdir/$subdir/corefile\n" -gdb_expect { +gdb_test_multiple "core-file $corefile" "core-file command" { + -re ".* program is being debugged already.*y or n. $" { + # gdb_load may connect us to a gdbserver. + send_gdb "y\n" + exp_continue; + } -re "Core was generated by .*coremaker.*\r\n\#0 .*\(\).*\r\n$gdb_prompt $" { pass "core-file command" } @@ -173,8 +133,6 @@ gdb_expect { -re ".*registers from core file: File in wrong format.* $" { fail "core-file command (could not read registers from core file)" } - -re ".*$gdb_prompt $" { fail "core-file command" } - timeout { fail "(timeout) core-file command" } } # Test correct mapping of corefile sections by printing some variables. @@ -183,7 +141,7 @@ gdb_test "print coremaker_data" "\\\$$decimal = 202" gdb_test "print coremaker_bss" "\\\$$decimal = 10" gdb_test "print coremaker_ro" "\\\$$decimal = 201" -gdb_test "print func2::coremaker_local" "\\\$$decimal = {0, 1, 2, 3, 4}" +gdb_test "print func2::coremaker_local" "\\\$$decimal = \\{0, 1, 2, 3, 4\\}" # Somehow we better test the ability to read the registers out of the core # file correctly. I don't think the other tests do this. @@ -195,29 +153,106 @@ gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(.*\\).*" "up in corefile.exp" gdb_test "x/8bd buf1" ".*:.*0.*1.*2.*3.*4.*5.*6.*7" "accessing original mmap data in core file" setup_xfail "*-*-sunos*" "*-*-ultrix*" "*-*-aix*" -send_gdb "x/8bd buf2\n" -gdb_expect { +set test "accessing mmapped data in core file" +gdb_test_multiple "x/8bd buf2" "$test" { -re ".*:.*0.*1.*2.*3.*4.*5.*6.*7.*$gdb_prompt $" { - pass "accessing mmapped data in core file" + pass "$test" } -re "0x\[f\]*:.*Cannot access memory at address 0x\[f\]*.*$gdb_prompt $" { - fail "accessing mmapped data (mapping failed at runtime)" + fail "$test (mapping failed at runtime)" } -re "0x.*:.*Cannot access memory at address 0x.*$gdb_prompt $" { - fail "accessing mmapped data (mapping address not found in core file)" - } - -re ".*$gdb_prompt $" { - fail "accessing mmapped data (incorrect data found in core file)" - } - timeout { - fail "accessing mmapped data (timeout)" + fail "$test (mapping address not found in core file)" } } # test reinit_frame_cache gdb_load ${binfile} -setup_xfail "*-*-*" CLLbs17002 -gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\)" "up in corefile.exp (reinit)" +gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(.*\\).*" "up in corefile.exp (reinit)" gdb_test "core" "No core file now." + + +# Test a run (start) command will clear any loaded core file. + +gdb_test "core-file $corefile" "Core was generated by .*" "run: load core again" +gdb_test "info files" "\r\nLocal core dump file:\r\n.*" "run: sanity check we see the core file" + +set test "run: with core" +if [runto_main] { + pass $test +} else { + fail $test +} + +set test "run: core file is cleared" +gdb_test_multiple "info files" $test { + -re "\r\nLocal core dump file:\r\n.*\r\n$gdb_prompt $" { + fail $test + } + -re "\r\n$gdb_prompt $" { + pass $test + } +} + +set test "quit with a process" +gdb_test_multiple "quit" $test { + -re "A debugging session is active.\r\n.*\r\nQuit anyway\\? \\(y or n\\) $" { + pass $test + gdb_test "n" {Not confirmed\.} "quit with processes: n" + } +} + +gdb_exit + +# Verify there is no question if only a core file is loaded. + +gdb_start +gdb_test "core-file $corefile" "Core was generated by .*" "no question: load core" + +set test "quit with a core file" +gdb_test_multiple "quit" $test { + -re "A debugging session is active.\r\n.*\r\nQuit anyway\\? \\(y or n\\) $" { + fail $test + gdb_test "n" {Not confirmed\.} "quit with processes: n" + } + eof { + pass $test + } +} + +gdb_exit + +# Test an attach command will clear any loaded core file. + +if ![is_remote target] { + set test "attach: spawn sleep" + set res [remote_spawn host "$binfile sleep"]; + if { $res < 0 || $res == "" } { + fail $test + return + } + set pid [exp_pid -i $res] + # We don't care whether the program is still in the startup phase when we + # attach. + + gdb_start + + gdb_test "core-file $corefile" "Core was generated by .*" "attach: load core again" + gdb_test "info files" "\r\nLocal core dump file:\r\n.*" "attach: sanity check we see the core file" + + gdb_test "attach $pid" "Attaching to process $pid\r\n.*" "attach: with core" + + set test "attach: core file is cleared" + gdb_test_multiple "info files" $test { + -re "\r\nLocal core dump file:\r\n.*\r\n$gdb_prompt $" { + fail $test + } + -re "\r\n$gdb_prompt $" { + pass $test + } + } + + gdb_exit +}