From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16747 invoked by alias); 9 Nov 2009 21:00:35 -0000 Received: (qmail 16737 invoked by uid 22791); 9 Nov 2009 21:00:33 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 09 Nov 2009 21:00:27 +0000 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nA9L0PLV028757 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 9 Nov 2009 16:00:25 -0500 Received: from host0.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx05.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id nA9L0MkD031900 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 9 Nov 2009 16:00:25 -0500 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.3/8.14.3) with ESMTP id nA9L0LR5019402 for ; Mon, 9 Nov 2009 22:00:21 +0100 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.3/8.14.3/Submit) id nA9L0L3d019401 for gdb-patches@sourceware.org; Mon, 9 Nov 2009 22:00:21 +0100 Date: Mon, 09 Nov 2009 21:00:00 -0000 From: Jan Kratochvil To: gdb-patches@sourceware.org Subject: [patch 11/15] PIE: testsuite: Make a proc to find a core Message-ID: <20091109210021.GL19138@host0.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-08-17) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-11/txt/msg00178.txt.bz2 Hi, this change should have no functionality impact; just the core file now "gdb.base/corefile" is then placed as "gdb.base/coremaker.core". As finding the core file is difficult across platforms and was already present in the sources I moved it into lib/gdb.exp to make it reusable by later patch. (It can now in one case do "mv gdb.base/coremaker.core gdb.base/coremaker.core", I find it OK.) Thanks, Jan gdb/testsuite/ * 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. --- 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 - } - } +set corefile [core_find $binfile {coremmap.data}] +if {$corefile == ""} { + return 0; } -# 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" - 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. --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3045,3 +3045,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 +}