From: Jan Kratochvil Date: Thu, 14 Jan 2010 21:12:00 +0000 (+0000) Subject: gdb/testsuite/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bbfba9ed150f56ba5b09360314b30381a865ff5c;p=binutils-gdb.git gdb/testsuite/ * gdb.base/break-interp-lib.c: Include unistd.h, assert.h and stdio.h. (libfunc): New parameter action. Implement also selectable "sleep". * gdb.base/break-interp-main.c: Include assert.h. (libfunc): New parameter action. (main): New parameters argc and argv. Assert argc. Pass argv. * gdb.base/break-interp.exp (test_core): Pass the "segv" argument. (test_attach): New proc. (test_ld): Pass new "segv" exec parameter. Call also test_attach. * lib/gdb.exp (core_find): New parameter arg. Pass it to $binfile. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9a571ade133..57dc1aecf68 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2010-01-14 Jan Kratochvil + + * gdb.base/break-interp-lib.c: Include unistd.h, assert.h and stdio.h. + (libfunc): New parameter action. Implement also selectable "sleep". + * gdb.base/break-interp-main.c: Include assert.h. + (libfunc): New parameter action. + (main): New parameters argc and argv. Assert argc. Pass argv. + * gdb.base/break-interp.exp (test_core): Pass the "segv" argument. + (test_attach): New proc. + (test_ld): Pass new "segv" exec parameter. Call also test_attach. + * lib/gdb.exp (core_find): New parameter arg. Pass it to $binfile. + 2010-01-14 Jan Kratochvil * gdb.base/break-interp.exp (test_core): New proc. diff --git a/gdb/testsuite/gdb.base/break-interp-lib.c b/gdb/testsuite/gdb.base/break-interp-lib.c index c103da34626..9ca943e9988 100644 --- a/gdb/testsuite/gdb.base/break-interp-lib.c +++ b/gdb/testsuite/gdb.base/break-interp-lib.c @@ -16,9 +16,25 @@ along with this program. If not, see . */ #include +#include +#include +#include void -libfunc (void) +libfunc (const char *action) { - raise (SIGSEGV); + assert (action != NULL); + + if (strcmp (action, "segv") == 0) + raise (SIGSEGV); + + if (strcmp (action, "sleep") == 0) + { + puts ("sleeping"); + fflush (stdout); + + sleep (60); + } + + assert (0); } diff --git a/gdb/testsuite/gdb.base/break-interp-main.c b/gdb/testsuite/gdb.base/break-interp-main.c index 57b81f6ffa5..e12ec2bd088 100644 --- a/gdb/testsuite/gdb.base/break-interp-main.c +++ b/gdb/testsuite/gdb.base/break-interp-main.c @@ -15,12 +15,16 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -extern void libfunc (void); +#include + +extern void libfunc (const char *action); int -main (void) +main (int argc, char **argv) { - libfunc (); + assert (argc == 2); + + libfunc (argv[1]); return 0; } diff --git a/gdb/testsuite/gdb.base/break-interp.exp b/gdb/testsuite/gdb.base/break-interp.exp index 553bbc6266c..d1c36ede416 100644 --- a/gdb/testsuite/gdb.base/break-interp.exp +++ b/gdb/testsuite/gdb.base/break-interp.exp @@ -240,7 +240,7 @@ proc reach {func command} { proc test_core {file} { global srcdir subdir gdb_prompt - set corefile [core_find $file] + set corefile [core_find $file {} "segv"] if {$corefile == ""} { return } @@ -258,6 +258,44 @@ proc test_core {file} { gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "core main bt" } +proc test_attach {file} { + global board_info + + gdb_exit + + set test "sleep function started" + + set command "${file} sleep" + set res [remote_spawn host $command]; + if { $res < 0 || $res == "" } { + perror "Spawning $command failed." + fail $test + return + } + set pid [exp_pid -i $res] + gdb_expect { + -re "sleeping\r\n" { + pass $test + } + eof { + fail "$test (eof)" + return + } + timeout { + fail "$test (timeout)" + return + } + } + + gdb_exit + gdb_start + gdb_test "attach $pid" "Attaching to process $pid\r\n.*" "attach" + gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "attach main bt" + gdb_exit + + remote_exec host "kill -9 $pid" +} + proc test_ld {file ifmain trynosym} { global srcdir subdir gdb_prompt @@ -270,7 +308,7 @@ proc test_ld {file ifmain trynosym} { gdb_reinitialize_dir $srcdir/$subdir gdb_load $file - reach "dl_main" run + reach "dl_main" "run segv" gdb_test "bt" "#0 +\[^\r\n\]*\\mdl_main\\M.*" "dl bt" @@ -282,6 +320,8 @@ proc test_ld {file ifmain trynosym} { gdb_test "bt" "#0 +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#1 +\[^\r\n\]*\\mmain\\M.*" "main bt" test_core $file + + test_attach $file } if !$trynosym { diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index ee3061e1fae..9b06a2f7503 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3121,7 +3121,7 @@ if {[info exists TRANSCRIPT]} { } } -proc core_find {binfile {deletefiles {}}} { +proc core_find {binfile {deletefiles {}} {arg ""}} { global objdir subdir set destcore "$binfile.core" @@ -3143,7 +3143,7 @@ proc core_find {binfile {deletefiles {}}} { 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\"" + catch "system \"(cd ${coredir}; ulimit -c unlimited; ${binfile} ${arg}; 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] {