diff options
author | Pedro Alves <palves@redhat.com> | 2009-10-19 09:56:34 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2009-10-19 09:56:34 +0000 |
commit | b321dd9007fe320d5af1a84d6169239382271fa7 (patch) | |
tree | 29905c1f7bfa3c9bb683c1ca129b37377414d637 | |
parent | 6c95b8df7fef5273da71c34775918c554aae0ea8 (diff) | |
download | binutils-b321dd9007fe320d5af1a84d6169239382271fa7.zip binutils-b321dd9007fe320d5af1a84d6169239382271fa7.tar.gz binutils-b321dd9007fe320d5af1a84d6169239382271fa7.tar.bz2 |
Adding files to HEAD that cvs had declared dead due to existing on
the branch only.
gdb/testsuite/
* gdb.base/foll-vfork.exp: Adjust to spell out "follow-fork".
* gdb.base/foll-exec.exp: Adjust to expect a process id before
"Executing new program".
* gdb.base/foll-fork.exp: Adjust to spell out "follow-fork".
* gdb.base/multi-forks.exp: Ditto. Adjust to the inferior being
left listed after having been killed.
* gdb.base/attach.exp: Adjust to spell out "symbol-file".
* gdb.base/maint.exp: Adjust test.
* Makefile.in (ALL_SUBDIRS): Add gdb.multi.
* gdb.multi/Makefile.in: New.
* gdb.multi/base.exp: New.
* gdb.multi/goodbye.c: New.
* gdb.multi/hangout.c: New.
* gdb.multi/hello.c: New.
* gdb.multi/bkpt-multi-exec.c: New.
* gdb.multi/bkpt-multi-exec.exp: New.
* gdb.multi/crashme.c: New.
-rw-r--r-- | gdb/testsuite/gdb.multi/Makefile.in | 14 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/base.exp | 102 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/bkpt-multi-exec.c | 13 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/bkpt-multi-exec.exp | 84 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/crashme.c | 12 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/goodbye.c | 62 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/hangout.c | 26 | ||||
-rw-r--r-- | gdb/testsuite/gdb.multi/hello.c | 46 |
8 files changed, 359 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.multi/Makefile.in b/gdb/testsuite/gdb.multi/Makefile.in new file mode 100644 index 0000000..8c34159 --- /dev/null +++ b/gdb/testsuite/gdb.multi/Makefile.in @@ -0,0 +1,14 @@ +VPATH = @srcdir@ +srcdir = @srcdir@ + +EXECUTABLES = hello hangout goodbye bkpt-multi-exec crashme + +all info install-info dvi install uninstall installcheck check: + @echo "Nothing to be done for $@..." + +clean mostlyclean: + -rm -f *~ *.o *.ci + -rm -f core $(EXECUTABLES) + +distclean maintainer-clean realclean: clean + -rm -f Makefile config.status config.log diff --git a/gdb/testsuite/gdb.multi/base.exp b/gdb/testsuite/gdb.multi/base.exp new file mode 100644 index 0000000..e20b059 --- /dev/null +++ b/gdb/testsuite/gdb.multi/base.exp @@ -0,0 +1,102 @@ +# Copyright 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test multi-exec / multi-process features that work for all configurations, +# even ones that cannot run multiple processes simultaneously. + +set testfile "base" + +set exec1 "hello" +set srcfile1 ${exec1}.c +set binfile1 ${objdir}/${subdir}/${exec1} + +set exec2 "hangout" +set srcfile2 ${exec2}.c +set binfile2 ${objdir}/${subdir}/${exec2} + +set exec3 "goodbye" +set srcfile3 ${exec3}.c +set binfile3 ${objdir}/${subdir}/${exec3} + +if { [prepare_for_testing ${testfile}.exp ${exec1} "${srcfile1}" {debug nowarnings}] } { + return -1 +} + +if { [prepare_for_testing ${testfile}.exp ${exec2} "${srcfile2}" {debug nowarnings}] } { + return -1 +} + +if { [prepare_for_testing ${testfile}.exp ${exec3} "${srcfile3}" {debug nowarnings}] } { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile1} + +# Add an empty inferior space, switch to it, and load a main +# executable into it. +gdb_test "add-inferior" "Added inferior 2.*" +gdb_test "inferior 2" "Switching to inferior 2.*" +gdb_test "file ${binfile2}" "" + +# Add a new inferior space and load a main executable into it in one +# command. +gdb_test "add-inferior -exec ${binfile3}" + +# Check that we have multiple spaces. + +gdb_test "info inferiors" \ + "Executable.*${exec3}.*${exec2}.*${exec1}.*" + +# Test that we have multiple symbol tables. + +gdb_test "inferior 1" +gdb_test "info functions commonfun" "${srcfile1}.*" + +gdb_test "inferior 3" +gdb_test "info functions commonfun" "${srcfile3}.*" + + +gdb_test "inferior 1" + +gdb_test "set listsize 1" "" + +gdb_test "list commonfun" "from hello.*" + +gdb_test "print hglob" "1" + +gdb_test "print glob" "92" "print glob (${exec1})" + + +gdb_test "inferior 3" + +gdb_test "print gglob" "2" + +gdb_test "print glob" "45" "print glob (${exec3})" + +gdb_test "list commonfun" "from goodbye.*" + + +# Let's run the hello program. +gdb_test "inferior 1" + +if { ![runto_main] } then { + return -1 +} + +gdb_test "break hello" "" +gdb_test "continue" "Breakpoint \[0-9\].*, hello.*" diff --git a/gdb/testsuite/gdb.multi/bkpt-multi-exec.c b/gdb/testsuite/gdb.multi/bkpt-multi-exec.c new file mode 100644 index 0000000..672d63b --- /dev/null +++ b/gdb/testsuite/gdb.multi/bkpt-multi-exec.c @@ -0,0 +1,13 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +int main (void) +{ + printf ("foll-exec is about to execl(crashme)...\n"); + + execl ("gdb.multi/crashme", + "gdb.multi/crashme", + (char *)0); +} diff --git a/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp b/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp new file mode 100644 index 0000000..f9e173c --- /dev/null +++ b/gdb/testsuite/gdb.multi/bkpt-multi-exec.exp @@ -0,0 +1,84 @@ +# Copyright 2009 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +if { [is_remote target] || ![isnative] } then { + continue +} + +set testfile "bkpt-multi-exec" + +set exec1 "bkpt-multi-exec" +set srcfile1 ${exec1}.c +set binfile1 ${objdir}/${subdir}/${exec1} + +set exec2 "crashme" +set srcfile2 ${exec2}.c +set binfile2 ${objdir}/${subdir}/${exec2} + +if { [prepare_for_testing ${testfile}.exp ${exec1} "${srcfile1}" {debug nowarnings}] } { + return -1 +} + +if { [prepare_for_testing ${testfile}.exp ${exec2} "${srcfile2}" {debug nowarnings}] } { + return -1 +} +# Until "catch exec" is implemented on other targets... +# +if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then { + continue +} + +# Start with a fresh gdb + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile1} + +# Start the program running, and stop at main. +# +if ![runto_main] then { + perror "Couldn't run ${binfile1}" + return +} + +delete_breakpoints + +# continuing should exec and trigger the bug +gdb_test "continue" "SIGSEGV.*" + +# Start over, but this time, set a breakpoint before the app crashes. + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile1} + +gdb_test "add-inferior -exec ${binfile2}" + +set bp_location [gdb_get_line_number "set breakpoint here" ${srcfile2}] + +gdb_test "inferior 2" +gdb_test "break ${srcfile2}:${bp_location}" "" + +# Start the program running, and stop at main. +# +gdb_test "inferior 1" + +# Now run to the breakpoint. This should cross the exec, and stop at +# the breakpoint before the crash. +gdb_test "run" "${srcfile2}:${bp_location}.*set breakpoint here.*" + +return 0 diff --git a/gdb/testsuite/gdb.multi/crashme.c b/gdb/testsuite/gdb.multi/crashme.c new file mode 100644 index 0000000..6749194 --- /dev/null +++ b/gdb/testsuite/gdb.multi/crashme.c @@ -0,0 +1,12 @@ +#include <stdlib.h> +#include <stdio.h> + +int +main (int argc, char **argv) +{ + int *foo = NULL; + + printf ("Oh no, a bug!\n"); /* set breakpoint here */ + + return *foo; +} diff --git a/gdb/testsuite/gdb.multi/goodbye.c b/gdb/testsuite/gdb.multi/goodbye.c new file mode 100644 index 0000000..0c3d93c --- /dev/null +++ b/gdb/testsuite/gdb.multi/goodbye.c @@ -0,0 +1,62 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +int gglob = 2; + +int glob = 45; + +int verylongfun() +{ + glob += 2; + glob *= 2; + glob += 3; + glob *= 3; + glob += 4; + glob *= 4; + glob += 5; + glob *= 5; + glob += 6; + glob *= 6; + glob += 7; + glob *= 7; + glob += 8; + glob *= 8; + glob += 9; + glob *= 9; +} + +main() { + mailand(); + foo(glob); + verylongfun(); + goodbye(); +} + +foo(int x) { + return x + 92; +} + +mailand() +{ + glob = 46; +} + +void commonfun() { mailand(); } /* from goodbye */ + +goodbye() { + ++glob; +} diff --git a/gdb/testsuite/gdb.multi/hangout.c b/gdb/testsuite/gdb.multi/hangout.c new file mode 100644 index 0000000..b2ee6ae --- /dev/null +++ b/gdb/testsuite/gdb.multi/hangout.c @@ -0,0 +1,26 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +main(int argc, char *argv[]) +{ + int i; + + for (i = 0; i < argc; ++i) + { + printf("Arg %d is %s\n", i, argv[i]); + } +} diff --git a/gdb/testsuite/gdb.multi/hello.c b/gdb/testsuite/gdb.multi/hello.c new file mode 100644 index 0000000..9cbb35f --- /dev/null +++ b/gdb/testsuite/gdb.multi/hello.c @@ -0,0 +1,46 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +short hglob = 1; + +short glob = 92; + +int commonfun() { bar(); } /* from hello */ + +bar() +{ + if (glob == 0) + exit(1); +} + +hello(int x) +{ + x *= 2; + return x + 45; +} + +main() +{ + int tmpx; + + bar(); + tmpx = hello(glob); + commonfun(); + glob = tmpx; + commonfun(); +} + |