aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2010-01-14 21:12:00 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2010-01-14 21:12:00 +0000
commitbbfba9ed150f56ba5b09360314b30381a865ff5c (patch)
treee19bd8850f4c2d90c1a662b736907121b67939b8 /gdb/testsuite
parent61f0d76280d963a9ecf3a3a525dae7ac21050636 (diff)
downloadgdb-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/testsuite')
-rw-r--r--gdb/testsuite/ChangeLog12
-rw-r--r--gdb/testsuite/gdb.base/break-interp-lib.c20
-rw-r--r--gdb/testsuite/gdb.base/break-interp-main.c10
-rw-r--r--gdb/testsuite/gdb.base/break-interp.exp44
-rw-r--r--gdb/testsuite/lib/gdb.exp4
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] {