diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-01-14 21:12:00 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-01-14 21:12:00 +0000 |
commit | bbfba9ed150f56ba5b09360314b30381a865ff5c (patch) | |
tree | e19bd8850f4c2d90c1a662b736907121b67939b8 /gdb | |
parent | 61f0d76280d963a9ecf3a3a525dae7ac21050636 (diff) | |
download | gdb-bbfba9ed150f56ba5b09360314b30381a865ff5c.zip gdb-bbfba9ed150f56ba5b09360314b30381a865ff5c.tar.gz gdb-bbfba9ed150f56ba5b09360314b30381a865ff5c.tar.bz2 |
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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/break-interp-lib.c | 20 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/break-interp-main.c | 10 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/break-interp.exp | 44 | ||||
-rw-r--r-- | gdb/testsuite/lib/gdb.exp | 4 |
5 files changed, 81 insertions, 9 deletions
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 <jan.kratochvil@redhat.com> + * 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 <jan.kratochvil@redhat.com> + * 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 <http://www.gnu.org/licenses/>. */ #include <signal.h> +#include <unistd.h> +#include <assert.h> +#include <stdio.h> 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 <http://www.gnu.org/licenses/>. */ -extern void libfunc (void); +#include <assert.h> + +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] { |