diff options
-rw-r--r-- | gdb/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/corefile.exp | 87 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 67 |
3 files changed, 93 insertions, 70 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index bf2c0ff..f26b5f9 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2010-01-09 Jan Kratochvil <jan.kratochvil@redhat.com> + + * gdb.base/corefile.exp: Move the core finding block out and call it as + core_find, new variable $corefile, replace corefile by $corefile and + [file tail $corefile] for usage vs. test names resp. + * lib/gdb.exp (core_find): Move it as a new function here. New + parameter binfile and deletefiles. New variable $destcore. Pre-delete + $destcore. Return "" on error. + 2010-01-08 Jan Kratochvil <jan.kratochvil@redhat.com> Workaround PR binutils/10802. diff --git a/gdb/testsuite/gdb.base/corefile.exp b/gdb/testsuite/gdb.base/corefile.exp index 9acfe6a..d668f0d 100644 --- a/gdb/testsuite/gdb.base/corefile.exp +++ b/gdb/testsuite/gdb.base/corefile.exp @@ -42,65 +42,12 @@ if [get_compiler_info ${binfile}] { 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"; still others (like Linux, as of -# May 2003) create cores named "core.PID". In the latter case, we -# could have many core files lying around, and it may be difficult to -# tell which one is ours, so let's run the program in a subdirectory. -set found 0 -set coredir "${objdir}/${subdir}/coredir.[getpid]" -file mkdir $coredir -catch "system \"(cd ${coredir}; ulimit -c unlimited; ${binfile}; true) >/dev/null 2>&1\"" -# remote_exec host "${binfile}" -foreach i "${coredir}/core ${coredir}/core.coremaker.c ${binfile}.core" { - if [remote_file build exists $i] { - remote_exec build "mv $i ${objdir}/${subdir}/corefile" - set found 1 - } -} -# Check for "core.PID". -if { $found == 0 } { - set names [glob -nocomplain -directory $coredir core.*] - if {[llength $names] == 1} { - set corefile [file join $coredir [lindex $names 0]] - remote_exec build "mv $corefile ${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 - } - } -} - -# Try to clean up after ourselves. -remote_file build delete [file join $coredir coremmap.data] -remote_exec build "rmdir $coredir" - -if { $found == 0 } { - warning "can't generate a core file - core tests suppressed - check ulimit -c" +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 @@ -114,27 +61,27 @@ if { $found == 0 } { gdb_exit if $verbose>1 then { - send_user "Spawning $GDB $INTERNAL_GDBFLAGS $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 $INTERNAL_GDBFLAGS $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=corefile (couldn't find regs)" + 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" } } @@ -147,22 +94,22 @@ expect { close; if $verbose>1 then { - send_user "Spawning $GDB $INTERNAL_GDBFLAGS $GDBFLAGS $binfile -core=$objdir/$subdir/corefile\n" + send_user "Spawning $GDB $INTERNAL_GDBFLAGS $GDBFLAGS $binfile -core=$corefile\n" } -eval "spawn $GDB $INTERNAL_GDBFLAGS $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 @@ -178,7 +125,7 @@ gdb_load ${binfile} # Test basic corefile recognition via core-file command. -send_gdb "core-file $objdir/$subdir/corefile\n" +send_gdb "core-file $corefile\n" gdb_expect { -re ".* program is being debugged already.*y or n. $" { # gdb_load may connect us to a gdbserver. diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 2604b9f..ee3061e 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3120,3 +3120,70 @@ if {[info exists TRANSCRIPT]} { return [uplevel real_send_gdb $args] } } + +proc core_find {binfile {deletefiles {}}} { + global objdir subdir + + set destcore "$binfile.core" + file delete $destcore + + # Create a core file named "$destcore" 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"; still others (like Linux, as of + # May 2003) create cores named "core.PID". In the latter case, we + # could have many core files lying around, and it may be difficult to + # tell which one is ours, so let's run the program in a subdirectory. + set found 0 + set coredir "${objdir}/${subdir}/coredir.[getpid]" + file mkdir $coredir + catch "system \"(cd ${coredir}; ulimit -c unlimited; ${binfile}; true) >/dev/null 2>&1\"" + # remote_exec host "${binfile}" + foreach i "${coredir}/core ${coredir}/core.coremaker.c ${binfile}.core" { + if [remote_file build exists $i] { + remote_exec build "mv $i $destcore" + set found 1 + } + } + # Check for "core.PID". + if { $found == 0 } { + set names [glob -nocomplain -directory $coredir core.*] + if {[llength $names] == 1} { + set corefile [file join $coredir [lindex $names 0]] + remote_exec build "mv $corefile $destcore" + 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 $destcore" + set found 1 + } + } + } + + # Try to clean up after ourselves. + foreach deletefile $deletefiles { + remote_file build delete [file join $coredir $deletefile] + } + remote_exec build "rmdir $coredir" + + if { $found == 0 } { + warning "can't generate a core file - core tests suppressed - check ulimit -c" + return "" + } + return $destcore +} |