From bbfba9ed150f56ba5b09360314b30381a865ff5c Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Thu, 14 Jan 2010 21:12:00 +0000 Subject: 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. --- gdb/testsuite/ChangeLog | 12 ++++++++ gdb/testsuite/gdb.base/break-interp-lib.c | 20 ++++++++++++-- gdb/testsuite/gdb.base/break-interp-main.c | 10 +++++-- gdb/testsuite/gdb.base/break-interp.exp | 44 ++++++++++++++++++++++++++++-- gdb/testsuite/lib/gdb.exp | 4 +-- 5 files changed, 81 insertions(+), 9 deletions(-) (limited to 'gdb/testsuite') diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9a571ad..57dc1ae 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,17 @@ 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. (test_ld): Call it. diff --git a/gdb/testsuite/gdb.base/break-interp-lib.c b/gdb/testsuite/gdb.base/break-interp-lib.c index c103da3..9ca943e 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 57b81f6..e12ec2b 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 553bbc6..d1c36ed 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 ee3061e..9b06a2f 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] { -- cgit v1.1